본문 바로가기

Server Infra/Kubernetes

finalizers 제거기(Namespace Terminating)

728x90

argoCD 설치가 좀 잘못되어 제거도중 namespace가 terminating 상태에 빠져버렸다

왜 그런지 확인해보니 제거 도중 뭔가 잘못 꼬여 namespace의 kubernetes finalizers가 잘못된것.

https://kubernetes.io/blog/2021/05/14/using-finalizers-to-control-deletion/

 

Using Finalizers to Control Deletion

Authors: Aaron Alpar (Kasten) Deleting objects in Kubernetes can be challenging. You may think you’ve deleted something, only to find it still persists. While issuing a kubectl delete command and hoping for the best might work for day-to-day operations,

kubernetes.io

https://shortstories.gitbook.io/studybook/kubernetes/undefined/kubernetes-namespace-phase-terminating

 

Kubernetes namespace의 phase가 Terminating에서 멈춰있을 때 - studybook

API_SERVER=$(kubectl cluster-info | grep "Kubernetes master" | awk -F ' ' '{print $6}' | sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[mGK]//g")

shortstories.gitbook.io

 

위의 링크를 보며 각 스크립트를 실행 했음에도 삭제가 되지 않았다.

 

그래서 강제 조치에 들어간다. 방법은 Cluster API에 직접 finalizers 제거한 세팅을 집어 넣는방법이다.

 

먼저 cluster IP를 알아보자

kubectl proxy &

그리고 namespace의 상태를 가져온다

kubectl get namespace argocd -o json > argocd.json

그 다음 kuberntes라는 파이널라이져를 제거한다.

sed -i '/"kubernetes"/d' ./argocd.json

그 다음 Cluster에 직접 주입한다

curl -k -H "Content-Type: application/json" -X PUT --data-binary @argocd.json 127.0.01:8001/api/v1/namespaces/argocd/finalize

 

처음에 kubectl로 yaml을 수정하여 주입하려고 했는데 에러가 나며 실패했다.

cluster api로 하는것과 좀 다른 로직이 있는듯 하다.

 

무튼 이렇게 해서 정상적으로 제거하였다.

728x90