当我们启动主素数节点时,该节点使用ttl为辅助节点和主节点创建令牌。
根据文档kubeadm令牌(我也测试过,它有效(,我们可以发出命令并获得新的令牌(默认为ttl 24小时(:
kubeadm token create --print-join-command
我正试图弄清楚,如果我想添加一个新的平面节点(辅助主节点(,我如何创建一个相关的令牌?
我试着传递一些标志,例如:
kubeadm token create --print-join-command --control-plane
但是它失败了(当然(,因为这个标志没有被识别。
我还通过文档发现,我们可以直接链接到配置文件,例如ref kubeadm join/file或基于https的发现:
kubeadm join --discovery-file path/to/file.conf # (local file)
kubeadm join --discovery-file https://url/file.conf # (remote HTTPS URL)
在我的情况下,我没有本地conf文件,也没有计划使用url链接。
是否有其他方法可以使用平面节点而非工作节点的命令创建新令牌?
您需要在主上运行
kubeadm init phase upload-certs --upload-certs
记住输出。
然后你需要在主上运行
kubeadm token create --print-join-command
然后根据该输出编写用于加入主节点的加入命令,并将--control-plane --certificate-key xxxx
添加到其中
请参阅此视频并举例说明:https://www.youtube.com/watch?v=27v36t-3afQ最有趣的是从20:40开始。由于版本较旧,视频中出现了一些"实验性"词语。
下面将为您的其他控制器创建join命令。
echo $(kubeadm token create --print-join-command) --control-plane --certificate-key $(kubeadm init phase upload-certs --upload-certs | grep -vw -e certificate -e Namespace)
根据用户的评论,当有人运行以下命令时:
kubeadm token create --print-join-command
应该填充两个字符串示例:
kubeadm join loadBalancerIP:6443 --token xxxx --discovery-token-ca-cert-hash sha256:xxxx
kubeadm join loadBalancerIP:6443 --token xxxx --discovery-token-ca-cert-hash sha256:xxxx --control-plane --certificate-key xxxx
不幸的是,在我的情况下,它没有。可能是因为我使用的是来自kubeadm的自签名证书,也可能是因为部署在裸机节点上。
尽管如此,我还是设法用不同的方法解决了我的问题。
根据官方文件第一个控制平面节点的步骤:
";您还可以在初始化期间指定一个自定义的证书密钥,该密钥稍后可以由联接使用。要生成这样的密钥,可以使用以下命令:
kubeadm alpha certs certificate-key
一旦用户在缩进的主主节点(尚未启动的节点(上运行命令,它应该会看到这样的内容:
# kubeadm alpha certs certificate-key
xxxx
然后,正如文件所说:
";注意:kubeadm init标志--config和--certificate-key不能混合使用,因此,如果要使用kubeadm配置,则必须在相应的配置位置(在InitConfiguration和JoinConfiguration:controlPlane下(添加certificateKey字段">
在我的例子中,我使用了一个conf文件,所以我将内容添加到我的文件中:
apiVersion: kubeadm.k8s.io/v1beta2
kind: InitConfiguration
certificateKey: xxxx
localAPIEndpoint:
advertiseAddress:
bindPort: 6443
---
apiServer:
timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
---
etc etc
一旦用户有了这个密钥并用这个密钥启动主节点(如上所示(,下一步就是对辅助主节点使用完全相同的证书密钥,例如:
kubeadm join loadBalancerIP:6443 --token xxxx --discovery-token-ca-cert-hash sha256:xxxx --control-plane --certificate-key xxxx
注意:建议使用脚本生成此数据,以便在销毁/创建主节点时使用新的证书密钥。
希望这对其他人的未来有所帮助,不要像我那样花那么多钱。
命令kubeadm token create
没有任何标志--control-plane
从文档
运行命令kubeadm token create --print-join-command
时,输出中会有两个命令,并使用带有--control-plane
标志的命令来加入控制平面节点。
我相信没有单独的令牌可以添加更多的控制平面,您只需要在添加的同时添加--control-plane
。
获取加入命令kubeadm token create --print-join-command
假设证书已经上传并设置到位。更多详细信息可以在这里找到。https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/high-availability/
编辑:很抱歉延迟更新kubeadm alpha certs certificate-key
可用于创建密钥
然后使用kubeadm init phase upload-certs --upload-certs --certificate-key=<above key>
上传
并使用它创建加入命令kubeadm token create --print-join-command --certificate-key <key created above>
对于其他控制平面,您可以将--control-plane
传递到上面的join命令,而忽略工作节点的此标志
我想您需要下面的命令。
显示命令:
echo "$(kubeadm token create --print-join-command) --control-plane"
kubeadm join 192.168.5.50:8443 --token b99yno.3ju18t22w80ishlz --discovery-token-ca-cert-hash sha256:8f16b6d5304f070de0d32a6663ffaa30ac58163f9cfd38be4af405ac78c93b73 --control-plane
运行命令:
echo "$(kubeadm token create --print-join-command) --control-plane"|sh