1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

KubernetesのPodがTerminatingのままで消えない

Last updated at Posted at 2023-04-03

KubernetesのPodがTerminatingの状態でハングしていてPodが消えない場合にどうやってトラブルシューティングするかまとめてみました。

PodがTerminatingのままになっている

状況として、Deploymentなどをアップデートやリスタートしたときに一部のPodが以下のようにTerminatingの状態で止まりPodが削除されないことがあります。

NAME           READY   STATUS        RESTARTS   AGE     IP            NODE        NOMINATED NODE   READINESS GATES
my-pod-2       1/1     Running       0          15h8m   10.100.2.4    myk8snode2  <none>           <none>
my-pod-3       1/1     Running       0          15h9m   10.100.6.0    myk8snode3  <none>           <none>
my-pod-kep-0   0/1     Terminating   0          1h      10.100.2.8    myk8snode1  <none>           <none>
my-pod-kep-1   1/1     Running       0          6h4m    10.100.5.13   myk8snode2  <none>           <none>

ファイナライザー(Finalizers)の確認

ファイナライザーをリソースで使用している場合は、それが理由で削除ができないのか確認する必要があります。ファイナライザーは理由があって使用されているはずなので、Podを削除するためだけにファイナライザーをなくすのは解決法とは言えないと思われます。

強制削除

ベストの方法ではありませんが、とりあえずPodの削除を進めてデプロイなどを継続したり、サービスの継続をするために一時的な解決方法として強制削除もできます。

kubectl -n <NAMESPACE> delete pod  <PODNAME> --grace-period=0 --force 

kubeletからの確認を待たずに強制的に削除するので、Podのプロセスが完全になくならなかったりほかのリソースとの競合などが起こりえます。一時的には有効ですが、これを常に行っている場合は原因を追究する必要があります。

kubeletログの確認

kubeletのログを見ることによって原因を見つけられるかもしれません。

apiVersion: v1
kind: Pod
metadata:
  name: nsenter
  namespace: nsenter
spec:
  hostPID: true
  hostNetwork: true
  hostIPC: true
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: kubernetes.io/hostname
            operator: In
            values:
            - myk8snode1
  containers:
    - name: nsenter
      image: ubuntu
      command: ['tail', '-f', '/dev/null']
      securityContext:
        privileged: true

管理者権限などが付いたPodです。nodeAffinityでログを確認する必要があるノードを指定してデプロイします。
トラブルシューティング以外の時は使わないほうがいいと思います。

デプロイしたPodにexecします。

kubectl -n nsenter exec -it nsenter -- nsenter --target 1 --mount --uts --ipc --net /bin/bash

これで、Podnsenterからmyk8snode1内のログを見ることができます。

journalctl -u kubelet 

とするとkubeletのログを確認し、原因を探ることができるかもしれません。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?