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

相关推荐
vx_dmxq21121 分钟前
【PHP考研互助系统】(免费领源码+演示录像)|可做计算机毕设Java、Python、PHP、小程序APP、C#、爬虫大数据、单片机、文案
java·spring boot·mysql·考研·微信小程序·小程序·php
5***g29823 分钟前
新手如何快速搭建一个Springboot项目
java·spring boot·后端
daidaidaiyu1 小时前
Jetlinks 物联网平台 开源版学习源码分析
java·mqtt·rxjava·tcp
老前端的功夫1 小时前
前端浏览器缓存深度解析:从网络请求到极致性能优化
前端·javascript·网络·缓存·性能优化
j***78881 小时前
clickhouse-介绍、安装、数据类型、sql
java
Connie14512 小时前
记一次K8s故障告警排查(Grafna告警排查)
云原生·容器·kubernetes·grafana
q***47182 小时前
Spring中的IOC详解
java·后端·spring
vx_vxbs662 小时前
【SSM电影网站】(免费领源码+演示录像)|可做计算机毕设Java、Python、PHP、小程序APP、C#、爬虫大数据、单片机、文案
java·spring boot·python·mysql·小程序·php·idea
SunnyDays10113 小时前
如何使用 Java 删除 Word 文档中的水印
java·删除word文档水印
毕设源码-邱学长3 小时前
【开题答辩全过程】以 基于Java企业人事工资管理系统为例,包含答辩的问题和答案
java·开发语言