- Authors
- Name
Overview
Raspberry PI 4 k3s Kubernetesでdelete namespaceが停止する場合の解決方法を紹介します。 Kubernetes NamespaceにはFinalizerがあり、これはリソースがhard deleteされないように保護する機能です。 例えば、実行中のNamespaceであるmonitoringをkubectl delete ns monitoringのようにhard deleteしようとした場合に発生し、削除しようとした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