系统环境

  • Kubernetes 版本:1.20.4

前提背景

k8s集群中,需要修改node节点主机名,我们应该怎样操作,更改了kubelet.conf配置中 hostname-override 参数,也更改了 kube-proxy-config.yml 配置中 hostnameOverride 参数,删除 Node 节点并且重启 kubelet 和 kube-proxy 服务,但主机名并没有修改

具体操作

驱逐pod并删除node节点

Node节点主机名更改,需要先删除Node节点,在删除节点前,需要把该节点上的Pod应用服务驱逐到其它节点上

# 通过以下命令驱逐节点上pod应用
[root@k8s-master ~]# kubectl drain nodename --delete-local-data --force --ignore-daemonsets

# 查看node节点,nodename上应用服务驱逐完后会标记为不可调度
[root@k8s-master ~]# kubectl get node
NAME       STATUS                     ROLES    AGE   VERSION
k8s-master1   Ready,SchedulingDisabled   <none>   24d   v1.20.4
k8s-node1   Ready                      <none>   24d   v1.20.4

# 删除节点
[root@k8s-master ~]# kubectl delete node k8s-master1

修改 kubelet 和 kube-proxy 服务配置文件

# 停止 kubelet和kube-proxy服务
[root@k8s-master ~]# systemctl stop kubelet
[root@k8s-master ~]# systemctl stop kube-proxy

# 修改 kubelet.conf 配置文件中 hostname-override 参数
[root@k8s-master ~]# vim /opt/kubernetes/cfg/kubelet.conf
# 修改完后,查看
[root@k8s-master ~]# grep hostname-override /opt/kubernetes/cfg/kubelet.conf
--hostname-override=k8s-master \

# 修改 kube-proxy.kubeconfig 配置文件中 hostnameOverride 参数
[root@k8s-master ~]# vim /opt/kubernetes/cfg/kube-proxy-config.yml

# 修改完后,查看
[root@k8s-master ~]# grep hostnameOverride /opt/kubernetes/cfg/kube-proxy-config.yml
hostnameOverride: k8s-master # 注册到k8s的节点名称唯一

删除 kubelet 服务生成的认证文件和客户端证书

如果不删除 kubelet 服务生成的认证文件和客户端证书,那么修改的节点主机名是不会生效

# 删除 kubelet 服务生成的认证文件和客户端证书
[root@k8s-master ~]# rm -f /opt/kubernetes/cfg/kubelet.kubeconfig
[root@k8s-master ~]# rm -f /opt/kubernetes/ssl/kubelet*

# 重新启动 kubelet 和 kube-proxy 服务
[root@k8s-master ~]# systemctl start kubelet
[root@k8s-master ~]# systemctl start kube-proxy

验证

[root@k8s-master ~]# kubectl  certificate approve csr-xhjk5
NAME        AGE   SIGNERNAME                                    REQUESTOR           CONDITION
csr-xhjk5   31m   kubernetes.io/kube-apiserver-client-kubelet   kubelet-bootstrap   Pending

# 执行上面命令成功后,会看到下面结果
[root@k8s-master ~]# kubectl get csr
NAME        AGE   SIGNERNAME                                    REQUESTOR           CONDITION
csr-xhjk5   31m   kubernetes.io/kube-apiserver-client-kubelet   kubelet-bootstrap   Approved,Issued

# 查看 node 节点,成功加入node节点,并且主机名也修改成功
[root@k8s-master ~]# kubectl get node
NAME            STATUS   ROLES    AGE   VERSION
k8s-master   Ready    <none>   31m   v1.20.4
k8s-node1        Ready    <none>   24d   v1.20.4

总结

修改node节点主机名顺序如下

  • 使用 kubectl drain 命令驱逐节点上Pod
  • 使用 kubectl delete node 命令删除需要改名的节点
  • 停止 kubelet 和 kube-proxy 服务
  • 修改 kubelet.conf 和 kube-proxy-config.yml 配置
  • 删除 kubelet 服务生成的认证文件和客户端证书
  • 启动 kubelet 和 kube-proxy 服务
  • 使用命令 kubectl get csr 和 kubectl certificate approve 命令授权 node节点加入
文章作者: 鲜花的主人
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 爱吃可爱多
Kubernetes Kubernetes
喜欢就支持一下吧
打赏
微信 微信
支付宝 支付宝