当前位置: 首页 > news >正文

如何平滑切换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)设置需要操作节点,为不可调度

# 设置节点为不可调度状态
kubectl cordon k8s-node-1

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

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

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

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

# 创建需要修改目录
mkdir -p /test/var/lib/containerdmkdir -p /public/containerd_data
# 设置开启自动挂载
cat >> /etc/rc.d/rc.local << EOF
sleep 3
mount /dev/sdb1 /test
EOF

关闭Containerd

systemctl stop containerd

移动数据,并创建软连接

mv /var/lib/containerd/* /test/var/lib/containerd
rm -rf /var/lib/containerd/
ln -s /test/var/lib/containerd /var/lib/containerd

3)恢复

启动Containerd

systemctl restart containerd
systemctl restart kubelet

恢复节点为可调度状态

kubectl uncordon k8s-node-1

4)其它

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

[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

http://www.lryc.cn/news/484462.html

相关文章:

  • 月影和米家大路灯哪个好?书客、月影、米家谁会更胜一筹!
  • instanceof 的模式匹配(二)
  • 【Spring】Bean的作用域和Spring的执行流程
  • 自动驾驶系列—从数据采集到存储:解密自动驾驶传感器数据采集盒子的关键技术
  • QtWebServer
  • 网络基础概念与应用:深入理解计算机网络
  • <el-select> :remote-method用法
  • CKA认证 | Day3 K8s管理应用生命周期(上)
  • JavaWeb——HTML、CSS
  • springboot如何获取控制层get和Post入参
  • 30 秒!用通义灵码画 SpaceX 星链发射流程图
  • 设计模式之组合模式(营销差异化人群发券,决策树引擎搭建场景)
  • 关于做完 C# 项目的问题总结
  • CSS响应式布局实现1920屏幕1rem等于100px
  • 根据当前浏览器版本,下载或更新驱动文件为对应的版本
  • 【轻量化】YOLOv10 更换骨干网络之 MobileNetv4 | 模块化加法!非 timm 包!
  • 人体存在感应器设置时间开启感应人存在开灯,失效
  • 2024年09月CCF-GESP编程能力等级认证Python编程二级真题解析
  • Vuex vs Pinia:新一代Vue状态管理方案对比
  • es查询报错:too_many_buckets_exception
  • outlook邮箱关闭垃圾邮件——PowerAutomate自动化任务
  • 机器学习(七)——集成学习(个体与集成、Boosting、Bagging、随机森林RF、结合策略、多样性增强、多样性度量、Python源码)
  • vue跳转传参
  • 初识Linux · 共享内存
  • Illumina测序什么时候会测序到接头序列?
  • Element表格show-overflow-tooltip属性
  • 蓝桥杯竞赛单片机组备赛【经验帖】
  • 解密复杂系统:理论、模型与案例(3)
  • <项目代码>YOLOv8 番茄识别<目标检测>
  • docker安装到D盘