Skip to main content

Kubernetes 故障排除

Kubernetes 未显示在服务实体上

可以通过检查 Kubernetes 集群是否连接到 backstage 来调试,如下所示:

curl --location --request POST '{{backstage-backend-url}}:{{backstage-backend-port}}/api/kubernetes/services/:service-entity-name' \
--header 'Content-Type: application/json' \
--data-raw '{
"entity": {
"metadata": {
"name": <service-entity-name>
}
}
}
'

curl 响应应包含来自 Kubernetes 的资源:

# curl response
{
"items": [
{
"cluster": {
"name": <cluster-name>
},
"resources": [
{
"type": "services",
"resources": [
{
"metadata": {
"creationTimestamp": "2022-03-13T13:52:46.000Z",
"labels": {
"app": <k8s-app-name>,
"backstage": <selector>,
"backstage.io/kubernetes-id": <service-entity-name>
},
"name": <k8s-app-name>,
"namespace": <namespace>
},
....
}
]
},
....
{
"type": "pods",
"resources": [
,,,,
]
}
],
"errors": []
}
]
}

当目录信息注释与相关 Kubernetes 资源不匹配时,Kubernetes 标签将不会显示任何内容。 我们建议您为资源添加以下标签,并使用标签选择器注释,如下所示:

backstage.io/kubernetes-id: <entity-service-name>用于获取 k8s 服务相关对象。查看插件代码

# k8s related yaml (service.yaml, deployment.yaml, ingress.yaml)
metadata:
creationTimestamp: '2022-03-13T13:52:46.000Z'
labels:
app: <k8s-app-name>
env: <environment>
backstage.io/kubernetes-id: <service-entity-name>
name: <k8s-app-name>
namespace: <namespace>

k8s-app-name 和 service-entity-name 可以不同,但如果您希望 k8s 和Backstage的名称保持一致,我们建议使用相同的名称。

而目录信息注释将使用标签选择器:

# catalog-info.yaml (backstage)
annotations:
backstage.io/kubernetes-label-selector: '<label-selector>'