linux 容器(LXC) 第6章 之技术简介

转:https://blog.csdn.net/shichaog/article/details/38037435

和现有技术的对比:

container是一种资源隔离机制而非虚拟化技术。VMM(VMM Virtual Machine Monitor)或者叫Hypervisor是标准的虚拟化技术,这种技术通过虚拟层(也就是VMM或叫Hypervisor),主要作用一是让多个操作系统和应用共享硬件资源, 其二是把上层虚拟机的指令转换成底层Host操作系统所认识的指令,这就意味着在Linux上可以跑windows系统,container技术介于chroot和VM之间,其“虚拟机”和主机操作系统相同或很类似,即Linux下均是Linux架构的,没有安装windows虚拟机的。cgroup就是一个资源限制器,没有提供隔离功能,真正的隔离功能内核使用namespace实现的,这就意味着cgroup资源限制的模块间影响比container要大很多。

官方给出的LXC未来的目标是:

The goal of LXC is to create an environment as close as possible as a standard Linux installation but without the need for a separate kernel.

 

说了这么多,一张图说明container 、VMs之间的对比;以及LXC和cgroup的关系。

 

 

具体LXC的组成:

 

其意义何在:

 

从复杂度和资源消耗量角度:

Container容器可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他复杂性。容器有效地将由单个操作系统管理的资源划分到孤立的组中,以更好地在孤立的组之间平衡有冲突的资源使用需求。

从开发这和使用者角度:

开发者:Build once, Run everywhere

运维者:Configure once, Run everything

lxc能做什么:

可以为容器绑定特定的cpu和memory,分配特定比例的cpu时间、IO时间,限制可以使用的内存大小(包括内存和swap空间),提供device访问控制,提供独立的namespace(网络、pid、ipc、mnt、uts)。

Lxc隔离级别

默认的lxc配置是隔离pids(进程) sysv ipc(进程间通信),和挂载点。如果想运行sshd,就必须提供一个新的网络堆栈和hostname,如果想要避免文件冲突,需要重新挂载冲突文件到不同的地方。如果想要避免所有的冲突,你需要重新挂载一个文件系统。

Lxc依赖的两大内核组件

LXC在资源管理方面依赖与Linux内核的cgroups子系统,cgroups子系统是Linux内核提供的一个基于进程组的资源管理的框架,可以为特定的进程组限定可以使用的资源。

LXC在隔离控制方面依赖于Linux内核的namespace特性,具体而言就是在clone时加入相应的flag(NEWNS NEWPID等等)。

Namespace内核组件:

 

LXC的安装:

 

体系依附:

gcc:yum install gcc

libcap-devel:yum install libcap-devel

安装Cgroup

yum install libcgroup

安装 libvirt 堆栈

yum install libvirt libvirt-client python-virtinst

取消selinux,因为它会干扰lxc的正常功能

sudo vim /etc/selinux/config

SELINUX=disabled

SELINUXTYPE=targeted

1.5 将 cgroup 文件系统添加到 /etc/fstab , 只有这样docker才能正常工作

sudo echo "none                    /sys/fs/cgroup          cgroup  defaults        0 0" >> /etc/fsta

版本选择:

1.0及以上版本,该版本经过5年的bugfix,并且官方后续支持该版本。

安装的方式:选择源码方式,这样能更好理解该工具,

从sourceforge上下载源代码:sourceforge.net/projects/lxc/files/lxc 

解压,进入解压后的目录执行以下命令 

./configure 

make 

make install 

安装完毕使用lxc-checkconfig 检查是否安装成功,如下图就可以,如果安装的是Ubuntu下的,器User namespace 和Cgroup namespace没有显示enabled也没有关系。在lxc使用者的mailinglist中有说明。

 

安装过程就是这样。

LXC的使用:(最基本的命令)

创建容器:lxc-create –n 容器名 –t 模板名

启动容器:lxc-start –n 容器名 [-d]

 

用法:lxc-start  -n name [-f config_file] [-c console_file] [-d] [-s KEY=VAL]

          [command]

      -d 将容器当做守护进程执行

     -f  后面跟配置文件

     -c 指定一个文件作为容器console的输出,如果不指定,将输出到终端

    -s 指定配置 

    如果没有指定命令,lxc-start 将要运行 /sbin/init

例如:lxc-start -n foo -f foo.conf -d /bin/bash

 

登录容器:lxc-console –n 容器名

列出容器:lxc-ls

挂起/恢复容器:lxc-freeze/lxc-unfreeze

关闭容器:lxc-stop

用于销毁容器:lxc-destroy

监控容器:lxc-monitor

用于在容器执行应用程序:lxc-execute

 

LXC在1.0一下没有centos模板,使用第三方包或者以centos的minimal版本为原型编写。

lxc-create -t centos -n CN

lxc-start -n CN

lxc-stop –n CN

在start时有时需要指定config文件,该文件是对虚拟机环境的配置,其中网络部分就在这里。lxc-start -n CN -f /usr/var/lib/lxc/$lxccontainer/config。

centos下登陆密码和账户与Ubuntu并不相同,Ubuntu下的用户名和初始密码均为ubuntu,而centos下,登陆的用户为root,密码为/usr/local/var/lib/lxc/$NAME/tmp_root_pass;或者先更改密码,更改方式是:

chroot /usr/local/var/lib/lxc/$NAME/rootfs passwd

 

 

lxc资源限制:

 

如果容器还不存在,lxc-start会自动创建一个,容器停止运行后会被自动销毁

用法:lxc-cgroup -n name subsystem value

        -n 后面跟要调整的容器名

例如: lxc-cgroup -n foo devices.list

           lxc-cgroup -n foo cpuset.cpus "0,3"

 

参考资料:

LXC官网(http://linuxcontainers.org/

https://help.ubuntu.com/12.04/serverguide/lxc.html#lxc-resources 基于Ubuntu,但对理解lxc有帮助

http://wiki.centos.org/HowTos/LXC-on-CentOS6

https://www.stgraber.org/2013/12/20/lxc-1-0-blog-post-series/

 

LXC(Linux containers)配置文件简介

http://www.cnblogs.com/lisperl/archive/2012/04/16/2451215.html

LXC:Linux 容器工具

http://www.ibm.com/developerworks/cn/linux/l-lxc-containers/

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值