kubernetes の namespace が terminating になっていて消せない

kubernetes の namespace が terminating になっていて消せなかった時のメモです。

TL;DR

finalizar ってのがいてその処理があるので termine 待ちになっている。 そこを調査するなり、強制的に finalizar が走らないようにする。

finalizar について

以下がわかりやすいかなと思います。

Extend the Kubernetes API with CustomResourceDefinitions - Kubernetes

Finalizers allow controllers to implement asynchronous pre-delete hooks. Let’s say you create an external resource (such as a storage bucket) for each object of your API type, and you want to delete the associated external resource on object’s deletion from Kubernetes, you can use a finalizer to do that.

もうちょっと深くしりたいよって人は以下を見ると内部の話が乗ってます。 delete を完了するに kuberenetes の外部にある依存性しているリソースを消したい時につかうものです。

Using Finalizers - The Kubebuilder Book

削除方法

強制的に消す方法です。

$ kubectl get ns
NAME          STATUS        AGE
default       Active        25d
kube-public   Active        25d
kube-system   Active        25d
test      Terminating   5d
$ kubectl get ns test -o json > tmp.json

finalizers に記載されている箇所を消す。

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

これなんですけど、処理が終わらないダミーの finalizer が記載されていたりするとずっと終わらないです。 なので、このように強制的に消す必要が出てくる場合があります。

FIELDS:
   finalizers   <[]string>
     Finalizers is an opaque list of values that must be empty to permanently
     remove object from storage. More info:
     https://kubernetes.io/docs/tasks/administer-cluster/namespaces/

消し方の続きです。master node で以下を叩きます。

$ kubectl proxy
Starting to serve on 127.0.0.1:8001

で、先ほど作った tmp.json で上書きます

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

そうすると消えているはずです。

$ kubectl get ns
NAME          STATUS    AGE
default       Active    25d
kube-public   Active    25d
kube-system   Active    25d

その他

crd が消えないとかもありました。同様に finalizer を対処すれば強制的に消せます。 本来、finalizer の指定が間違っているとか、処理が終わらないのはどこで詰まっているんだろうとか調べた方がいいですが。

$ kubectl edit crd  tests.test.io

最後に kubernetes を勉強する上でのオススメ本を一冊だけ紹介しておきます。

Kubernetes完全ガイド (impress top gear)

Kubernetes完全ガイド (impress top gear)


シェアして頂けると嬉しいです。
参考になったという方がいれば是非お願いしますm(_ _ )m
モチベーション維持の観点で非常に励みになります。