我成功地在vm中设置了一个控制平面主节点。然后我复制了虚拟机,试图将复制的虚拟机加入到现有的kubernete集群。
问题是原vm(node)的名称为new-master-1,复制的节点名称相同。即使执行Ivi /etc/hostname
并将复制的虚拟机的名称更改为new-master-2,在复制的虚拟机中运行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;
运行:kubeadm join
-根据kubeadm token create
的输出调整此命令,并根据需要添加--control-plane
和--node-name
等标志。在继续之前,先看一下kubeadm连接。
kubelet
以特定名称注册节点。通常,您可以在Live Cluster中重新配置Node的Kubelet。但它不适用于更改Node的名称。如果您尝试使用kubectl edit node
,您将得到一个错误:
error: At least one of apiVersion, kind and name was changed
有一个方法。您需要更改主机名,然后删除节点,重置并重新加入它。
步骤如下。在需要更改其名称的节点上:
修改主机名
运行:
kubectl delete node <nodename>
(注意您仍然必须使用旧的节点名称)运行:
kubeadm reset
(如果需要,作为root
)
现在,在原来的主节点上:
Run:
export KUBECONFIG=/path/to/admin.conf
Run:
kubeadm token create --print-join-command
返回到重命名的Node:
- 运行:
kubeadm join
-根据kubeadm token create
的输出调整此命令,并根据需要添加--control-plane
和--node-name
等标志。在继续之前,先看看kubeadm连接。
您可以查看此来源的教程视频。
例子:
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
Result:kube-node-2
的名称成功更改为kube-node-22