LinuCエヴァンジェリストの鯨井貴博@opensourcetechです。
はじめに
KubernetesでPodが"Terminating"のまま、削除できない事象を回避するメモです。
事象の発生
以下のように、DeploymentとPodがあるので削除します。
kubeuser@kubemaster1:~$ kubectl get all NAME READY STATUS RESTARTS AGE pod/nginx-6c67f5ff6f-6hkw8 1/1 Running 0 2d17h pod/nginx-6c67f5ff6f-78kmz 1/1 Terminating 0 5d21h pod/nginx-6c67f5ff6f-f5xnz 1/1 Running 0 5d20h NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 5d23h NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/nginx 2/2 2 2 5d21h NAME DESIRED CURRENT READY AGE replicaset.apps/nginx-6c67f5ff6f 2 2 2 5d21h
ということで、deploymentの削除。
kubeuser@kubemaster1:~$ kubectl delete deployment nginx deployment.apps "nginx" deleted kubeuser@kubemaster1:~$ kubectl get all NAME READY STATUS RESTARTS AGE pod/nginx-6c67f5ff6f-6hkw8 1/1 Terminating 0 2d17h pod/nginx-6c67f5ff6f-78kmz 1/1 Terminating 0 5d21h pod/nginx-6c67f5ff6f-f5xnz 1/1 Terminating 0 5d20h NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 5d23h
しかし、一つのPodだけ削除できず残ってしまいました。
kubeuser@kubemaster1:~$ kubectl get pods NAME READY STATUS RESTARTS AGE nginx-6c67f5ff6f-78kmz 1/1 Terminating 0 5d21h kubeuser@kubemaster1:~$ kubectl describe pods Name: nginx-6c67f5ff6f-78kmz Namespace: default Priority: 0 Node: kubeworker2/192.168.1.254 Start Time: Wed, 01 Dec 2021 13:41:27 +0000 Labels: app=nginx pod-template-hash=6c67f5ff6f Annotations: cni.projectcalico.org/containerID: 134ee4de22750865ebde30d3154a9a84dd375fa680533fb16b1b8b0c9d33d1e4 cni.projectcalico.org/podIP: 10.0.225.1/32 cni.projectcalico.org/podIPs: 10.0.225.1/32 Status: Terminating (lasts 2d18h) Termination Grace Period: 30s IP: 10.0.225.1 IPs: IP: 10.0.225.1 Controlled By: ReplicaSet/nginx-6c67f5ff6f Containers: nginx: Container ID: docker://1428691efc36c56269e0dab3f445629293fe854afe0012d43d35344b5c53a848 Image: nginx:1.21.4 Image ID: docker-pullable://nginx@sha256:097c3a0913d7e3a5b01b6c685a60c03632fc7a2b50bc8e35bcaa3691d788226e Port: <none> Host Port: <none> State: Running Started: Wed, 01 Dec 2021 13:42:07 +0000 Ready: True Restart Count: 0 Environment: <none> Mounts: /var/run/secrets/kubernetes.io/serviceaccount from default-token-dvbfd (ro) Conditions: Type Status Initialized True Ready False ContainersReady True PodScheduled True Volumes: default-token-dvbfd: Type: Secret (a volume populated by a Secret) SecretName: default-token-dvbfd Optional: false QoS Class: BestEffort Node-Selectors: <none> Tolerations: node.kubernetes.io/not-ready:NoExecute for 300s node.kubernetes.io/unreachable:NoExecute for 300s Events: <none>
Podの強制削除
この場合、Podの強制削除をします。
通常のdeleteコマンドに、--grace-period=0と--forceを付与して実行します。
kubeuser@kubemaster1:~$ kubectl delete pods nginx-6c67f5ff6f-78kmz --grace-period=0 --force warning: Immediate deletion does not wait for confirmation that the running resource has been terminated. The resource may continue to run on the cluster indefinitely. pod "nginx-6c67f5ff6f-78kmz" force deleted kubeuser@kubemaster1:~$ kubectl get pods No resources found in default namespace.
公式ドキュメントの確認
公式ドキュメントでは、以下に記載があります。
StatefulSet Podの強制削除
https://kubernetes.io/ja/docs/tasks/run-application/force-delete-stateful-set-pod/
kubectlコマンドの概要にも、"--force"は載っています。
https://kubernetes.io/ja/docs/reference/kubectl/_print/
おわりに
kubectl delete pod nginx-****など試してみても、Terminatingのまま削除出来なかったのですが、
無事に削除出来て一安心。
しかし、なんで削除出来ない状態になったのか、気になりますね。