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

[经验分享] Docker主机升级到4.9版本内核,使用Overlayfs取代Devicemapper

[复制链接]

尚未签到

发表于 2018-5-28 11:41:37 | 显示全部楼层 |阅读模式
  前言:由于之前运行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  image  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.
  

   DSC0000.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
  

DSC0001.png

运维网声明 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-482173-1-1.html 上篇帖子: docker网络技术剖析 下篇帖子: 三大容器: Docker、Rocket/rkt 和openVZ/Odin
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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