OpenShift Service Meshをアンインストールする際に、Control Planeが削除できなくなる事象が発生したのでメモ。
事象
oc deleteでControl Planeを削除しようとしたところ、deletingのままスタックしてしまい、istio-systemも削除できなくなる。
$ oc get smcp -n istio-system
NAME READY STATUS PROFILES VERSION AGE
basic 9/9 Deleting ["default"] 2.4.2 36d
Operatorのアンインストールはできたが、istio-systemとControl Planeは残ったままになる。oc delete --forceでも状況変わらず。
対応
Kubernetesでは、リソースを削除する前に実行される処理がfinalizersで指定される。この処理が完了しないとリソースが残ってしまうので、これを無効化する。
コマンドは以下。
$ oc patch -n istio-system smcp/basic --type=merge -p '{"metadata": {"finalizers":null}}'
servicemeshcontrolplane.maistra.io/basic patched
$ oc get smcp -n istio-system
Error from server (NotFound): Unable to list "maistra.io/v2, Resource=servicemeshcontrolplanes": the server could not find the requested resource (get servicemeshcontrolplanes.maistra.io)
ちなみに、Namespaceは以下のように削除できる。
$ oc get namespace istio-system -o json | sed -e 's/"kubernetes"//' | kubectl replace --raw "/api/v1/namespaces/istio-system/finalize" -f -
ただし、上記のようなリソースが削除できない状態だと、Namespaceを消してもリソースが残ったままになる可能性あり。今回実行したところ、Control Planeは相変わらずdeletingのままとなっていた。