概要
Kubernetes内のflannelがネットワークインターフェースを作成できなくなったので、解決手段のメモを残す
原因を調べる
対象のノードにsshでログインして、ip a
コマンドを実行して、flannel.1
がないのでflannelが悪さしているとあたりをつけた。
失敗した方法について
flannelのPodを削除して再起動
以下のコマンドで対象のノードで動いているflannelのpodを調べてdelete
コマンドでそのpodを削除する。
kubectl -n kube-flannel get pod -o wide
上記を実行してもネットワークインターフェースが作成されない
成功した方法
以下のコマンドで、k8sクラスタから切り離す
sudo kubeadm reset
切り離し後、cniフォルダを削除
sudo rm -fr /var/lib/cni
sudo rm -fr /etc/cni/net.d
上記のあと、control-planeから登録を削除する
以下のコマンドで、kubeadm
でjoin
するためのコマンドを作成する
echo sudo kubeadm join $(hostname -I|awk '{print $1}'):6443 --token $(kubeadm token list |sed -n 2P|awk '{print $1}') --discovery-token-ca-cert-hash sha256:$(openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //')
作成した、コマンドでk8sクラスタに再接続することでflannel.1
のネットワークインターフェースが作成したので、対象のnodeを再起動すると、cni0も作成されることを確認したので一応復旧ができた。