当前位置: 首页 > news >正文

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

http://www.dtcms.com/a/320606.html

相关文章:

  • 【网络自动化】利用Python脚本与计划任务,实现H3C/HPE设备配置无人值守备份
  • 冰蝎--安装、使用
  • BOM(物料清单)详解:定义、类型、差异与作用
  • 【跨国数仓迁移最佳实践5】MaxCompute近线查询解决方案助力物流电商等实时场景实现高效查询
  • Python 属性描述符(方法是描述符)
  • MySQL 配置性能优化赛:核心策略与实战技巧
  • 新客户 | TDengine 时序数据库是怎么在钢厂“撬动”PI 的?
  • [Flutter] v3.24 AAPT:错误:未找到资源 android:attr/lStar。
  • 详解 Seaborn:让数据可视化更简单高效的 Python 库
  • 使用Python爬虫,selenium能否替代requests?
  • centos出现ping: baidu.com: 未知的名称或服务问题
  • 每日五个pyecharts可视化图表:条形图与关系图
  • 【Centos】Redis 单机部署图文步骤
  • Vue3 基本语法
  • 《从零构建大语言模型》学习笔记2,文本数据处理1(以及tiktoken库无法下载gpt2参数,调用get_encoding时SSL超时的解决方法)
  • 【lucene】PostingsEnum.freq()
  • CVRF 是什么?微软弃用 MS 编号后,网络安全的下一个标准
  • C/C++与JavaScript的WebAssembly协作开发指南
  • 电脑定时开关机终极指南
  • 2025小程序怎么快速接入美团核销,实现自动化核销
  • PeiQi网络安全知识文库PeiQi-WIKI-Book保姆式搭建部署教程
  • sqli-labs通关笔记-第38关 GET字符型堆叠注入(单引号闭合 手工注入+脚本注入两种方法)
  • 欧拉角、四元数与旋转矩阵的C语言转换实现
  • 《论文阅读》传统CoT方法和提出的CoT Prompting的区分
  • 手搓MCP全流程指南:从本地开发部署到PyPI公开发布
  • 自由学习记录(79)
  • 深入解析 Seaborn:数据可视化的优雅利器
  • 智慧社区(九)——事务加持下的小区删除操作
  • Azure OpenAI gpt5和AWS Secrets Manager构建智能对话系统
  • 智能云探索:基于Amazon Bedrock与MCP Server的AWS资源AI运维实践