手当たり次第に書くんだ

飽きっぽいのは本能

Kubernetes コントロールプレーンノードを追加できない場合

Kubernetes でコントロールプレーンノード(マスターノード)を追加する場合、以下のように実行します。このコマンドで使用する token などの情報は、kubeadm で最初のマスターノードを構築した時点で含まれています。

sudo kubeadm join 10.0.1.180:6443 --token <token> \
--discovery-token-ca-cert-hash <discovery-token-ca-cert-hash> \
--control-plane --certificate-key <certificate-key>

しかし、何らかの理由で追加できない場合があります。以下は私の環境での例です。このエラーログから判断すると、kubeadm join コマンドが失敗した理由は、kubeadm-certsというシークレットがクラスターのkube-systemネームスペースに存在しないためです。このシークレットが存在しないか、期限切れになった可能性があります。

[preflight] Running pre-flight checks
[preflight] Reading configuration from the cluster...
[preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'
[preflight] Running pre-flight checks before initializing the new control plane instance
[preflight] Pulling images required for setting up a Kubernetes cluster
[preflight] This might take a minute or two, depending on the speed of your internet connection
[preflight] You can also perform this action in beforehand using 'kubeadm config images pull'
W0823 05:11:09.565428    3204 checks.go:844] detected that the sandbox image "registry.k8s.io/pause:3.8" of the container runtime is inconsistent with that used by kubeadm.It is recommended to use "registry.k8s.io/pause:3.9" as the CRI sandbox image.
[download-certs] Downloading the certificates in Secret "kubeadm-certs" in the "kube-system" Namespace
error execution phase control-plane-prepare/download-certs: error downloading certs: error downloading the secret: Secret "kubeadm-certs" was not found in the "kube-system" Namespace. This Secret might have expired. Please, run kubeadm init phase upload-certs --upload-certs on a control plane to generate a new one
To see the stack trace of this error execute with --v=5 or higher

私の環境では、以下の方法で解決しました。

まず、既存のコントロールプレーンノードで以下のコマンドを実行し、証明書を再度アップロードします。これにより、新しい kubeadm-certs シークレットが生成されます。一見、既存のクラスターに影響がある?と思いましたが、それは問題ありません。このコマンドで新しい certificate-key が作成されます。

sudo kubeadm init phase upload-certs --upload-certs

次に、以下のコマンドで新しい kubeadm join コマンドを作成します。

sudo kubeadm token create --print-join-command --certificate-key <certificate-key>

出力されたコマンドをを新しいコントロールプレーンノードで実行することで、問題なくクラスターに追加できました。

Kubernetes コントロールプレーンノードを追加できない場合

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る