スーパーバイザコントロールプレーンノードが、"unable to load bootstrap kubeconfig: stat /etc/kubernetes/kubelet.conf: no such file or directory" エラーで NotReady 状態になる
search cancel

スーパーバイザコントロールプレーンノードが、"unable to load bootstrap kubeconfig: stat /etc/kubernetes/kubelet.conf: no such file or directory" エラーで NotReady 状態になる

book

Article ID: 428304

calendar_today

Updated On:

Products

VMware vSphere Kubernetes Service

Issue/Introduction

免責事項:これは英文の記事 「Supervisor controlPlane Node NotReady Error "unable to load bootstrap kubeconfig: stat /etc/kubernetes/kubelet.conf: no such file or directory"」の日本語訳です。
記事はベストエフォートで翻訳を進めているため、ローカライズ化コンテンツは最新情報ではない可能性があります。
最新情報は英語版の記事で参照してください。


  • 3つのスーパーバイザコントロールプレーンノードのうち1つは、 NotReady 状態となり、etcd クォーラムを失います。
    影響を受けるノード上のコンテナは exited 状態であり、いくつかのポッドは terminating 状態です。
  • vCenter UI のスーパーバイザ タブからのエラー
    Cluster test is unhealthy:
    Get "http://localhost:1080/external-cert/<supervior clone plane ip>/6443/version?timeout=2m0s": context deadline exceeded (Client.Timeout exceeded while awaiting headers)
  • kubectl get nodes の結果は以下のとおりです。
    root@### [ ~ ]# kubectl get nodes
    NAME     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
  • スーパーバイザコントロールプレーンノードに SSH 接続し、 "journalctl -xeu kubelet"コマンドで kubelet ログを確認します。
    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"

Environment

  • VMware vSphere Kubernetes Service
  • vSphere with Tanzu 8.x 

Cause

/etc/kubernetes/kubelet.conf 内に記載された証明書の有効期限が切れているため、kublet サービスの起動が失敗し、ノードが NotReady となります。
これにより、kubelet が API サーバーに接続できなくなり、コンテナの終了、Pod の停止を引き起こし、3つのノードのうち2つしか稼働しない状態となるため、etcd がクォーラムを喪失します。

Resolution

  1. スーパーバイザコントロールプレーンノード VM へ SSH 接続します。

  2. 以下のコマンドで kubelet 証明書の有効性を確認します。

    openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -text -noout
  3. 影響を受けるスーパーバイザコントロールプレーンノードの /etc/kubernetes/kubelet.conf を編集します。

    • vi   /etc/kubernetes/kubelet.conf
    • "client-certificate-data" を "client-certificate" に、"client-key-data" を "client-key" に変更します
    • client-certificate および client-key が、二重エンコードされた形式の証明書コンテンツではなく、/var/lib/kubelet/pki/kubelet-client-current.pem にある有効な証明書パスを指し示すようにします。
    • 変更前:
      • client-certificate-data: #.....<2重エンコードされた証明書コンテンツ>
      • client-key-data: #.....<2重エンコードされた証明書コンテンツ>
    • 変更後:
      apiVersion: v1
      clusters:
      - cluster:
          certificate-authority-data: [REDACTED]
          server: https://xx.xxx.xxx.xxx:6443
        name: <cluster name>
      contexts:
      - context:
          cluster: <cluster name>
          user: system:node:<cluster name>-controlplane-xxxxx
        name: system:node:<cluster name>-controlplane-xxxxx@<cluster name>
      current-context: system:node:<cluster name>-controlplane-xxxxx@<cluster name>
      kind: Config
      preferences: {}
      users:
      - name: system:node:<cluster name>-controlplane-xxxxx
        user:
          client-certificate: /var/lib/kubelet/pki/kubelet-client-current.pem
          client-key: /var/lib/kubelet/pki/kubelet-client-current.pem
  4. kubelet サービスを再起動します
    systemctl restart kubelet.service
  5. kubelet サービスが起動したことを確認します
    systemctl status kubelet.service
  6. コンテナと Pod が Running 状態に復旧したことを確認します。
    kubectl get pods -A -o wide または crictl ps -a
  7. すべてのノードがReady状態になったことを確認します。
    kubectl get nodes -o wide