在以前运行 kubeadm init时,我丢失了最初的“ kubeadm join”命令。
kubeadm init
如何再次检索此值?
kubeadm token create --print-join-command
要创建 kubeadm join命令,请运行以下命令:
kubeadm join
步骤1-检索令牌 CA 散列:
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt \ | openssl rsa -pubin -outform der 2>/dev/null \ | openssl dgst -sha256 -hex \ | sed 's/^.* //'
此命令将为您提供公钥。
步骤2-检索引导标记:
kubeadm token list
这将打印所有令牌,因此复制 TOKEN下的令牌值,并说明“由 kubeadm init生成的默认引导令牌”
TOKEN
步骤3-创建 kubeadm init命令:
现在使用以下语法创建 join命令而不创建新标记:
join
kubeadm join <ip-address>:6443\ --token=<token-from-step-2> \ --discovery-token-ca-cert-hash sha256:<ca-hash-from-step-1>
kubeadm token create命令创建一个新的令牌,在这种情况下没有任何描述,所以为了不创建任何其他令牌,只需选择具有 第二步中提到的 DESCRIPTION的令牌。
kubeadm token create
DESCRIPTION
基于@Abhishek Jain 的回答,这里有一个脚本,可以在 jq的帮助下打印 kubeadm join命令:
jq
# get the join command from the kube master 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/^.* //') TOKEN=$(kubeadm token list -o json | jq -r '.token' | head -1) IP=$(kubectl get nodes -lnode-role.kubernetes.io/master -o json \ | jq -r '.items[0].status.addresses[] | select(.type=="InternalIP") | .address') PORT=6443 echo "sudo kubeadm join $IP:$PORT \ --token=$TOKEN --discovery-token-ca-cert-hash sha256:$CERT_HASH"
如果要连接控制平面节点,那么在命令中也需要一个证书密钥:
kubeadm token create \ --print-join-command \ --certificate-key \ $(kubeadm alpha certs certificate-key)
根据文档 给你,kubeadm alpha certs certificate-key命令将根据需要生成一个新的证书密钥
kubeadm alpha certs certificate-key
要加入工作节点,在接受的答案中给出的命令 kubeadm token create --print-join-command就足够了
为 新工作者节点使用打印 join命令:
但是,如果需要加入 新的控制平面节点,则需要为控制平面 join命令重新创建一个新键。这可以通过三个简单的步骤来实现:
使用 kubeadm init phase upload-certs --upload-certs在已经工作的主节点中重新上载证书。这将生成一个新的证书密钥。
kubeadm init phase upload-certs --upload-certs
使用 kubeadm token create --print-join-command在已经工作的主节点中打印 join命令。
用 $JOIN_COMMAND_FROM_STEP2 --control-plane --certificate-key $KEY_FROM_STEP1连接一个新的控制平面节点。
$JOIN_COMMAND_FROM_STEP2 --control-plane --certificate-key $KEY_FROM_STEP1
这可能不适用于旧的库伯内特版本,但我尝试与新的版本,它为我工作。
在主节点计算机上运行以下命令。
此命令将生成新的令牌以及 join 命令,您可以在工作节点上使用该命令来加入集群。
下面是一个自动执行此任务的 bash 脚本
read -p 'master ip address : ' ipaddr sha_token = "$(openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //')" token = "$(kubeadm token list | awk '{print $1}' | sed -n '2 p')" echo "kubeadm join $ipaddr:6443 --token=$token --discovery-token-ca-cert-hash sha256:$sha_token"