一、集群缩容操作流程

1.1 缩容核心步骤

  1. 驱逐节点上的Pod
    执行kubectl drain命令驱逐节点上的Pod,并忽略DaemonSet管理的Pod:

    kubectl drain <节点名> --ignore-daemonsets
    # 示例:驱逐worker233节点
    kubectl drain worker233 --ignore-daemonsets
    • 检查节点状态是否变为 SchedulingDisabled

      kubectl get nodes
  2. 下线节点kubelet服务
    在待移除节点上停止并禁用kubelet:

    systemctl disable --now kubelet.service
  3. 数据清理与重置节点

  1. 需手动清理残留文件(如CNI配置、iptables规则)。
  2. 执行kubeadm reset清除节点上的K8S痕迹:

    kubeadm reset -f
  3. 从集群移除节点
    在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 新节点加入集群

  1. 启动kubelet服务

    systemctl enable --now kubelet.service
  2. 执行加入命令
    使用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

  1. 验证节点状态
    在Master节点查看新节点是否就绪:

    kubectl get nodes

三、关键注意事项

  1. 缩容注意事项

    • 确保所有非DaemonSet Pod已被驱逐,避免业务中断。

    • 重置节点后需清理残留数据,防止敏感信息泄露。

  2. 扩容注意事项

    • Token有效期:默认24小时,--ttl 0设置为永久有效。

    • 确保新节点与Master网络互通,防火墙放行6443端口。

  3. 常见问题排查

    • 节点无法加入:检查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.1.3扩容操作实录

# 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)批量管理节点,可以提升运维效率。

Logo

助力广东及东莞地区开发者,代码托管、在线学习与竞赛、技术交流与分享、资源共享、职业发展,成为松山湖开发者首选的工作与学习平台

更多推荐