Docker数据跨分区迁移

问题背景

最近与L公司合作项目需要在其公网服务器上部署测试环境。在部署环境的时候发现一个有意思的现象:

我使用docker load加载一组之前下载好的镜像,加载结束后使用docker images检查加载结果,发现镜像列表中少了几个镜像。我尝试若干次以及改变load次序,结果依旧是有几个镜像神秘地“消失”了。于是,我怀疑应该是后台运行了某个monitor进程把我的镜像删除了。比较合理的猜想是当数据分区占用量达到一定阈值的时候就会触发monitor(后来发现是Kubelet组件)的image/container GC。基于这个猜想,我检查一下文件系统中各数据分区的使用量:

df -h

部分运行结果:

/dev/vda1               50G   39G  8.4G  83% /
/dev/mapper/vg01-data  613G   46G  536G   8% /data

该服务器/目录的数据分区只有50G,docker数据默认存放的位置在/var/lib/docker,跟/目录在同一数据分区。结合在L公司其他服务器上部署的经验,猜测image GC触发的阈值应该是85%。不过,好在另有一个挂载点在/data的数据分区有600多G。

解决方案

最理想的方案是把docker的数据迁移到/data上。下面是一种比较稳妥的迁移方式:

Debian/Ubuntu
# 停止docker服务
sudo service docker stop

# 在目标数据分区上创建用于存放docker数据的目录
sudo mkdir -p /data/${tar_path}
# 将数据迁移到目标数据分区
sudo mv /var/lib/docker /data/${tar_path}
# 创建一个符号连接,让/var/lib/docker指向迁移后的目录
sudo ln -s /data/${tar_path}/docker /var/lib/docker

# 启动docker服务
sudo service docker start
CentOS/Fedora
# 停止docker服务
sudo systemctl stop docker

# 在目标数据分区上创建用于存放docker数据的目录
sudo mkdir -p /data/${tar_path}
# 将数据迁移到目标数据分区
sudo mv /var/lib/docker /data/${tar_path}
# 创建一个符号连接,让/var/lib/docker指向迁移后的目录
sudo ln -s /data/${tar_path}/docker /var/lib/docker

# 启动docker服务
sudo systemctl start docker

检查一下迁移后各数据分区的使用情况:

df -h

部分运行结果:

/dev/vda1               50G   29G   18G  62% /
/dev/mapper/vg01-data  613G   54G  528G  10% /data
执行结果

docker服务可以正常运行,之前没能加载完全的镜像也能够正常加载运行。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值