实战:在已有K8S集群如何新增和删除Node节点

本篇文章将分享一下如何在已有集群添加新节点和删除现有节点

1 新增节点到K8S集群

新增节点可以分为准备节点、配置节点和将其加入集群三步。

1.1 准备新节点

准备一个相同操作系统的主机作为新节点。参考以前部署的文章:实战部署k8s 1.28版本集群,跟着操作到到2.2节即可。

需要注意的点:

(1)hosts文件配置 每个节点的hosts保持一致

复制代码
[root@k8s-master ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
10.0.0.100   k8s-master 
10.0.0.101   k8s-node1
10.0.0.102   k8s-node2
10.0.0.105   k8s-node3

(2)给新加节点做免密(可选)

复制代码
ssh-copy-id -i ~/.ssh/id_rsa.pub root@10.0.0.105

1.2 通过 kubeadm 将节点加入集群

默认token有效期为24小时,过了24小时需要重新生成。

获取加入命令:(master上执行)

复制代码
[root@k8s-master ~]# kubeadm token create --print-join-command
kubeadm join 10.0.0.100:6443 --token naplk8.5r28hqqime7agil9 --discovery-token-ca-cert-hash sha256:7627203f93ab4334f80ebb32ee666298440bef63010160839fa44eb1d9c2d853

运行加入命令:(新增节点上执行)

复制代码
[root@k8s-node3 ~]# kubeadm join 10.0.0.100:6443 --token naplk8.5r28hqqime7agil9 --discovery-token-ca-cert-hash sha256:7627203f93ab4334f80ebb32ee666298440bef63010160839fa44eb1d9c2d853

1.3 验证节点状态

在 Master 节点上查看节点是否加入成功:

复制代码
[root@k8s-master ~]# kubectl get node
NAME         STATUS   ROLES           AGE     VERSION
k8s-master   Ready    control-plane   32d     v1.28.2
k8s-node1    Ready    worker          32d     v1.28.2
k8s-node2    Ready    worker          32d     v1.28.2
k8s-node3    Ready    <none>          2m43s   v1.28.2

新节点已显示为 Ready 状态,说明新节点已添加成功。

2 从K8S集群中删除节点

2.1 确保节点安全下线

驱逐节点上的 Pod

在删除节点前,先将其标记为不可调度,确保新 Pod 不会调度到该节点:

复制代码
[root@k8s-master ~]# kubectl cordon k8s-node3
node/k8s-node3 cordoned

逐步迁移 Pod

使用 drain 命令驱逐节点上的 Pod,并迁移到其他节点:

复制代码
[root@k8s-master ~]# kubectl drain k8s-node3 --ignore-daemonsets --delete-emptydir-data

参数说明:

  • --ignore-daemonsets:忽略 DaemonSet 管理的 Pod。

  • --delete-emptydir-data:删除带有 emptyDir 卷的 Pod。

2.2 从集群中移除节点

从 Master 节点中删除节点记录:

复制代码
[root@k8s-master ~]# kubectl delete node k8s-node3
node "k8s-node3" deleted

再次查看节点情况

复制代码
[root@k8s-master ~]# kubectl get node
NAME         STATUS   ROLES           AGE   VERSION
k8s-master   Ready    control-plane   32d   v1.28.2
k8s-node1    Ready    worker          32d   v1.28.2
k8s-node2    Ready    worker          32d   v1.28.2

可以看到node3节点已经被移除

2.3 清理被移除的节点

在要删除的节点上停止 kubelet:

复制代码
[root@k8s-node3 ~]# systemctl stop kubelet

重置节点:清理该节点上的 Kubernetes 配置:

复制代码
[root@k8s-node3 ~]# kubeadm reset

清理残余数据:删除 etcd 数据目录和 Kubernetes 配置文件:

复制代码
[root@k8s-node3 ~]# rm -rf /etc/cni/net.d /var/lib/kubelet /var/lib/etcd

3 注意事项

  • 新增节点时,Master 和节点之间的网络需要畅通,特别是用于控制平面通信的端口(如 6443)。

  • 删除节点时,建议逐步迁移工作负载,避免业务中断。

  • 对于启用了网络插件(如 Calico 或 Flannel)的集群,确保新节点安装了对应的网络配置。

相关推荐
君科程序定做1 小时前
文件管理从基础到高级:文件描述符、超大文件切片重组与快速删除实战
云原生·容器
斯普信专业组1 小时前
基于k8s环境下的pulsar常用命令(上)
云原生·容器·kubernetes·pulsar
慌ZHANG3 小时前
云原生时代的 Linux:容器、虚拟化与分布式的基石
linux·云原生
斯普信专业组4 小时前
k8s调度问题
java·容器·kubernetes
草履虫建模5 小时前
RuoYi OpenAPI集成从单体到微服务改造全过程记录
java·运维·vue.js·spring cloud·微服务·云原生·架构
LTRchae5 小时前
Docker可用镜像(长期免费)
docker·容器
awei09168 小时前
如何将服务器中的Docker镜像批量导出?
服务器·docker·云原生·容器
David爱编程9 小时前
K8s配置动态更新实战:不用重启容器也能生效
云原生·容器·kubernetes
稚辉君.MCA_P8_Java14 小时前
k8s中pod如何调度?
docker·容器·kubernetes