如何平滑切换Containerd数据目录

如何平滑切换Containerd数据目录

大家好,我是秋意零。

这是工作中遇到的一个问题。搭建的服务平台,在使用的过程中频繁出现镜像本地拉取不到问题(在项目群聊中老是被人@出来😅)原因是由于/目录空间不足导致,本地镜像被kubelet自动清理。

有多不足呢,平台监控频繁显示磁盘空间达到80%以上,一看/目录空间竟然只有50G。。这也影响到系统的长期使用了。

从这个分区上看,应该是在安装系统时采用了系统默认分区。在得知是测试相关人员才学会安装系统时,也就能理解了。

个人建议:在安装系统时,请不要使用默认的分区。可参考下列分区规范:

  • /boot分区:1G
  • /swap分区:2G
  • /分区:剩余的所有空间

我作为运维人员,其实也早发现了该问题,出于对业务的不熟悉,以为他们有自己的需求。以至于没有反馈,然而没想到这个安装系统的人员是才学会的,这就比较尴尬了。。(哪有什么个性需求)

该系统部署的K8s集群。所以目前使用根/目录空间的比较严重的是Containerd运行时,容器的系统(rootfs)目录。

目前已知解决办法有两个:

  • 磁盘扩容;
  • 修改Containerd持久化目录,使其不使用根/目录空间。

由于,暂时没有多余的盘符添加。这里采用修改Containerd持久化目录,来处理。

Containerd 数据目录介绍

containerdrootstate 目录各有不同的用途:

  1. root 目录 (/var/lib/containerd):
    • 这个目录用于存储 containerd 的持久数据,包括镜像、容器的文件系统层等数据。
    • 通常是较为永久的存储,用于在服务重启后仍然可以保留的数据。
  1. state 目录 (/run/containerd):
    • 这个目录用于存储 containerd 的临时状态信息,例如运行时的临时文件和套接字。
    • 由于它位于 /run 下,这些文件通常不会在系统重启后保留。

下列操作部分只迁移切换了/var/lib/containerd目录下的数据。在进行测试迁移/run/containerd目录数据时这里由于始终有容器在使用该目录下的文件,未能将数据移至其它地方。所以在不清楚影响的情况下,不敢冒然操作。

不知各位佬有没用什么好的方法呢?

平滑切换 操作部分

如果需要修改多个节点的Containerd数据目录,重复执行下列步骤即可。

1)设置需要操作节点,为不可调度

bash 复制代码
# 设置节点为不可调度状态
kubectl cordon k8s-node-1

重启操作节点上的Pod,使其重新调度到其它节点

bash 复制代码
kubectl delete pod -nrbd-system $(kubectl get pod -nrbd-system  -owide | grep k8s-node-1 | awk '{print $1}')

2)移动Containerd数据目录中的数据

创建新磁盘,划分区,设置开启自动挂载

bash 复制代码
# 创建需要修改目录
mkdir -p /test/var/lib/containerd

mkdir -p /public/containerd_data
# 设置开启自动挂载
cat >> /etc/rc.d/rc.local << EOF
sleep 3
mount /dev/sdb1 /test
EOF

关闭Containerd

bash 复制代码
systemctl stop containerd

移动数据,并创建软连接

bash 复制代码
mv /var/lib/containerd/* /test/var/lib/containerd
rm -rf /var/lib/containerd/
ln -s /test/var/lib/containerd /var/lib/containerd

3)恢复

启动Containerd

bash 复制代码
systemctl restart containerd
systemctl restart kubelet

恢复节点为可调度状态

bash 复制代码
kubectl uncordon k8s-node-1

4)其它

如果出现节点状态是NotReady状态,那么重启对应节点上的网络插件即可

bash 复制代码
[root@k8s-master-1 ~]#  kubectl get node
NAME           STATUS     ROLES           AGE     VERSION
k8s-master-1   Ready      control-plane   6d18h   v1.25.10
k8s-node-1     NotReady   worker          6d18h   v1.25.10

# 重启网络插件
kubectl delete pod -n kube-system calico-node-jrf8p

End

相关推荐
白总Server7 分钟前
UI架构解说
大数据·服务器·网络·数据库·web安全·架构·数据库架构
G皮T10 分钟前
【设计模式】行为型模式(一):模板方法模式、观察者模式
java·观察者模式·设计模式·模板方法模式·template method·行为型模式·observer
努力进修15 分钟前
“高级Java编程复习指南:深入理解并发编程、JVM优化与分布式系统架构“
java·jvm·架构
Peter_chq25 分钟前
【计算机网络】网络框架
linux·c语言·开发语言·网络·c++·后端·网络协议
徒步僧39 分钟前
Java全栈体系路线
java
旧故新长42 分钟前
阿里云和七牛云对象存储区别和实现
java
jimsten42 分钟前
Java学习--网络编程
java·网络·学习
kinlon.liu43 分钟前
什么是等保2.0
服务器·网络·安全·防火墙·waf·等级保护
技匠而已43 分钟前
SpringBoot单体服务无感更新启动,动态检测端口号并动态更新
java
学习向前冲1 小时前
华为交换机配置默认路由
服务器·网络·华为