kubeadm join 使用 token 過期之后(24小時過期),重新生成token
一、重啟生成新token
# 創建新token kubeadm token create # 查看是否存在有效的 token 值 kubeadm token list
二、獲取CA證書 sha256 編碼 hash 值
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
三、新節點加入集群
kubeadm join 192.168.0.211:6443 --token ai3o14.d555o4992nyl3zgd --discovery-token-ca-cert-hash sha256:e4435c11751a06472a4971a2a5811a2e6b7f2ce0689e78201a58082fc3dfc3c7
### token使用上面新生成的token
四、快捷方式、一步到位(可以直接在master節點使用步驟四)
[root@k8s-master package]# kubeadm token create --print-join-command W0701 13:21:47.900325 85831 configset.go:348] WARNING: kubeadm cannot validate component configs for API groups [kubelet.config.k8s.io kubeproxy.config.k8s.io] kubeadm join 192.168.130.136:6443 --token gs9y86.lhmu23t9kqfax09z --discovery-token-ca-cert-hash sha256:87408a5d81bd21c845d94630f4ff8fc9a2e206e9f88396d2d2966cec083d7f20
五、新節點加入到集群
在新加入節點執行如下命令:
kubeadm join 192.168.130.136:6443 --token gs9y86.lhmu23t9kqfax09z --discovery-token-ca-cert-hash sha256:87408a5d81bd21c845d94630f4ff8fc9a2e206e9f88396d2d2966cec083d7f20
如果環境沒有問題執行完此條命令就能成功加入到集群。
遇到問題:
由於master節點到新節點的TCP 22端口不通,並且新節點不能連外網所以納入過程中遇到了很多問題。
1、首先解決兩個Waring。
1)、修改docker driver(這個可以不調整)
解決方法:
調整docker配置文件,添加以下內容
"exec-opts": ["native.cgroupdriver=systemd"]
2)、由於master節點到新節點的TCP 22端口不通,許多文件需要手扶。
vim /etc/systemd/system/kubelet.service
[Unit] Description=kubelet: The Kubernetes Node Agent Documentation=http://kubernetes.io/docs/ [Service] ExecStart=/usr/local/bin/kubelet Restart=always StartLimitInterval=0 RestartSec=10 [Install] WantedBy=multi-user.targetx
2、修改完上面2個Warning后就能成功啟動kubelet后台服務了,查看kubelet日志看到報如下錯誤
解決方案:
1)、同樣需要手扶文件,將master節點/opt/cni/bin目錄下的所有文件拷貝到新節點的/opt/cni/bin目錄下
2)、vim /etc/cni/net.d/10-flannel.conflist
{ "name": "cbr0", "cniVersion": "0.3.1", "plugins": [ { "type": "flannel", "delegate": { "hairpinMode": true, "isDefaultGateway": true } }, { "type": "portmap", "capabilities": { "portMappings": true } } ] }
3)、另外生成manifests目錄,此目錄下沒有文件,mkdir /etc/kubernetes/manifests/ 即可。
3、如果過程中還有[kubelet-check] The HTTP call equal to 'curl -sSL http://localhost:10248/healthz' failed with error: Get http://localhost:10248/healthz: dial tcp [::1]:10248: connect: connection refused.這個錯誤,調整kubelet配置文件,加入如下配置即可。
root@test2 ~]# vim /etc/systemd/system/kubelet.service.d/10-kubeadm.conf ... Environment="KUBELET_SYSTEM_PODS_ARGS=--pod-manifest-path=/etc/kubernetes/manifests --allow-privileged=true --fail-swap-on=false" [root@test2 ~]# systemctl daemon-reload [root@test2 ~]# systemctl restart kubelet