🐈
k8sでnamespace(pod)が削除できない
以下のようにとあるnamespaceを削除しようとするとステータスがTerninating状態だと削除されないことがある。
user$ kubectl get po <namespace>
NAME READY STATUS RESTARTS AGE
xxxxxxxxxxxxxxxxxxxx 1/1 Terminating 0 23h
解決方法
Terminating状態のpodを確認する
kubectl get po <namespace>
jsonファイルを以下コマンドで作成する
kubectl get namespace <namespace> -o json > tmp.json
tmp.json ファイルを編集し、finalizersフィールドからkubernetes値を削除して、ファイルを保存する。
以下のように
{
"apiVersion": "v1",
"kind": "Namespace",
"metadata": {
"creationTimestamp": "2018-11-19T18:48:30Z",
"deletionTimestamp": "2018-11-19T18:59:36Z",
"name": "<terminating-namespace>",
"resourceVersion": "1385077",
"selfLink": "/api/v1/namespaces/<terminating-namespace>",
"uid": "b50c9ea4-ec2b-11e8-a0be-fa163eeb47a5"
},
"spec": {
"finalizers":
},
"status": {
"phase": "Terminating"
}
}
一時プロキシーIPおよびポートを設定するには、以下のコマンドを実行する。
スタックしている名前空間を削除するまで、端末ウィンドウは必ず開いたままにしておく。
kubectl proxy
以下のような出力になる
Starting to serve on 127.0.0.1:8001
別のターミナル(別タブ)から以下のcurlを叩く
curl -k -H "Content-Type: application/json" -X PUT --data-binary @tmp.json http://127.0.0.1:8001/api/v1/namespaces/<terminating-namespace>/finalize
すると、以下のような出力がでてくる
一時プロキシーIPおよびポートを設定するには、以下のコマンドを実行する。
スタックしている名前空間を削除するまで、端末ウィンドウは必ず開いたままにしておく。
kubectl proxy
以下のような出力になる
Starting to serve on 127.0.0.1:8001
別のターミナル(別タブ)から以下のcurlを叩く
curl -k -H "Content-Type: application/json" -X PUT --data-binary @tmp.json http://127.0.0.1:8001/api/v1/namespaces/<terminating-namespace>/finalize
すると、以下のような出力がでてくる
Discussion