如何在主服务器上找到kubeadm的join命令?

时间:2018-07-01 19:02:31

标签: kubernetes kubeadm

我之前运行kubeadm init时,我已经失去了原始的'kubeadm join'命令。

如何再次获取该值?

5 个答案:

答案 0 :(得分:12)

kubeadm token create --print-join-command

答案 1 :(得分:9)

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

打印工作节点/从节点的加入命令,
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>

完成。

答案 2 :(得分:1)

以@Abhishek Jain的答案为基础,这是一个脚本,可在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"

答案 3 :(得分:0)

要创建板条联接命令,请运行以下命令- 第1步:

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令牌列表,这将为您提供令牌,因此请在令牌下复制令牌值,其描述为“'kubeadm init'生成的默认引导令牌。”

步骤3: 现在,使用以下语法在不创建新令牌的情况下创建JOIN命令

kubeadm join --token(步骤2中的令牌副本)--discovery-token-ca-cert-hash sh2256:(复制与步骤1中的副本相同的值< / strong>)

kubeadm令牌创建”命令将创建没有任何描述的新令牌,因此,您可以选择具有DESCRIPTION为“ kubeadm init”的令牌,而不创建任何其他令牌。...

答案 4 :(得分:0)

如果要加入控制平面节点,那么在命令中也将需要证书密钥:

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就足够了