"Terminating"のまま削除できないPodの強制削除(kubernetes)
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のまま削除出来なかったのですが、
無事に削除出来て一安心。
しかし、なんで削除出来ない状態になったのか、気になりますね。
この記事が気に入ったらサポートをしてみませんか?