基于Kubeadm实现K8S集群扩缩容指南

一、集群缩容操作流程

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. 核心步骤说明

在缩容节点时,数据清理与重置节点是确保集群安全性和避免数据泄露的核心环节,需按顺序执行以下操作:

  1. 详细操作流程

2.1 数据备份与迁移

关键原则:

若节点运行有状态服务(如数据库、PV持久化存储),需先备份数据并迁移到其他节点。

操作示例:

bash 复制代码
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缩容全流程(附加数据保护)

bash 复制代码
生产环境完整缩容流程示例
# 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)批量管理节点,可以提升运维效率。

相关推荐
hgdlip26 分钟前
电脑的ip地址会自动变怎么办?原因解析和解决方法
运维·网络·tcp/ip·电脑
ZZH1120KQ30 分钟前
Linux账号和权限管理
linux·运维
@Liu_GuoXing36 分钟前
Registry和docker有什么关系?
运维·docker·容器·registry
水水沝淼㵘1 小时前
嵌入式开发学习日志(linux系统编程--系统编程之 进程间通信IPC)Day32
linux·运维·学习
IT小饕餮1 小时前
linux登陆硬件检测脚本
linux·运维·服务器
Dxy12393102161 小时前
DrissionPage 性能优化实战指南:让网页自动化效率飞升
运维·爬虫·python·性能优化·自动化
碎梦归途3 小时前
Linux 软件安装方式全解(适用于 CentOS/RHEL 系统)
linux·运维·centos
啃火龙果的兔子3 小时前
CentOS 7.9 安装 宝塔面板
linux·运维·centos
tanyyinyu4 小时前
Python函数参数详解:从位置参数到灵活调用的艺术
运维·开发语言·python
国际云,接待4 小时前
阿里云无影云桌面深度测评
运维·服务器·阿里云·云原生·云计算