目的
本手册提供 Kubernetes 节点挂载点修改的标准操作流程,适用于以下场景:
- 调整存储架构:将容器运行时(
containerd
)和kubelet
数据迁移至新的挂载点(如外接磁盘)。 - 优化存储性能:通过外接磁盘扩展存储空间或提升 I/O 性能。
- 运维标准化:确保操作过程安全,避免因配置错误导致节点不可用或数据丢失。
关键注意事项
⚠ 业务影响:节点驱逐(drain
)会导致 Pod 迁移,可能影响业务可用性,建议在低峰期执行。 ⚠ 依赖顺序:必须按顺序停止 kubelet
和 containerd
,修改挂载点后正确恢复服务。 ⚠ 数据安全:重启节点后,将原来的/var/lib/kubelet
和/var/lib/containerd
目录move到/var/lib/containers
下 ⚠ 验证步骤:修改 /etc/fstab
后需验证挂载是否成功,避免重启后节点无法启动
驱逐节点上的 Pod(维护模式)
ini
kubectl drain <Maintenance-node> --ignore-daemonsets --delete-local-data=true
-
--ignore-daemonsets
:忽略 DaemonSet 管理的 Pod(如kube-proxy
、calico-node
)。 -
--delete-local-data
:删除本地存储的 Pod(如EmptyDir
数据)。
Kubelet containerd 设置开机不启动
bash
systemctl disable kubelet containerd
- 防止重启后服务自动启动,导致挂载点冲突。
重启节点
reboot
- 确保所有服务停止,避免文件被占用导致挂载失败。
修改挂载点
修改挂载点(如外接磁盘挂载至 /var/lib/containers
)
-
检查外接磁盘是否识别(如
/dev/sdb
):lsblk -f
-
修改
/etc/fstab
,添加新挂载点(示例):
bash
/dev/sdb1 /var/lib/containers ext4 defaults 0 0
- 挂载并验证:
bash
mount -a
df -h /var/lib/containers
迁移原来的数据
bash
mv /var/lib/kubelet /var/lib/containers/kubelet
mv /var/lib/containerd /var/lib/containers/containerd
创建软链
bash
ln -sv /var/lib/containers/kubelet /var/lib/kubelet
ln -sv /var/lib/containers/containerd /var/lib/containerd
启动 containerd 和 kubelet
sql
systemctl start containerd kubelet
- 检查服务状态:
lua
systemctl status containerd kubelet
重新设置开机启动
bash
systemctl enable kubelet containerd
确保节点重启后服务自动恢复。
验证步骤
- 检查 节点 状态:
arduino
kubectl get nodes
- 确认节点状态恢复为
Ready
。
- 检查 Pod 是否重新调度:
arduino
kubectl get pods -o wide | grep <Maintenance-node>
- 确保业务 Pod 已正常迁移回该节点。
- 验证存储是否生效:
bash
df -h /var/lib/containers
ls -l /var/lib/kubelet /var/lib/containerd
- 确认挂载点及软链接正确。