kube1.20.2如何修改control-palne,master节点的名字

问题描述

我成功地在我的虚拟机中设置了一个控制平面主节点。然后我复制了vm,试图将复制的vm加入到现有的kubernete集群中。

问题是原来的vm(node)的名字是new-master-1,复制的节点名字是一样的。即使在我 vi /etc/hostname 并将复制的 vm 的名称更改为 new-master-2 之后,在复制的 vm 中运行 kubectl get nodes 后,输出名称仍然是 new-master-1:

root@new-master-2:/home/hzg# kubectl get nodes
NAME           STATUS   ROLES                  AGE   VERSION
new-master-1   Ready    control-plane,master   32h   v1.20.2

我想我只能在看到名称更改为 new-master-2 后才能将复制的 vm 作为另一个主节点加入集群,对吗?如何更改节点的名称

解决方法

TL;DR:

运行:kubeadm join - 根据 kubeadm token create 的输出调整此命令,并根据需要添加 --control-plane--node-name 等标志。在继续之前查看 kubeadm join


kubelet 以特定名称注册节点。通常你可以Reconfigure a Node's Kubelet in a Live Cluster。但是在更改节点名称时它不适用。如果你尝试使用 kubectl edit node,你会得到一个错误:

error: At least one of apiVersion,kind and name was changed

不过还是有办法的。您需要更改主机名,然后移除节点、重置并重新加入。

这是步骤。在需要更改名称的节点上:

  • 更改主机名。

  • 运行:kubectl delete node <nodename>(注意你仍然必须使用旧的节点名称)

  • 运行:kubeadm reset(如果需要,作为 root

现在,在原来的主节点上:

  • 运行:export KUBECONFIG=/path/to/admin.conf

  • 运行:kubeadm token create --print-join-command

回到重命名的节点:

  • 运行:kubeadm join - 根据 kubeadm token create 的输出调整此命令,并根据需要添加 --control-plane--node-name 等标志。在继续之前,请查看 kubeadm join

您可以查看 this source 的教程视频。


示例:

kube-master:~$ kubectl get nodes
NAME          STATUS   
kube-master   Ready    
kube-node-1   Ready    
kube-node-2   Ready 



kube-master:~$ kubectl delete node kube-node-2
node "kube-node-2" deleted



kube-node-2:~$ sudo kubeadm reset
[reset] WARNING: Changes made to this host by 'kubeadm init' or 'kubeadm join' will be reverted.
[reset] Are you sure you want to proceed? [y/N]: y



kube-node-2:~$ sudo kubeadm join --node-name kube-node-22 <rest-of-the-join-command>

This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.
Run 'kubectl get nodes' on the control-plane to see this node join the cluster.



kube-master:~$ kubectl get nodes
NAME           STATUS   
kube-master    Ready    
kube-node-1    Ready    
kube-node-22   Ready 

结果:kube-node-2 的名称已成功更改为 kube-node-22