实战:在已有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)的集群,确保新节点安装了对应的网络配置。

相关推荐
w***76556 小时前
用docker启动mysql步骤
mysql·docker·容器
0***R5157 小时前
前端云原生
前端·云原生
杜子不疼.10 小时前
【探索实战】从0到1打造分布式云原生平台:Kurator全栈实践指南
分布式·云原生
qq_21539789710 小时前
docker 安装 opengauss 高斯数据库
运维·docker·容器
settingsun122510 小时前
分布式系统架构:百万并发系统设计
云原生·架构·分布式系统
谷隐凡二11 小时前
Kubernetes主从架构简单解析:基于Python的模拟实现
python·架构·kubernetes
陈陈CHENCHEN11 小时前
SuperMap iManager for K8s 离线环境镜像仓库 Containerd 部署
kubernetes
f***147711 小时前
对Docker部署的MySQL中的数据进行备份恢复
mysql·docker·容器
m***923812 小时前
docker中配置redis
redis·docker·容器
谷隐凡二12 小时前
Docker 的核心理念及技术的简单说明
运维·docker·容器