vm.gowatana.jp

NEOにほんごVMware(仮)

うまく削除できなかった vSphere Pod を削除してみる。

vSphere with Tanzu によるスーパーバイザー クラスタで、vSphere Pod が削除できなくなることがあります。そもそも vSphere Pod は右クリックメニューなどから削除できないこともあり、わりと悩ましい状態になります。

そこで、なぜか残ってしまった Pod を削除する方法を紹介してみます。 

削除ずみの vSphere Pod が残った状態

kubectl(kubectl delete pod ~ など)で vSphere Pod を削除すると、下記のような状態で Pod が残ってしまうことがあります。通常は少し待つと自動的に削除されますが、たまに 1日待っても vCenter を再起動しても削除されないことがあります。

停止された Pod が残っている様子です。

f:id:gowatana:20201123195851p:plain

ごく稀に、起動中の Pod が残ったりもします。

f:id:gowatana:20201123195933p:plain

kubectl では、すでに Pod が削除された状態で、対象の名前空間では、Pod がみつかりません。

$ kubectl config current-context
lab-ns-01
$ kubectl config get-contexts lab-ns-01
CURRENT   NAME        CLUSTER         AUTHINFO                                        NAMESPACE
*         lab-ns-01   192.168.70.97   wcp:192.168.70.97:administrator@vsphere.local   lab-ns-01
$ kubectl get pods -n lab-ns-01
No resources found in lab-ns-01 namespace.

スーパーバイザー クラスタの名前空間を削除すれば一緒に削除できますが、Pod 単位での削除を試みます。

vCenter インベントリに残った vSphere Pod の削除

まず、Pod が残った名前空間に、あえて同名の Pod「demo-centos7-httpd-6b58f9f454-2jddf」を作成します。コンテナ イメージは何でもよいので、サイズが小さそうな busybox を利用しました。

$ kubectl run demo-centos7-httpd-6b58f9f454-2jddf --image=busybox --restart=Never
pod/demo-centos7-httpd-6b58f9f454-2jddf created

このとき、名前空間にはすでに同名 Pod があるため、Pod の作成は失敗します。

$ kubectl get pod
NAME                                  READY   STATUS                RESTARTS   AGE
demo-centos7-httpd-6b58f9f454-2jddf   0/1     PodVMCreationFailed   0          5s

vSphere Client でも、Pod の作成が失敗します。

f:id:gowatana:20201123200057p:plain

ここから、あらためて Pod を削除します。

$ kubectl delete pod demo-centos7-httpd-6b58f9f454-2jddf
pod "demo-centos7-httpd-6b58f9f454-2jddf" deleted
$ kubectl get pod
No resources found in lab-ns-01 namespace.

これで Pod「demo-centos7-httpd-6b58f9f454-2jddf」は削除されました。

f:id:gowatana:20201123200140p:plain

同様に、もう一つの vSphere Pod「demo-centos7-httpd-68979c6d58-4l47n」も削除します。

$ kubectl run demo-centos7-httpd-68979c6d58-4l47n --image=busybox --restart=Never
pod/demo-centos7-httpd-68979c6d58-4l47n created
$ kubectl get pods
NAME                                  READY   STATUS                RESTARTS   AGE
demo-centos7-httpd-68979c6d58-4l47n   0/1     PodVMCreationFailed   0          22s
$ kubectl delete pod demo-centos7-httpd-68979c6d58-4l47n
pod "demo-centos7-httpd-68979c6d58-4l47n" deleted
$ kubectl get pods
No resources found in lab-ns-01 namespace.

vSphere Client でも、削除が確認できました。

f:id:gowatana:20201123200220p:plain

このように vSphere Pod が削除できますが、他にいい方法がないかは気になっています・・・

以上、kubectl で削除できなかった vSphere Pod を削除してみる話でした。