Kubernetes 트러블슈팅
출처: 문서
본문
Kubernetes가 Service 엔티티에 표시되지 않음
이것은 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>'