Skip to content
Published on

Raspberry PI 4 k3s Kubernetesでdelete namespaceが停止する場合の対処法

Authors
  • Name
    Twitter

Overview

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

Reference