kubeadmでクラスタ構築するとworkerノード追加のためのコマンドが表示されて簡単にノード追加できるが、使用するtokenの期限が(デフォルトでは24時間で)切れてしまうため、同じ引数でkubeadm join
してもこの通り、失敗する。
[zaki@k8s-worker03 ~]$ sudo kubeadm join 192.168.0.121:6443 --token 0di1qt.ju1y8vkmfhpxmytl \ --discovery-token-ca-cert-hash sha256:73df38227ad8bd6332ae0abf6d20ccdaa1c0cf8b254e24e15f10187b1ea1acdb W0405 09:04:09.959285 2158 join.go:346] [preflight] WARNING: JoinControlPane.controlPlane settings will be ignored when control-plane flag is not set. [preflight] Running pre-flight checks [WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd". Please follow the guide at https://kubernetes.io/docs/setup/cri/ error execution phase preflight: couldn't validate the identity of the API Server: could not find a JWS signature in the cluster-info ConfigMap for token ID "0di1qt" To see the stack trace of this error execute with --v=5 or higher
この場合、トークンを作り直せばOK
kubeadm token
トークンのリスト表示
期限内のトークンがあればlist
サブコマンドでこの通り。
以下の出力であれば、あと17時間有効。
[zaki@k8s-master01 ~]$ kubeadm token list TOKEN TTL EXPIRES USAGES DESCRIPTION EXTRA GROUPS 0di1qt.ju1y8vkmfhpxmytl 17h 2020-04-04T00:27:22+09:00 authentication,signing The default bootstrap token generated by 'kubeadm init'. system:bootstrappers:kubeadm:default-node-token
トークンが失効すると何も出力されなくなる。
[zaki@k8s-master01 ~]$ kubeadm token list [zaki@k8s-master01 ~]$
戻り値は0なのでエラー扱いではない。
[zaki@k8s-master01 ~]$ kubeadm token list [zaki@k8s-master01 ~]$ echo $? 0
トークンを作成
kubeadm token create
でトークンを新しく作成できる。
--print-join-command
も付与すれば、kubeadm join
するためのコマンドラインも表示される。
[zaki@k8s-master01 ~]$ kubeadm token create --print-join-command W0405 10:15:01.686014 109747 configset.go:202] WARNING: kubeadm cannot validate component configs for API groups [kubelet.config.k8s.io kubeproxy.config.k8s.io] kubeadm join 192.168.0.121:6443 --token hne2j7.8wjffv8ph2d2u10d --discovery-token-ca-cert-hash sha256:73df38227ad8bd6332ae0abf6d20ccdaa1c0cf8b254e24e15f10187b1ea1acdb
トークンリストもこの通り。
[zaki@k8s-master01 ~]$ kubeadm token list TOKEN TTL EXPIRES USAGES DESCRIPTION EXTRA GROUPS hne2j7.8wjffv8ph2d2u10d 23h 2020-04-06T10:15:01+09:00 authentication,signing <none> system:bootstrappers:kubeadm:default-node-token [zaki@k8s-master01 ~]$
これでトークンが作成され、kubeadm join
するためのパラメタが用意できた。
トークンはあるが--discovery-token-ca-cert-hashの値が分からない場合
次のコマンドを実行する。
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | \ openssl dgst -sha256 -hex | sed 's/^.* //'
実行例
[zaki@k8s-master01 ~]$ openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | \ > openssl dgst -sha256 -hex | sed 's/^.* //' 73df38227ad8bd6332ae0abf6d20ccdaa1c0cf8b254e24e15f10187b1ea1acdb
この出力にsha256:
を頭につければOK
新しいworkerノードをクラスタに追加
↑で表示されたkubeadm join
を新しくセットアップしたworkerノードで実行する。
master/worker共通のところ参照
[zaki@k8s-worker03 ~]$ sudo kubeadm join 192.168.0.121:6443 --token hne2j7.8wjffv8ph2d2u10d --discovery-token-ca-cert-hash sha256:73df38227ad8bd6332ae0abf6d20ccdaa1c0cf8b254e24e15f10187b1ea1acdb W0405 10:18:41.144431 5511 join.go:346] [preflight] WARNING: JoinControlPane.controlPlane settings will be ignored when control-plane flag is not set. [preflight] Running pre-flight checks [WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd". Please follow the guide at https://kubernetes.io/docs/setup/cri/ [preflight] Reading configuration from the cluster... [preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -oyaml' [kubelet-start] Downloading configuration for the kubelet from the "kubelet-config-1.18" ConfigMap in the kube-system namespace [kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml" [kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env" [kubelet-start] Starting the kubelet [kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap... This node has joined the cluster: * Certificate signing request was sent to apiserver and a response was received.* The Kubelet was informed of the new secure connection details. Run 'kubectl get nodes' on the control-plane to see this node join the cluster. [zaki@k8s-worker03 ~]$
しばらく待てば(kube-proxy
やCNIのpodが追加したノードでも動き始めて)Ready状態になる
[zaki@k8s-master01 ~]$ kubectl get node NAME STATUS ROLES AGE VERSION k8s-master01.esxi.jp-z.jp Ready master 2d9h v1.18.0 k8s-worker01.esxi.jp-z.jp Ready <none> 2d9h v1.18.0 k8s-worker02.esxi.jp-z.jp Ready <none> 2d9h v1.18.0 k8s-worker03.esxi.jp-z.jp Ready <none> 50s v1.18.0
k8s-worker03ノードが追加されました。
W0405 10:15:01.686014 109747 configset.go:202] WARNING: kubeadm cannot validate component configs for API groups [kubelet.config.k8s.io kubeproxy.config.k8s.io]
この警告は無視してもいいんやろか…
通常の構築はこちら