一、集群缩容操作流程
1.1 缩容核心步骤
-
驱逐节点上的Pod
执行kubectl drain
命令驱逐节点上的Pod,并忽略DaemonSet管理的Pod:kubectl drain <节点名> --ignore-daemonsets # 示例:驱逐worker233节点 kubectl drain worker233 --ignore-daemonsets
-
检查节点状态是否变为
SchedulingDisabled
:kubectl get nodes
-
-
下线节点kubelet服务
在待移除节点上停止并禁用kubelet:systemctl disable --now kubelet.service
-
数据清理与重置节点
- 需手动清理残留文件(如CNI配置、iptables规则)。
-
执行
kubeadm reset
清除节点上的K8S痕迹:kubeadm reset -f
-
从集群移除节点
在Master节点删除节点信息:kubectl delete node <节点名> # 示例:移除worker233 kubectl delete node worker233
二、集群扩容操作流程
2.1 扩容前提准备
-
新节点环境配置
-
安装Docker/Containerd、kubeadm、kubelet、kubectl。
-
系统优化:禁用Swap、内核参数调优、确保CPU≥2核。
-
2.2 生成加入集群的Token
在Master节点创建永不过期的Token并生成加入命令:
kubeadm token create <自定义Token名> --ttl 0 --print-join-command # 示例:创建Token并输出加入命令 kubeadm token create cancan.caofacan66666666 --print-join-command --ttl 0
--print-join-command 打印加入集群的命令
--tty 0 token永不过期
-
Token格式要求:6位小写字母数字 + 16位小写字母数字(如
abcd12.xyz4567890abcdef
)。
2.3 新节点加入集群
-
启动kubelet服务
systemctl enable --now kubelet.service
-
执行加入命令
使用Master生成的命令加入集群:
kubeadm join <MasterIP:端口> --token <Token值> --discovery-token-ca-cert-hash <哈希值> # 示例(具体参数以实际输出为准) kubeadm join 10.0.0.231:6443 --token oldboy-cluster-join.abcdef123456 --discovery-token-ca-cert-hash sha256:xxxxxx
-
验证节点状态
在Master节点查看新节点是否就绪:kubectl get nodes
三、关键注意事项
-
缩容注意事项
-
确保所有非DaemonSet Pod已被驱逐,避免业务中断。
-
重置节点后需清理残留数据,防止敏感信息泄露。
-
-
扩容注意事项
-
Token有效期:默认24小时,
--ttl 0
设置为永久有效。 -
确保新节点与Master网络互通,防火墙放行6443端口。
-
-
常见问题排查
-
节点无法加入:检查Token有效性、时间同步、网络连通性。
-
节点状态非Ready:等待网络插件(如Calico)自动配置,检查kubelet日志:
journalctl -u kubelet -f
-
四、操作示例全流程
4.1缩容操作实录
# 1. 驱逐节点worker233 kubectl drain worker233 --ignore-daemonsets # 2. 下线kubelet(worker233执行) systemctl disable --now kubelet.service # 3. 重置节点(worker233执行) kubeadm reset -f # 4. 从集群移除节点(Master执行) kubectl delete node worker233
缩容前最后先把要驱逐的节点做好数据备份,这一步还是非常重要的
4.1.1缩容数据清理与重置节点思路
1. 核心步骤说明
在缩容节点时,数据清理与重置节点是确保集群安全性和避免数据泄露的核心环节,需按顺序执行以下操作:
2. 详细操作流程
2.1 数据备份与迁移
关键原则:
若节点运行有状态服务(如数据库、PV持久化存储),需先备份数据并迁移到其他节点。
操作示例:
1.1进入节点查看持久化数据目录(假设数据存储在 /data 目录)
ssh worker233
ls /data
# 使用rsync备份到其他节点(如备份到NFS或存储服务器)
rsync -avz /data/ backup-server:/backups/worker233/
1.2驱逐Pod并下线服务
在Master节点驱逐Pod:
kubectl drain worker233 --ignore-daemonsets --delete-emptydir-data
--delete-emptydir-data:强制删除使用emptyDir的Pod数据。
清理Kubernetes痕迹
在待移除节点执行:
# 重置Kubernetes配置
kubeadm reset -f
# 手动清理残留文件
rm -rf /etc/cni/net.d # 删除CNI网络配置
iptables -F && iptables -t nat -F # 清空iptables规则
ipvsadm --clear # 清空IPVS表(如集群使用IPVS模式)
rm -rf $HOME/.kube/config # 删除本地kubeconfig文件
2.1 格式化磁盘(可选但关键)
适用场景:
若节点挂载了独立的数据磁盘(如云服务器的附加云盘),需单独格式化。
操作示例:
# 查看磁盘信息(假设附加磁盘为 /dev/sdb)
lsblk
# 格式化磁盘(谨慎操作!确认目标磁盘无误!)
umount /dev/sdb # 卸载磁盘
wipefs -a /dev/sdb # 擦除文件系统签名
dd if=/dev/zero of=/dev/sdb bs=1M count=100 # 覆盖磁盘头部数据
3.1重装操作系统(高安全场景必选)
适用场景:
金融、政务等高安全等级环境,需彻底消除残留数据。
操作建议:
使用自动化工具(如PXE、Cobbler)快速重装系统。
安装后重新做基础安全加固(如关闭SSH密码登录、更新内核)。
4. 操作注意事项
备份验证:
备份完成后,在目标服务器验证数据完整性:
# 对比备份文件和源文件哈希值
sha256sum /data/important-file
sha256sum /backups/worker233/important-file
磁盘格式化风险:
确保仅格式化附加磁盘,避免误操作系统盘导致节点无法启动。
云服务器用户可直接在控制台卸载并删除云盘。
重装系统后的配置:
若计划未来重新加入集群,保留基础依赖(如Docker、kubeadm)的安装脚本。
示例脚本(保存为install-k8s-node.sh):
#!/bin/bash
apt-get update
apt-get install -y docker.io kubeadm=1.23.17-00 kubelet=1.23.17-00
systemctl enable docker kubelet
4.1.2缩容全流程(附加数据保护)
生产环境完整缩容流程示例
# 1. Master节点:驱逐Pod并标记不可调度
kubectl drain worker233 --ignore-daemonsets --delete-emptydir-data
# 2. Worker233节点:下线服务并清理K8S
systemctl disable --now kubelet
kubeadm reset -f
rm -rf /etc/cni/net.d /etc/kubernetes/ $HOME/.kube/
# 3. 格式化附加磁盘(假设数据盘为/dev/sdb)
umount /dev/sdb
wipefs -a /dev/sdb
mkfs.ext4 /dev/sdb # 仅测试环境,生产环境建议物理销毁
# 4. Master节点:移除节点
kubectl delete node worker233
# 5. (可选)重装操作系统后,保留脚本以便未来扩容
scp install-k8s-node.sh worker233:/root/
5. 安全建议
审计日志:记录所有操作日志,便于溯源。
自动化工具:使用Ansible或SaltStack批量执行磁盘清理,降低人工误操作风险。
物理安全:若为物理服务器,退役后需对硬盘进行消磁或物理销毁。
通过以上步骤,可确保节点缩容过程既符合Kubernetes最佳实践,又能满足企业级数据安全要求。
4.4扩容操作实录
# 1. Master生成加入命令 kubeadm token create mytoken-join --ttl 0 --print-join-command # 输出示例:kubeadm join 10.0.0.231:6443 --token mytoken-join.abc123... --discovery-token-ca-cert-hash sha256:xxxx # 2. 新节点执行加入命令 kubeadm join 10.0.0.231:6443 --token mytoken-join.abc123... --discovery-token-ca-cert-hash sha256:xxxx # 3. 验证新节点(Master执行) kubectl get nodes # 应看到新节点状态为Ready
通过以上步骤,可以安全地实现Kubernetes集群的弹性扩缩容。建议在生产环境中结合自动化工具(如Ansible)批量管理节点,可以提升运维效率。