쿠버네티스 Terminating 네임스페이스 강제 삭제: finalizers 정리

💡 핵심 요약 (Executive Summary)

본 가이드는 namespace 삭제되지 않는 경우 핵심 가이드 및 실전 아키텍처의 핵심 개념, 실전 구성 명령어 및 아키텍처 베스트 프랙티스를 다룹니다. 클라우드 네이티브 및 인프라 엔지니어링 실무에 즉시 활용 가능하도록 체계적으로 정리했습니다.

📑 Table of Contents
Reference & Guidelines (NOTE)

v1.33.5+k3s1 버전에서 기존 테스트결과와 다른 점 확인.

  • 기존의 .spec.finalizers = [] 로 효용이 없음
  • 해당 방식으로 정상삭제 확인 .metadata.finalizers = []
PUT API요청으로 namespace 삭제
bash
#jq 패키지 설치 및 IP/Port 확인
yum install jq
kubectl proxy & #8001

ns=cert-manager
#yaml 파일로 적용할 temp.json 파일 생성
kubectl get namespace $ns -o json |jq '.spec = {"finalizers":[]}' > temp.json

#수정사항 반영
curl -k -H "Content-Type: application/json" -X PUT --data-binary @temp.json http://127.0.0.1:8001/api/v1/namespaces/$ns/finalize
rm temp.json
loop
Terminating 조회하여 루프 실행
bash
kubectl proxy & #8001

for ns in $(kubectl get ns --no-headers | awk '/Terminating/ {print $1}'); do
  echo "Force deleting namespace: $ns"

  # 네임스페이스 JSON을 가져와 finalizers 제거
  kubectl get namespace "$ns" -o json \
    | jq 'del(.spec.finalizers)' > temp.json

  # curl PUT으로 finalize API 호출 (kube-apiserver 프록시 사용)
  curl -k -H "Content-Type: application/json" \
    -X PUT --data-binary @temp.json \
    http://127.0.0.1:8001/api/v1/namespaces/"$ns"/finalize
		rm temp.json
done
kuectl patch
bash
#metadata
for ns in $(kubectl get ns --no-headers | awk '/Terminating/ {print $1}'); do
  echo "Force deleting namespace: $ns"
	kubectl patch ns $ns --type='merge' -p='{"metadata": {"finalizers": []}}'
done

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *