因此,我知道如何向现有的Kubernetes 1.14集群(使用kubeadm
设置)中添加一个工作节点:kubeadm token create --print-join-command
将打印有效的kubeadm join
命令,其中包含正确的值自变量--token
和--discovery-token-ca-cert-hash
。
我目前了解到,要将另一个节点添加到控制平面(主节点)kubeadm join
,需要附加参数--experimental-control-plane
(无值)和--certificate-key
。这是用于堆叠的控制平面和etcd节点。
如何(在哪个文件中)为现有群集获取--certificate-key
的正确值?
更新我的第一个(也是当前唯一的)主节点是在不带参数--experimental-upload-certs
到kubeadm init
的情况下创建的(但是由kubeadm init --pod-network-cidr=10.244.0.0/16
代替)。因此,manual certificate distribution应该适用,并且可能的步骤顺序可能是:
/etc/kubernetes/pki/{ca.*,sa.*,front-proxy-sa.*,etcd/ca.*}
复制到新的主节点kubeadm token create --print-join-command
kubeadm join
的打印--experimental-control-plane
命令这是正确的程序吗?
答案 0 :(得分:2)
我在1.17中为此苦苦挣扎,最终发现此命令将提供可以在SameSite
和kubeadmn init
中都可以使用的证书密钥。为了使其正常工作,您需要通过kubeadmn join
以及在运行--upload-certs
时与您在1.14中注意到的类似。
kubeadmn init
# generate a certificate-key to be used
kubeadm alpha certs certificate-key
# initialize first master using above key, --upload-certs (and other parameters)
kubeadm init --control-plane-endpoint $API_SERVER:6443 --upload-certs --apiserver-cert-extra-sans $API_SERVER --certificate-key $CERT-KEY
答案 1 :(得分:2)
给出的答案的替代方法是使用kubeadm
来管理证书,方法是将证书作为秘密上载到kube-system
(它将在2小时后失效)。在初始化阶段无需通过证书密钥
所以你可以做
kubeadm init --control-plane-endpoint "LOAD_BALANCER_DNS:LOAD_BALANCER_PORT"
然后在以后的时间
kubeadm init phase upload-certs --upload-certs
该命令将输出可用于创建的秘密的证书密钥
kubeadm join LOAD_BALANCER_DNS:LOAD_BALANCER_PORT --token <token> \
--discovery-token-ca-cert-hash <hash> \
--control-plane \
--certificate-key <key from previous commmand>
答案 2 :(得分:1)
根据documentation,此命令提供了一个新的解密密钥:
kubeadm init phase upload-certs --experimental-upload-certs