【发布时间】:2018-12-10 02:10:44
【问题描述】:
当我之前运行 kubeadm init 时,我丢失了原始的“kubeadm join”命令。
如何再次检索此值?
【问题讨论】:
标签: kubernetes kubeadm
当我之前运行 kubeadm init 时,我丢失了原始的“kubeadm join”命令。
如何再次检索此值?
【问题讨论】:
标签: kubernetes kubeadm
kubeadm token create --print-join-command
【讨论】:
2> /dev/null。
这可能不适用于旧 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>
完成。
【讨论】:
要创建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 生成的默认引导令牌。”
第 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就足够了
【讨论】:
在您的主节点机器上运行以下命令。
kubeadm token create --print-join-command
此命令将生成新令牌以及您可以在工作节点上使用的加入命令来加入集群。
【讨论】: