如何在 master 上找到 kubeadm 的加入命令?

How do I find the join command for kubeadm on the master?

我以前 运行 kubeadm init 时丢失了原来的 'kubeadm join' 命令。

我怎样才能再次检索这个值?

kubeadm token create --print-join-command

要创建 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/^.* //'

此命令将为您提供 public 密钥。

第 2 步 - 检索 bootstrap 个令牌:

kubeadm token list

这将打印所有令牌,因此复制 TOKEN 下的令牌值,并附上说明“kubeadm init 生成的默认 bootstrap 令牌”。“=20=]

步骤 3 - 创建 kubeadm init 命令:

现在使用以下语法创建 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 的令牌,如 步骤 2.

基于@Abhishek Jain 的回答,这里有一个脚本,在 jq:

的帮助下打印 kubeadm join 命令
# 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 命令将根据文档 here

按需生成新的证书密钥

要加入工作节点,接受的答案中给出的命令kubeadm token create --print-join-command就足够了

这可能不适用于旧的 Kubernetes 版本,但我尝试了新版本并且对我有用。

要打印 worker/slave 节点的加入命令,
kubeadm token create --print-join-command

但是如果您需要加入一个新的控制平面节点,那将不起作用,因为您需要为控制平面加入命令重新创建一个新密钥。这可以通过三个简单的步骤完成。

01.) 在已经工作的主节点中重新上传证书
sudo kubeadm init phase upload-certs --upload-certs
它将生成一个新的证书密钥。

02.) 在已经工作的主节点中打印加入命令
kubeadm token create --print-join-command

03.) 添加 --control-plane --certificate-key 并执行。
<join command from step 02> --control-plane --certificate-key <key from step 01>

完成。

运行 在您的主节点机器上执行以下命令。

kubeadm token create --print-join-command

此命令将生成新令牌以及您可以在您的工作节点上使用以加入集群的加入命令。