본문 바로가기
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