쿠버네티스 네임스페이스가 삭제되지 않을 때 강제 삭제하기

최대 1 분 소요

문제

가끔식 문제가 발생하여, 네임스페이스(namespace)를 삭제할때, 상태만 Terminating으로 변하고, 계속 기다려도 삭제가 되지 않는 경우가 있다.

이럴 경우에는 네임스페이스의 finalizers를 제거해 주면 된다. (하지만 정상작으로 삭제될때까지 기다리는게 가장 좋다)

해결 방법

foo라는 네임스페이스가 있다고 가정한다.

다음과 같은 명령어로 네임스페이스 정의 내역을 json 파일로 저장한다.

$ kubectl get namespace foo -o json > foo.json

foo.json 파일을 영어서 finalizers 부분에 있는 kubernetes 값을 삭제하고, 저장한다.

그런 다음 쿠베 프락시를 실행한다. 쿠버네티스 api를 호출할 예정인데, 인증 토큰이 필요하다. kubectl proxy를 이용하면, 저장되어 있는 인증토큰을 자동으로 이용한다.

$ kubectl proxy
Starting to serve on 127.0.0.1:8001

다른 터미널을 열어서 쿠버네티스 api를 호출한다. 다음과 같이 api를 호출하면 변경된 finalizers 부분이 쿠버네티스에 반영된다.

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