简介
默认k8s节点kubelet数据目录在/var/lib/kubelet
,如果在部署前没有做好规划,其实默认就存储在系统盘/分区下了,这样会导致一个问题,如果数据量过大会导致kubelet服务异常,其次,系统盘下有一些系统服务引用,没有形成解耦,包括后期的容量扩容也会带来影响。所以一般数据存储目录在k8s层面,一定要提前做相关规划,至少要具备可灵活扩展性等。本文主要记录在前期没有做好规划之后,/var/lib/kubelet
目前容量存储即将到一定的瓶颈期,需要快速进行迁移扩容工作。
SOP操作流程
封锁节点
暂停Node调度,使Node不可用,意思就是让该Node不接收新的pod调度。
~# kubectl cordon <node>
节点的状态转变为“SchedulingDisabled” 说明调度不可用!
停止kubelet/docker服务
1、停kubelet
~# systemctl status kubelet.service
等待node load average 降下来之后[top或者htop监视]
2、停docker
docker ps |awk '{print $1}'|xargs docker stop
systemctl stop docker.service
目录卸载
卸载 /var/lib/kubelet/pods 之外目录
df -Th |grep /var/lib/kubelet/pods
umount /var/lib/kubelet/pods/*/volumes/kubernetes.io~*/*
数据备份
备份原挂载 /var/lib/kubelet中除pods目录外的数据 到 /var/lib/kubelet-old
mkdir /var/lib/kubelet-old
cd /var/lib/kubelet/
cp -rf !(pods) /var/lib/kubelet-old/
rm -rf /var/lib/kubelet/* #清理原目录
新磁盘挂载
建议用SSD类型磁盘
umount <新磁盘>
vim /etc/fstab
XXX /var/lib/kubelet ext4 defaults,noatime,barrier=0,commit=60 0 2
mount -a
数据还原
cp -rvf /var/lib/kubelet-old/* /var/lib/kubelet/
启动kubelet/docker服务
~# systemctl start kubelet.service
~# systemctl start docker.service
查看日志看是否有异常等信息,服务正常后恢复k8s 调度
恢复调度
取消Node暂停调度状态,使Node可以接收调度。
kubectl uncordon <node>
验证:
kubectl get pods -A -o wide |grep <node> #观察Pod状态