Opensourcetechブログ

OpensourcetechによるNGINX/Kubernetes/Zabbix/Neo4j/Linuxなどオープンソース技術に関するブログです。

"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のまま削除出来なかったのですが、
無事に削除出来て一安心。

しかし、なんで削除出来ない状態になったのか、気になりますね。

Opensourcetech by Takahiro Kujirai