Published on

Raspberry PI 4 k3s 쿠버네티스 delete namespace 가 되지 않을 때.

Authors
  • Name
    Twitter

Overview

Raspberry PI 4 k3s 쿠버네티스에서 delete namespace가 되지 않을 때 해결 방법을 알아본다. Kubernetes Namespace에는 Finalizer가 있고 이는 resource가 hard delete 되지 않도록 막아둔 기능이다. 예를 들어 실행중인 Namespac인 monitoringkubectl delete ns monitoring와 같이 hard하게 지우려 했을 때 발생하며, 지우려고 시도했던 Namespace는 Terminating 상태로 멈춰있게된다.

$ sudo kubectl get namespace
NAME                   STATUS        AGE
default                Active        2d22h
kube-system            Active        2d22h
kube-public            Active        2d22h
kube-node-lease        Active        2d22h
kubernetes-dashboard   Active        2d21h
monitoring             Terminating   6m51s

How?

NameSpace Edit

아래 명령어로 monitoring namespace에 대한 정보를 tmp.json으로 추출한다.

$ sudo kubectl get ns monitoring -o json > tmp.json

그리고 tmp.json을 열어 spec 하위의 finalizers의 빈 배열 값으로 아래와 같이 수정한다.

"spec": {
"finalizers": []
}

apply

터미널을 새로 열어서 kubectl proxy 서버를 띄운다.

$ sudo kubectl proxy

아래 curl 명령어로 수정한 tmp.json를 해당 namespace에 적용한다.

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

Result

아래 명령어로 namespace를 확인해보면, monitoring namespace가 정상적으로 삭제된 것을 확인할 수 있다.

$ sudo kubectl get ns
NAME                   STATUS   AGE
default                Active   2d22h
kube-system            Active   2d22h
kube-public            Active   2d22h
kube-node-lease        Active   2d22h
kubernetes-dashboard   Active   2d21hgit

Reference