为了账号安全,请及时绑定邮箱和手机立即绑定

Docker主机升级到4.9版本内核,使用Overlayfs取代Devicemapper

标签:
Docker


前言:由于之前运行Docker系统了几台机器很久一直没有更新,docker版本为1.9.1。使用的docker存储驱动为Devicemapper。本次需要更新Docker的管理平台,索性也就将底层的docker版本也升级到新版,并更改Devicemapper为overlayfs。由于操作系统是CentOS Linux release 7.1.1503 (Core),内核版本3.10.0-229.el7.x86_64,该内核版本已经支持overlayfs。但是由于新的内核4.9已经发布,在4.9的内核版本中,对硬件和文件系统方面的改进也很多,涉及到 Btrfs、XFS、F2FS、OverlayFS 的 UBIFS 支持、FUSE 支持 POSIX ACL、OverlayFS SELinux 等方面。所以本次也将内核版本升级到4.9。

更新如下

Kernel Version:  3.10.0-->4.9.0

Docker Version:  1.9.1-->1.12.2

Storage Driver:  DeviceMapper-->Overlayfs

一:升级Kernel版本

(1)安装yum源

$ rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm

Retrieving http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm

warning: /var/tmp/rpm-tmp.X3PpyZ: Header V4 DSA/SHA1 Signature, key ID baadae52: NOKEY

Preparing...                          ################################# [100%]

Updating / installing...

   1:elrepo-release-7.0-2.el7.elrepo  ################################# [100%]

(2)安装kernel

$ yum -y --enablerepo=elrepo-kernel install  kernel-ml-devel-4.9.0 kernel-ml-4.9.0 

======================================================================= 

Package           Arch      Version             Repository         Size

======================================================================= 

Installing:

kernel-ml         x86_64    4.9.0-1.el7.elrepo  elrepo-kernel      39 M

kernel-ml-devel   x86_64    4.9.0-1.el7.elrepo  elrepo-kernel      11 M

Transaction Summary

======================================================================== 

Install  2 Packages

Installed:

   kernel-ml.x86_64 0:4.9.0-1.el7.elrepo 

   kernel-ml-devel.x86_64 0:4.9.0-1.el7.elrepo

(3)检查当前版本

$ uname -r

3.10.0-229.el7.x86_64

(4)检查kernel启动顺序

$ awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg

CentOS Linux (4.9.0-1.el7.elrepo.x86_64) 7 (Core)

CentOS Linux (4.9.0-1.el7.elrepo.x86_64) 7 (Core) with debugging

CentOS Linux 7 (Core), with Linux 3.10.0-229.el7.x86_64

CentOS Linux 7 (Core), with Linux 0-rescue-f7e36a944a3d4035a61da37d8d4e2313

(5)设置启动kernel

根据上面检查kernel启动顺序,自上而下,从0开始的顺序。如果设置4.9启动那么如下命令

$grub2-set-default 0

重启

$reboot

(6)检查kernel版本

$ uname -r

4.9.0-1.el7.elrepo.x86_64

Kernel升级完毕!!!

二:升级Docker版本

(1)关闭docker进程,卸载老版本

$ systemctl stop docker 

$ rpm -qa|grep docker

docker-engine-1.9.1-1.el7.centos.x86_64

docker-storage-setup-0.5-3.el7.centos.noarch

docker-engine-selinux-1.9.1-1.el7.centos.noarch

$ rpm -e docker-engine-1.9.1-1.el7.centos.x86_64

$ rpm -e docker-engine-selinux-1.9.1-1.el7.centos.noarch

(2)安装新版本

$ wget https://yum.dockerproject.org/repo/main/centos/7/Packages/docker-engine-selinux-1.12.2-1.el7.centos.noarch.rpm

$ wget https://yum.dockerproject.org/repo/main/centos/7/Packages/docker-engine-1.12.2-1.el7.centos.x86_64.rpm

# 使用yum命令可以解决依赖问题,如果直接rpm命令安装可能会报错。

$ yum install -y docker-engine-selinux-1.12.2-1.el7.centos.noarch.rpm

$ yum install -y docker-engine-1.12.2-1.el7.centos.x86_64.rpm

(3)检查新的docker版本

$ docker -v

Docker version 1.12.2, build bb80604

Docker升级完毕!!!

三:使用overlayfs

(1)检查是否有overlayfs模块

$ lsmod  | grep overlay

overlay                49152  0

没有的话下面命令加载

$ modprobe overlay

(2)为overlayfs目录挂一块盘

因为之前没有使用docker默认的loopback方式(因为不是物理块设备,性能很差,大小也有限制),而是单独拿了一块物理盘来做Devicemapper。现在要将那块盘挂载到overlayfs的目录下使用。

注意:因为要改变存储方式,格式化盘。所以原来的数据肯定是没有了。一会docker启动后,原来的容器也是不存在的。

如果直接执行mkfs.xfs   /dev/xvdb,肯定会报错device is busy,因为之前的devicemapper映射关系还在,磁盘被占用,是无法被格式化的。

1:查看分区情况

$ cat /proc/partitions

major minor  #blocks  name

202        0   68157440 xvda

202        1     512000 xvda1

202        2    5242880 xvda2

202        3    2097152 xvda3

202        4          1 xvda4

202        5   60303360 xvda5

202       16  104857600 xvdb

202       17  104856576 xvdb1

253        0     106496 dm-0

253        1  103698432 dm-1

253        2  103698432 dm-2

2:查看device mapper的状态

$ dmsetup status

docker--vg-docker--pool: 0 1159217152 thin-pool

docker--vg-docker--pool_tdata: 0 1159217152 linear 

docker--vg-docker--pool_tmeta: 0 1179648 linear

3:查看device mapper设备依赖关系

$dmsetup deps

docker--vg-docker--pool: 2 dependencies : (253, 1) (253, 0)  

docker--vg-docker--pool_tdata: 1 dependencies   : (202, 17)

docker--vg-docker--pool_tmeta: 1 dependencies   : (202, 17)

输出信息中(202, 17),对应了分区上的 xvdb这个设备,说明依赖的是xvdb

4:删除掉device mapper映射出来的设备

$ dmsetup remove docker--vg-docker--pool

$ dmsetup remove docker--vg-docker--pool_tdata

$ dmsetup remove docker--vg-docker--pool_tmeta

$ dmsetup status

No devices found

5:格式化磁盘

$ mkfs.xfs -f  /dev/xvdb

6:创建docker的数据目录,挂载磁盘

$ mkdir -p /data/docker

$ mount /dev/xvdb /data/docker

$ df -h

Filesystem      Size  Used Avail Use% Mounted ondevtmpfs         

16G     0   16G   0% /dev/dev/xvda5       

58G  2.3G   56G   4% //dev/xvda2      

5.0G   40M  5.0G   1% /home/dev/xvda1      

497M  161M  337M  33% /boot/dev/xvdb       

100G   33M  100G   1% /data/docker

(3)修改docker启动方式为overlayfs

vim /usr/lib/systemd/system/docker.service

ExecStart=/usr/bin/docker daemon --storage-driver=overlay --graph="/data/docker" --insecure-registry registry.cntv.net

(4)reload配置并启动docker

$ systemctl daemon-reload                                     

$ systemctl start docker                    

$ docker psCONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

$ ls /data/dockercontainers  p_w_picpath  network  overlay  swarm  tmp  trust  volumes

overlayfs配置完毕!!!

遇到的问题:

在修改docker启动配置时docker.service原来的默认配置中是这样的

ExecStart=/usr/bin/dockerd -H fd://

当我改成

ExecStart=/usr/bin/dockerd --storage-driver=overlay --graph="/data/docker" --insecure-registry registry.cntv.net -H fd://

启动的时候,docker报错了。

报错内容:no sockets found via socket activation: make sure the service was started by systemd.

wKiom1hd__CTpon5AABP1mUbVds685.png

在github查到了这个更新。1.12版本之后这个配置发生了改变。解决办法中将-H fd://从ExecStart指令中删除,改成如下方式解决。

ExecStart=/usr/bin/dockerd --storage-driver=overlay --graph="/data/docker" --insecure-registry registry.cntv.net

地址:https://github.com/docker/docker/releases/tag/v1.12.5

wKiom1heB7KC6yADAADsyjqBEO8809.png

©著作权归作者所有:来自51CTO博客作者酱酱酱子啊的原创作品,如需转载,请注明出处,否则将追究法律责任

kerneldockeroverlayfsDocker


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

举报

0/150
提交
取消