본문 바로가기
Come on IT/DevOps

K8s namespace가 deleted 안될 때 (feat. monitoring)

by JONGSKY 2024. 10. 14.
728x90
SMALL

 

kubectl delete namespace monitoring 명령을 실행했는데, namespace "monitoring" deleted 메시지가 출력되었음에도 불구하고 실제로 네임스페이스가 삭제되지 않을 때는, 종종 네임스페이스 내에서 제거되지 않은 리소스가 원인이 될 수 있습니다. 네임스페이스가 "Terminating" 상태로 남아 있는 경우가 대표적인 예입니다. 이를 해결하기 위한 방법은 다음과 같습니다.

 

1. 네임스페이스 강제 삭제 시도

우선 네임스페이스를 강제 삭제할 수 있습니다.

kubectl get namespace <namespace-name> -o json | jq '.spec = {"finalizers":[]}' | kubectl replace --raw "/api/v1/namespaces/<namespace-name>/finalize" -f -
 

위 명령어는 finalizer를 비워 강제 삭제를 시도하는 방법입니다.

예시:

kubectl get namespace gpu-operator -o json | jq '.spec = {"finalizers":[]}' | kubectl replace --raw "/api/v1/namespaces/gpu-operator/finalize" -f -
kubectl get namespace monitoring -o json | jq '.spec = {"finalizers":[]}' | kubectl replace --raw "/api/v1/namespaces/monitoring/finalize" -f -

2. 남아 있는 리소스 확인 및 삭제

해당 네임스페이스 안에 남아 있는 리소스가 있으면 삭제되지 않고 남아 있을 수 있습니다. 다음 명령어로 네임스페이스 내 리소스를 확인해 보세요.

kubectl get all -n <namespace-name>
 

만약 리소스가 있다면 kubectl delete 명령어로 개별적으로 삭제를 시도할 수 있습니다.

3. API 리소스 체크

특정 API 리소스가 문제를 일으킬 수 있으므로, 이를 확인하는 것이 필요할 수 있습니다. 다음 명령어로 확인할 수 있습니다.

kubectl api-resources --verbs=list --namespaced -o name | xargs -n 1 kubectl get -n <namespace-name>
 

이 명령어는 네임스페이스 안에 남아 있는 모든 리소스를 확인할 수 있습니다.

4. 마스터 노드 로그 확인

네임스페이스 삭제 관련 오류는 종종 마스터 노드 로그에 기록되므로, 해당 로그를 확인해 문제를 더 구체적으로 파악할 수 있습니다.

kubectl describe namespace <namespace-name>
 

이 명령어로 네임스페이스가 왜 Terminating 상태에서 멈췄는지에 대한 힌트를 얻을 수 있습니다.

이 단계를 시도해 보고 문제가 해결되지 않으면 추가적인 진단이 필요할 수 있습니다.

728x90
LIST