Chinaunix首页 | 论坛 | 博客
  • 博客访问: 291347
  • 博文数量: 57
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1474
  • 用 户 组: 普通用户
  • 注册时间: 2013-07-25 10:56
文章分类
文章存档

2014年(25)

2013年(32)

分类: 网络与安全

2014-01-20 10:35:43

一、Redhat系列操作系统下的Docker

   Redhat系列操作系统(redhat、centos、fedora)与ubuntu是目前最为流行的两款Linux操作系统。由于ubuntu更为桌面化,通常生产环境中更多使用Redhat系OS。但是由于Redhat系内核版本较低,对虚拟化的支持总是落后一步。例如本文要分析的Docker,就是先支持ubuntu,直到2013年年底才支持redhat系OS。这就造成了一个略显尴尬的现实,虽然(截止目前)ubuntu对Docker支持更好,但是很多时候我们还是要在Redhat环境下使用Docker。

   目前,Redhat已与Docker深度合作,解决兼容性、安全等Docker的核心问题。考虑到二者的技术实力,我觉得他们的合作前景是比较乐观的。不过目前,如果在Redhat或Centos下实际操作Docker,会发现坑还是比较多的。今天,我就来尝试介绍其中的一个坑——Redhat下Docker、LXC、CGroup的协同配置。


二、Docker、LXC、CGroup三者的关系

   根据Docker布道师Jerome Petazzoni的说法,Docker约等于LXC+AUFS(之前只支持ubuntu时)。其中LXC负责资源管理,AUFS负责镜像管理,而LXC又通过cgroup进行资源管理。所以只从资源管理这条线来看的话,Docker、LXC、CGroup三者的关系是:Cgroup在最底层落实资源管理,LXC在cgroup上封装了一层,Docker又在LXC封装了一层,关系图如图1所示。

wKioL1LbwN3ykfYmAADIayV7OHg227.jpg

图1



三、Docker、LXC、CGroup三者的协同部署与配置

   由于Docker、LXC、Cgroup的关系为嵌套依赖,所以如果需要实际部署使用Docker,需要搞定三者的协同配置。Docker没什么可说的,直接使用最新版本即可。LXC则有不同版本,且不同版本的运行情况明显不同。常用稳定版本有网站上的0.7.5、0.9.0,除此之外,还有git上lxc的最新版本 ,目前为1.0.0beta2(未正式发布)。cgroup也有不同的挂载方法:“多挂载点”和“单挂载点”。了解cgroup的朋友都知道,cgroup有不同的子系统,例如cpu、memory、cpuset等等,“多挂载点”就是指不同子系统的文件挂载在不同的目录下,每个子系统各有一个挂载点,cgroup对应服务cgconfig默认使用的就是“多挂载点”的方法。“单挂载点”则是指所有子系统的文件都挂载在同一个目录下,所有子系统都统一挂载在一个挂载点。

   结合上述不同版本和不同挂载方法,Docker、LXC、CGroup在Redhat/CentOS上的部署方法汇总如表1所示。

表1

Docker
    

LXC
    

Cgroup
    

运行情况



0.7
    

0.7.5
    

单挂载点
    

LXC+cgroup可以正常运行,但是docker运行将导致黑屏和自动注销。

多挂载点
    

报错,大意为无法识别cgroup

0.9.0
    

单挂载点
    

报错,形如“lxc-execute: Error creating  cgroups   lxc-execute: failed to spawn 'xxx'”

多挂载点
    

看似正常运行,但无法实现资源管理。cgroup中lxc上层参数异常,无法通过lxc-cgroup等命令设置参数

1.0.0Beta2

Git最新版,未正式发布
    

单挂载点
    

正常

多挂载点
    

报错,形如“lxc-execute: Device or resource busy -  cgroup_rmdir: failed to delete /cgroup/ns/ …

lxc-execute:  failed creating cgroups lxc-execute: failed to spawn 'lxc1'”

   先看表1前四行,其实在正式使用Docker之前,我已发现了这些问题。不过由于LXC的中文资料较少(介绍性资料有一些,实战性、有些深度的就比较少了),LXC社区又比较冷清,所以只发现一些朋友和我遇到了同样的问题,却没有靠谱的解决方法。好在“lxc-0.7.5 + cgroup单挂载点”是可以work的,我就是用这种配置方法进行工作。

   后来使用Docker,发现“lxc-0.7.5 + cgroup单挂载点”的方法在Docker中行不通,每次启动都会引起黑屏,我就重新捡起了这个问题。幸好Docker社区比较热,在一篇来来往往十几个回合的帖子里找到了解决方案,方法就是更新lxc。经实际测试,“Docker + lxc-1.0.0beta + cgroup但挂载点”的方法可以正常运行。

wKioL1Lb0HTxIHELAAGxwpvvOII967.jpg



四、Centos下Docker、LXC、CGroup的安装配置方法

   第三部分汇总了不同部署的方法,这部分(第四部分)重新梳理下可行方法的步骤,即“Docker + lxc-1.0.0Beta + 单挂载点”。

   实验环境:Centos6.3 + 内核2.6.32

   1、按照官方文档,在Centos上安装docker

   2、更新lxc。在git()上 ,下载最新版的lxc,我下载时是1.0.0Beta2。下载后根据INSTALL提示进行安装。由于Docker按照绝对路径/usr/bin/lxc-xxxx调用lxc命令,所以要把最新的lxc安装到/usr/bin目录下,或者安装后cp到/usr/bin/下。

   3、重新挂载cgroup。cgroup会默认采用“多挂载点”方式,并开机启动,所以首先禁用相应服务,操作如下:
1
2
    
sudo service cgconfig stop
sudo chkconfig cgconfig off

   然后挂载cgroup,编辑/etc/fstab/,输入下列内容。重启就OK了。
1
    
none  /cgroup  cgroup  defaults  0 0
阅读(3327) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~