CentOS7下Docker Storage Pool扩容

前言:在docker刚起步的时候,RHEL的内核并不支持AUFS作为docker的后端存储而将移植工作推迟。后来,红帽和docker合作开发一种基于Device Mapper技术的后端存储框架,也就是现在的device-mapper插件。

##问题
systemctl start docker.service 提示启动失败。

##分析
使用命令查看docker启动日志:

# journalctl -xe

发现docker-pool容量不足,不能继续分配新的空间,错误信息如下:

 Insufficient Free Extents for a docker-pool

由于centos上的docker使用存储池,也就是基于LVM的块系统,所以只要增加docker-pool的容量就可以解决问题了。

##收集证据

不看日志不行,比如有没有闲置的硬盘?物理卷挂在哪个硬盘?卷组挂在那个物理卷上?逻辑卷各自有多大?

查看磁盘容量:

# df -h# fdisk -l

查看物理卷(pv)信息:

# pvscan

查看卷组(vg)信息:

# vgdisplay

查看逻辑卷(lv)信息:

# lvdisplay

##解决问题

  • 查看卷组(vg)的使用和卷组的物理卷(PV)的情况:
# pvs -o+pv_used

发现sdc确没有剩余空间了,查询结果如下:

# pvs -o+pv_used
  PV         VG         Fmt  Attr PSize   PFree Used    
  /dev/sdc2  VolGroup00 lvm2 a--  558.69g    0   558.69g
  • 新加一块硬盘就解决问题了。就怕没有新硬盘,需要重新划分区,move物理卷。
  1. fdisk /dev/sde;
  2. 创建主分区和扩展分区都行;
  3. 创建逻辑分区;这里有个坑,不创建逻辑分区是无法格式化硬盘的,格不了硬盘,pvcreate会报错。
  4. 格式化逻辑分区 mkfs.ext3 /dev/sde2;
  • 创建物理卷
# pvcreate /dev/sde2
  • 为卷组VolGroup00添加新的物理卷sde2来增大卷组的容量
# vgextend VolGroup00 /dev/sde2
  • 用vg里新增的空间扩展LVM逻辑卷(lv)的大小
# lvextend -L +1T /dev/VolGroup00/docker-pool
  • 重启电脑,使划分生效,比较暴力好用(软刷新使用resizefs2)。
resize2fs   /dev/VolGroup00/docker-pool

很不幸,执行resize2fs时报错了。直接reboot解决问题。

  • 最后一步重启docker服务
systemctl start docker.service

终于要见到佛祖了,想想心里还有些小激动~~

然而启动又失败了,第一件事是做什么,还不赶紧看看日志!

journalctl -xe

发现172.17.0.1这个ip无法bind, 看了看网卡,日,docker0的虚拟net-card没了。
这里不卖关子了,大部分情况是/var/lib/docker下的配置出错了,解决方案有两种:

  1. 创建docker用户组,保证用户有足够的权限运行docker。

    	sudo usermod -aG docker $(whoami)
    
  2. 简单暴力我喜欢的方法,直接删掉/var/lib/docker,相当于重置docker的运行配置,重启解决问题。(友情提示:删除之前要备份,文件再拷贝过去就可以正常用了)

    	sudo service docker stop
    	sudo rm -rf /var/lib/docker
    	sudo service docker start 
    
  3. 一切都平静了,去喝杯咖啡。

    # docker info
    	Containers: 37
    	Running: 5
    	Paused: 0
    	Stopped: 32
    	Images: 365
    	Server Version: 1.10.3
    	Storage Driver: devicemapper
    	Pool Name: VolGroup00-docker--pool
    	Pool Blocksize: 524.3 kB
    	Base Device Size: 107.4 GB
    	Backing Filesystem: xfs
    	Data file: 
    	Metadata file: 
    	Data Space Used: 263.7 GB
    	Data Space Total: 1.388 TB
    	Data Space Available: 1.124 TB
    	Metadata Space Used: 35.59 MB
    	Metadata Space Total: 604 MB
    	Metadata Space Available: 568.4 MB
    	Udev Sync Supported: true
    	Deferred Removal Enabled: true
    	Deferred Deletion Enabled: false
    	Deferred Deleted Device Count: 0
    	Library Version: 1.02.107-RHEL7 (2016-06-09)
    	Execution Driver: native-0.2
    	Logging Driver: json-file
    	Plugins: 
    	Volume: local
    	Network: bridge null host
    	Kernel Version: 3.10.0-327.36.3.el7.x86_64
    	Operating System: CentOS Linux 7 (Core)
    	OSType: linux
    	Architecture: x86_64
    	Number of Docker Hooks: 2
    	CPUs: 24
    	Total Memory: 251.7 GiB
    	Name: localhost.localdomain
    	ID: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    	WARNING: bridge-nf-call-iptables is disabled
    	WARNING: bridge-nf-call-ip6tables is disabled
    	Registries: 190087c6.m.daocloud.io (secure), docker.io (secure
    

docker storage pool再多说几句。因为是基于LVM的,所以镜像和容器都在块系统中,也就是VolGroup00这个池子里。/var/lib/docker主要存储的是镜像和容器的配置文件和device-mapper映射文件等,所以这个目录不会太大。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值