LoginSignup
4
3

Podが「ContainerCreating」のまま起動しない

Posted at

kubernetes環境での作業にも慣れてきたところでぶつかった問題とその解決方法を紹介します。

トラブル発生

Kubernetes環境で、3つのPodから構成されるアプリケーションを使用していた際に、
特定のノードでPodの状態が「ContainerCreating」のまま止まってしまいました。

問題のPodのdescribeを確認してみるとエラーを吐いていました。
以下は、Eventログの抜粋です。

Events:
  Type     Reason                  Age                     From     Message
  ----     ------                  ----                    ----     -------
  Warning  FailedCreatePodSandBox  4m31s                   kubelet  Failed to create pod sandbox: rpc error: code = Unknown desc = failed to set up sandbox container "ba883b271864c900c8a75025d117a57649c427f80ea2bc60fc94bde3435186df" network for pod "feature-extraction-0": networkPlugin cni failed to set up pod "feature-extraction-0_edgeai-msa" network: failed to delegate add: failed to set bridge addr: "cni0" already has an IP address different from 10.244.13.1/24
  Warning  FailedCreatePodSandBox  4m30s                   kubelet  Failed to create pod sandbox: rpc error: code = Unknown desc = failed to set up sandbox container "5fedc4770e80bbf09c11809d9b81cebb0db10165b2e429ff6a5d67203cc47811" network for pod "feature-extraction-0": networkPlugin cni failed to set up pod "feature-extraction-0_edgeai-msa" network: failed to delegate add: failed to set bridge addr: "cni0" already has an IP address different from 10.244.13.1/24

色々と言っていますが、どうやら
"cni0" already has an IP address すでにIPアドレスを持っている」
というエラーが原因のようです。

解決方法

結論から言うと、クラスターを抜けるときの手順が不十分だったようです。
試行錯誤していた中で、クラスターから抜けることがあり、
抜けるノードでは「kubeadm reset」をすれば良いと思っていましたが、
インターフェースも削除する必要があるようです。

インターフェースの削除(インターフェース名は環境によります)

$ sudo rm /etc/cni/net.d -r
$ sudo ip link delete flannel.1
$ sudo ip link delete cni0

削除後に、改めてクラスタにjoinしてみると、無事動きました!

$ kubectl get po -n hoge
NAME                               READY   STATUS               RESTARTS       AGE    IP      NODE       NOMINATED NODE   READINESS GATES
pod/test-1                         0/1     Completed            0              30s    XX      node-1     <none>           <none>
pod/test-2                         1/1     Running              0              30s    XX      node-2     <none>           <none>
pod/test-3                         1/1     Running              0              30s    XX      node-3     <none>           <none>

まとめ

kubeadmでresetをすれば大丈夫でしょ、と過信してしまっていました。
以下にクラスターを抜けるときの手順をまとめたので参考にしてください。

クラスターを抜けるときの手順

  • 特定ノード(node-1)へのスケジュールの停止(マスターノードで実行)
    kubectl cordon node-1
    
  • Podの追い出し(マスターノードで実行)
    kubectl drain node-1 --ignore-daemonsets
    
  • nodeの削除(マスターノードで実行)
    kubectl delete node node-1
    
  • 設定のリセット(抜けるノードで実行)
    sudo kubeadm reset
    
  • インターフェースの削除(抜けるノードで実行)
    sudo rm /etc/cni/net.d -r
    sudo ip link delete flannel.1
    sudo ip link delete cni0
    
4
3
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
4
3