免責事項:これは英文の記事 「Supervisor controlPlane Node NotReady Error "unable to load bootstrap kubeconfig: stat /etc/kubernetes/kubelet.conf: no such file or directory"」の日本語訳です。
記事はベストエフォートで翻訳を進めているため、ローカライズ化コンテンツは最新情報ではない可能性があります。
最新情報は英語版の記事で参照してください。
root@### [ ~ ]# kubectl get nodesNAME STATUS ROLES AGE VERSION<node-1> Ready control-plane,master 571d v1.25.6+vmware.wcp.2<node-2> NotReady control-plane,master 571d v1.25.6+vmware.wcp.2<node-3> Ready control-plane,master 571d v1.25.6+vmware.wcp.2
kubelet[34395]: E0528 hh:mm:ss.ss 34395 server.go:425] "Client rotation is on, will bootstrap in background"kubelet[34395]: E0528 hh:mm:ss.ss 34395 bootstrap.go:265] "Client rotation is on, will bootstrap in background"kubelet[34395]: E0528 hh:mm:ss.ss 34395 run.go:74] "command failed" err="FAILED_TO_RUN_KUBELET: unable to load bootstrap kubeconfig: stat /etc/kubernetes/kubelet.conf: no such file or directory"
/etc/kubernetes/kubelet.conf 内に記載された証明書の有効期限が切れているため、kublet サービスの起動が失敗し、ノードが NotReady となります。
これにより、kubelet が API サーバーに接続できなくなり、コンテナの終了、Pod の停止を引き起こし、3つのノードのうち2つしか稼働しない状態となるため、etcd がクォーラムを喪失します。
スーパーバイザコントロールプレーンノード VM へ SSH 接続します。
以下のコマンドで kubelet 証明書の有効性を確認します。
openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -text -noout
影響を受けるスーパーバイザコントロールプレーンノードの /etc/kubernetes/kubelet.conf を編集します。
/etc/kubernetes/kubelet.conf
を "client-certificate" に、"client-key-data" を "client-key" に変更します
#.....<2重エンコードされた証明書コンテンツ>
#.....<2重エンコードされた証明書コンテンツ>
apiVersion: v1clusters:- cluster:certificate-authority-data: [REDACTED]server: https://xx.xxx.xxx.xxx:6443name: <cluster name>contexts:- context:cluster: <cluster name>user: system:node:<cluster name>-controlplane-xxxxxname: system:node:<cluster name>-controlplane-xxxxx@<cluster name>current-context: system:node:<cluster name>-controlplane-xxxxx@<cluster name>kind: Configpreferences: {}users:- name: system:node:<cluster name>-controlplane-xxxxxuser:client-certificate: /var/lib/kubelet/pki/kubelet-client-current.pemclient-key: /var/lib/kubelet/pki/kubelet-client-current.pem
systemctl restart kubelet.service
systemctl status kubelet.service
kubectl get pods -A -o wide または crictl ps -a
kubectl get nodes -o wide