如何平滑切换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

相关推荐
南山十一少1 小时前
Spring Security+JWT+Redis实现项目级前后端分离认证授权
java·spring·bootstrap
427724003 小时前
IDEA使用git不提示账号密码登录,而是输入token问题解决
java·git·intellij-idea
chengooooooo3 小时前
苍穹外卖day8 地址上传 用户下单 订单支付
java·服务器·数据库
李长渊哦3 小时前
常用的 JVM 参数:配置与优化指南
java·jvm
计算机小白一个3 小时前
蓝桥杯 Java B 组之设计 LRU 缓存
java·算法·蓝桥杯
Bright16685 小时前
centos9安装k8s集群
云原生·容器·kubernetes
小冷爱学习!6 小时前
华为动态路由-OSPF-完全末梢区域
服务器·网络·华为
南宫生6 小时前
力扣每日一题【算法学习day.132】
java·学习·算法·leetcode
技术小齐6 小时前
网络运维学习笔记 016网工初级(HCIA-Datacom与CCNA-EI)PPP点对点协议和PPPoE以太网上的点对点协议(此处只讲华为)
运维·网络·学习
计算机毕设定制辅导-无忧学长6 小时前
Maven 基础环境搭建与配置(一)
java·maven