设为首页 收藏本站
查看: 3344|回复: 0

[经验分享] docker停机扩容pool空间

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-3-11 08:44:06 | 显示全部楼层 |阅读模式
我这里使用docker的容器做测试机给开发使用,使用都没问题,但随着项目增加,有的项目需要更大的硬盘,我通过(http://www.iyunv.com/forum.php?m ... &extra=page%3D1)来动态扩展容器的空间,满足使用需求,但我当前设置的docker pool却不足了(默认pool是100g,每个容器给予10g空间),如果pool满了就无法新创建容器,并且无法删除数据来清理(我使用dd来测试),所以为了解决此问题,我准备:
1、备份当前容器与images;
2、停止docker服务;
3、扩展pool的大小(从100g扩大到自定义大小);
4、启动docker并恢复容器与images。
下面是备份前docker的信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
09:54:52 # docker version
Client version: 1.1.2
Client API version: 1.13
Go version (client): go1.2.2
Git commit (client): d84a070/1.1.2
Server version: 1.1.2
Server API version: 1.13
Go version (server): go1.2.2
Git commit (server): d84a070/1.1.2
root@ip-10-10-29-224:~
09:54:56 # docker info
Containers: 15
Images: 10
Storage Driver: devicemapper
Pool Name: docker-8:3-22676231-pool
Data file: /var/lib/docker/devicemapper/devicemapper/data
Metadata file: /var/lib/docker/devicemapper/devicemapper/metadata
Data Space Used: 95999.2 Mb
Data Space Total: 102400.0 Mb
Metadata Space Used: 51.4 Mb
Metadata Space Total: 2048.0 Mb
Execution Driver: native-0.2
Kernel Version: 2.6.32-431.29.2.el6.x86_64



可以看到docker是1.1.2版本,pool是100g,目前使用了95G
下面是我具体的备份操作步骤
1、记录所有容器对应的ip及防火墙策略
我当前docker主机使用默认docker0做桥接,容器重启后ip会变更,为了方便修改防火墙策略,所以我记录所有docker主机的ip及防火墙策略
记录docker主机ip可以参考使用命令
1
docker ps -a|grep -v "NAMES"|awk '{print $NF}'|xargs   -I {} sh -c "docker inspect {}|grep -i add"



备份防火墙策略
1
cp /etc/sysconfig/iptables /tmp/iptables_backup



2、备份所有docker的container
如果扩展pool的话,默认的images与容器都会被清除,所以得备份
1
docker ps -a|grep -v "NAMES"|awk '{print $NF}'|xargs   -I {} sh -c "docker export {} >/tmp/docker_backup/containers/docker_{}.tar"



3、打包备份所有的images
1
docker images|grep -v "REPOSITORY"|awk '{print $1":"$2}' >docker_images.txt && docker save -o /tmp/docker_backup/images/`cat docker_images.txt|cut -d/ -f2`.tar `cat docker_images.txt` && rm -rf docker_images.txt



4、停止当前docker所有container
1
docker stop `docker ps -a -q`



5、停止docker服务
1
/etc/init.d/docker stop



6、备份旧的docker数据
1
<br>



1
cp -a /var/lib/docker /tmp/docker_backup/data_backup



备份数据是为了进行失败回滚

7、删除旧的docker数据库

1
rm -rf /var/lib/docker



8、增大pool容量
2个方法,一个是使用dd,一个是使用docker daemon命令

使用dd的,把pool增大到600G
1
dd if=/dev/zero of=/var/lib/docker/devicemapper/devicemapper/data bs=1G count=0 seek=600



seek后面是大小

使用docker daemon的
1
--storage-opt dm.loopdatasize=600G --storage-opt dm.loopmetadatasize=8G



9、启动docker

1
/etc/init.d/docker start



10、恢复images
1
2
cd /tmp/docker_backup/images/
docker load test1:new<test1.tar



使用docker load一个一个的恢复吧
11、恢复容器
1
2
cd /tmp/docker_backup/containers/
cat test1.tar |docker import - test1:new



12、启动容器并记录ip

上一步恢复的话,是把备份的容器做成了images,如果想启动就进行docker run,比如我有个images是test1:new
1
docker run --privileged -d   --name="test1"   test1:new /usr/sbin/sshd -D



13、调整防火墙

记住新的容器ip,并根据第一步备份的防火墙策略,进行修改
心得:
如果容器都使用默认的10g空间,迁移没有出现问题,但如果容器进行了动态扩展,比如默认10g空间,你扩展到了30g或者更高,那么备份恢复容器的时候,会出现下面报错
1
2
[c3c929fe] +job import(-, cocos-play, )
write /var/lib/docker/devicemapper/mnt/19b84c235a7ed914871c0f10b5b17af9fc89955b077ad85afe0ec6e4b253c92b/rootfs/home/www/cocosplay/uploads/neatgame/ah2ssp/r_scene_20.cpk: no space left on device



这个错误在google里查看有2个方法解决,但我测试了,都未解决
第一个方法是说物理内存不足,第二个方法是说使用docker临时目录
具体issue参考https://github.com/coreos/coreos-vagrant/issues/49
所以建议大家进行别动态扩展容器磁盘空间,尽量使用volume来挂载。
另外1.3及以上我测试是无法对容器进行动态扩展空间,给官方提出issue也没人回答,地址是https://github.com/docker/docker/issues/11153


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-45492-1-1.html 上篇帖子: centos 6.5安装docker报错 下篇帖子: docker 自建私有仓库 空间
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表