您的位置:新葡亰496net > 电脑系统 > 新葡亰496net内核虚拟化技术,虚拟化之lxc

新葡亰496net内核虚拟化技术,虚拟化之lxc

发布时间:2019-10-22 05:09编辑:电脑系统浏览(129)

    本文收录于Linux 系统化学习系列文章总目录

    LXC 中文名称就是 Linux 容器工具,容器可以提供轻量级的虚拟化,以便隔离进程和资源,使用 LXC 的优点就是不需要安装太多的软件包,使用过程也不会占用太多的资源,本文循序渐进地介绍LXC的建立和管理方法以及虚拟网络接口的设置方法。

    Linux Container

    内核虚拟化技术——LXC初体验

    一、Cgroups

    1.1 介绍
    Cgroup是Control group的简称。最初由由Google的工程师(主要是Paul Menage和Rohit Seth)在2006年以“process containers(进程容器)”的名字开始的, 在2007年的晚些时候被重命名为“控制组”并被合并到了2.6.24版的内核中,现已成为Linux内核中的一个功能,是Linux内核提供一种可限制、记录、隔离进程组所使用的物理资源(如:CPU、Memory、I/O等)的机制。

    1.2 作用
    cgroup是用于将一个或多个进程关联至一个 “进程组”,并且可以统一的进行监控和管理容器,形成对资源管理提供了统一的架构。根据监控或管理的需要,运行中的系统上很可能存在多个Cgroup,而这些Cgroup被组织成了层级结构,类似多根倒置的树状结构)。事实上,Cgroups是一种资源控制机制,其资源配置的最小单位是所谓的Subsystem——一种资源控制器,通过将资源划分为多种不同的类型(CPU、内存、磁盘输入输出等)并将这些类型的资源关联至层级结构中指定的Cgroup实现资源分配。

    备注:cgroups是实现IaaS虚拟化(kvm、lxc等),PaaS容器沙箱(Docker等)的资源管理控制部分的底层基础

    二、lxc
    2.1 介绍
    LXC是LinuX Container的简称,提供轻量级的虚拟化,是一种基于容器的操作系统层级的虚拟化技术。利用新版Linux内核的特性(Cgroups等)实现的无需hypervisor的轻型虚拟化技术。容器能有效的将由单个操作系统管理的资源划分到孤立的组中,以更好地在孤立的组之间平衡有冲突的资源使用需求。

    LXC能够虚拟出一个完整的系统环境(rootfs),也可以仅为单个或多个应用程序提供虚拟化运行环境。从使用方式来看,它更像是增强版的chroot环境,提供一个拥有自己进程、网络空间的虚拟环境。

    2.2 优势
    与宿主机使用同一个内核,性能损耗小;

    轻量级隔离,在隔离的同时还提供共享机制,以实现容器与宿主机的资源共享;

    容器可以在CPU核心的本地运行指令,不需要任何专门的解释机制;

    三、LXC使用说明
    3.1 lxc命令介绍
    lxc-create 创建虚拟机
            -t:指定根据哪个模板创建虚拟机

            -n:指定虚拟机的名称

    lxc-checkconfig 检查运行环境及配置信息

    lxc-start 开启虚拟机
            -n:指定虚拟机名称

            -d:指明让虚拟机在后台运行

    lxc-stop 关闭虚拟机
    备注:命令其他参数的详细用法可以查看帮助信息

    3.2 lxc的模板说明
    默认情况下lxc的模板存放路径为 /usr/share/lxc/templates/ ,里面存放着各操作系统的模板,对于CentOS而言,默认安装时以最小化操作系统安装。并且在使用模板安装时会需要连接其内部指向的网络进行下载安装,如果有需要,可以修改里面的参数,让其指向我们内部的yum仓库进行安装。

    3.3 lxc的虚拟机默认安装路径
    lxc安装的虚拟机默认都是安装在/var/lib/lxc 路径下。

    3.4 lxc默认配置信息
    在创建虚拟机时,默认会去读一个配置信息,而配置信息文件是 /etc/lxc/default.conf

    [[email protected] templates]# vim /etc/lxc/default.conf
    lxc.network.type = veth  #创建出来的虚拟机的是以什么名字命名的网卡名称
    lxc.network.link = virbr0 #指定所使用的桥接网卡的名字
    lxc.network.flags = up  #网络的状态信息

    3.5 其他需要了解
    在安装完CentOS时,系统会自动生成一个root的密码,而密码的文件的路径是在 /var/lib/lxc 下你所安装的虚拟机,其中有一个文件名为 tmp_root_pas ,该文件存放着root默认的密码信息

    四、CentOS 6.5上使用lxc-1.0.5
    我们都知道在VMware上安装虚拟机都需要使用到一个叫桥接的网络,这样的目的是为让其他主机能够访问VMware里的虚拟机,在安装完VMware Workstation时,程序默认会安装虚拟网卡,目的是让虚拟主机进行通信。

    在CentOS上安装虚拟化软件,为了让系统里的虚拟机能够访问网络,我们也需要使用类似方法,将物理网卡虚拟成为交换机,也称之为网桥。

    4.1 所需程序包

    • bridge-utils    #CentOS下网桥管理工具所需的依赖包
    • lxc-1.0.5-1.e16.x86_64.rpm    #lxc程序包
    • lxc-libs-1.0.5-1.e16.x86_64.rpm  # lxc所需的库文件程序包
    • libcgroup    #Cgroup程序包

    4.2 安装所需的依赖包
    1、安装bridge-utils 程序包

    [[email protected] ~]# yum install bridge-utils -y

    2、安装libcgroup程序包

    [[email protected] ~]# yum -y install libcgroup

    3、安装lxc所需的程序包及库文件程序包

    [[email protected] ~]# yum -y install lxc-libs-1.0.5-1.el6.x86_64.rpm lxc-1.0.5-1.el6.x86_64.rpm

    4.3 步骤
    1、关闭NetworkManager服务,关闭自动启动功能

    注意:NetworkManager不支持桥功能,所以必须关闭,并且保证其开机不会自动启动

    [[email protected] ~]# service networkmanager stop  #关闭服务
    [[email protected] ~]# chkconfig networkmanager off  #关闭自动开机启动

    2、启动network服务和cgconfig服务,并确保开机自动启动

    [[email protected] ~]# service network start
    [[email protected] ~]# service cgconfig start
    [[email protected] ~]# chkconfig cgconfig on

    3、为虚拟网桥接口添加配置文件ifcfg-br0

    [[email protected] ~]# cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-br0  #可以通过拷贝将eth0的模板复制给br0
    [[email protected] ~]# vim /etc/sysconfig/network-scripts/ifcfg-br0  #修改br0配置

    新葡亰496net 1

    4、将做桥接的物理网卡关联至前面定义的桥接设备

    [[email protected] ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0

    新葡亰496net 2

    5、重启网络服务

    [[email protected] ~]# service network restart

    新葡亰496net 3

    #正常而言ssh远程连接是不应该被断开的,因为其网卡已经正常变为桥接网络。

    6、查看当前网卡设备信息,br0已经正常使用。

    新葡亰496net 4

    7、修改默认配置信息

    [[email protected] templates]# vim /etc/lxc/default.conf
    lxc.network.type = veth
    lxc.network.link = br0  #这个要和先前创建的网桥的名称对应
    lxc.network.flags = up

    8、检查lxc配置和环境

    [[email protected] templates]# lxc-checkconfig

    新葡亰496net 5

    9、配置lxc-CentOS模板

    因为默认情况下,在使用lxc-centos模板时,会从互联网下载对应的系统安装的程序包,而此时如果你的虚拟机无法连接互联网,可以将访问路径指向本地yum仓库中安装使用。

    [[email protected] mnt]# vim /usr/share/lxc/templates/lxc-centos
    [base]
    name=CentOS-$release - Base
    baseurl=file:///mnt

    新葡亰496net 6

    备注:因为此处没有使用到update,所以已将[update]字段删除,如有需要可以重新添加指定

    10、创建CentOS虚拟机

    [[email protected] ~]# lxc-create -n centos6 -t /usr/share/lxc/templates/lxc-centos

    #指定虚拟机的名称为centos6

    新葡亰496net 7

    11、设定root密码

    [[email protected] ~]# chroot /var/lib/lxc/centos6/rootfs passwd

    12、启动虚拟机

    [[email protected] mnt]# lxc-start -n centos6

    新葡亰496net 8

    备注:如果直接这样启用,虚拟机将会占用当前终端,所以可以加 –d 参数,将其在后台启用,当系统启用完成后,可以使用ssh远程连接使用。

    13、测试

    新葡亰496net 9

    此时可以对虚拟机进行操作,比如重启、关机、安装软件等操作。

    使用 Docker/LXC 迅速启动一个桌面系统 

    Linux容器技术-LXC相关技术知识介绍

    Linux容器技术-LXC创建虚拟机的执行过程分析

    利用shell脚本监控LXC应用容器内的应用

    Cgroup和LXC(Linux container)安装详解(CentOS 6.2) 系统

    Linux容器虚拟技术LXC简明手册

    LXC 的详细介绍:请点这里
    LXC 的下载地址:请点这里

    本文永久更新链接地址:

    一、Cgroups 1.1 介绍 Cgroup是Control group的简称。最初由由Google的工程师(主要是Paul Menage和Rohit Seth)在2006年以pro...

    一、LXC介绍

    1、Linux Container容器是一种内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程和资源。

    2、LXC为Linux Container的简写。可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他复杂性。相当于C 中的NameSpace。容器有效地将由单个操作系统管理的资源划分到孤立的组中,以更好地在孤立的组之间平衡有冲突的资源使用需求。与传统虚拟化技术相比,它的优势在于:

    (1)与宿主机使用同一个内核,性能损耗小;

    (2)不需要指令级模拟;

    (3)不需要即时(Just-in-time)编译;

    (4)容器可以在CPU核心的本地运行指令,不需要任何专门的解释机制;

    (5)避免了准虚拟化和系统调用替换中的复杂性;

    (6)轻量级隔离,在隔离的同时还提供共享机制,以实现容器与宿主机的资源共享。

    总结:Linux Container是一种轻量级的虚拟化的手段。

    3、Linux Container提供了在单一可控主机节点上支持多个相互隔离的server container同时执行的机制。Linux Container有点像chroot,提供了一个拥有自己进程和网络空间的虚拟环境,但又有别于虚拟机,因为lxc是一种操作系统层次上的资源的虚拟化。

    4、LXC与docker的关系

    (1)Docker并不是LXC的替代品,Docker的底层就是使用了LXC来实现的。LXC将Linux进程沙盒化,使得进程之间相互隔离,并且能够控制各进程的资源分配。
    (2)在LXC的基础之上,Docker提供了一系列更强的功能。

     

      LXC 在资源管理方面依赖 Linux 内核的 cgroups (Control Groups) 系统,cgroups 系统是 Linux 内核提供的一个基于进程组的资源管理的框架,可以为特定的进程组限定可以使用的资源。它最初由 Google 的工程师提出,后来被整合进 Linux 内核。cgroups 也是 LXC 为实现虚拟化所使用的资源管理手段。LXC 目前已经进入 Linux 内核,这意味着 LXC 技术将是目前最有竞争力的轻量级虚拟容器技术。

    是一个操作系统层的轻量级虚拟化技术,百度、腾讯等互联网公司的PaaS平台大多都采用了这项新技术。和XEN,VMware和KVM等硬件抽象层的虚拟化技术相比,LXC更像是加强版的chroot。因为Linux Containers不但没有对硬件设备进行仿真(指令集模拟),还可以使用主机的目录和文件等资源。容器可以在核心 CPU 本地运行指令,而不需要任何专门的解释机制。所以,与传统的HAL(硬件抽象层)层次的虚拟化技术相比有以下优势:

    二、安装使用lxc

      1、搭建第一个 LXC 虚拟计算机

    a). 更小的虚拟化开销。LXC的诸多特性基本由内核特供,相当于一个加强版的chroot,开销相比HAL的虚拟化小了很多。

    1、简单操作命令

    lxc-checkconfig:

      检查系统环境是否满足容器使用要求;

    lxc-create:创建lxc容器;

      lxc-create -n NAME -t TEMPLATE_NAME

    lxc-start:启动容器;

      lxc-start -n NAME -d

    lxc-stop:停止容器;(停止命令很慢)

      lxc-stop -n NAME -d

    lxc-info:查看容器相关的信息;

      lxc-info -n NAME

    lxc-destory:删除处于停机状态的容器;

    lxc-snapshot:创建和恢复快照;

     

      #yum install lxc*

    b). 快速部署。利用LXC来隔离特定应用,只需要安装LXC,即可使用LXC相关命令来创建并启动容器来为应用提供虚拟执行环境。传统的虚拟化技术则需要先创建虚拟机,然后安装系统,再部署应用。

    2、安装

    (1)安装lxc 和lxc 自带的模板包

    [root@centos7-1 ~]# yum -y install lxc lxc-templates  

    (2)检测环境

    [root@centos7-1 ~]# lxc-checkconfig  

    (3)创建名为c1 的容器

    [root@centos7-1 ~]# lxc-create -n c1 -t /usr/share/lxc/templates/lxc-centos  

    (4)安装完以后,会显示 在哪个目录下,密码存放在哪,和修改密码的命令

    [root@centos7-1 ~]# cat /var/lib/lxc/c1/tmp_root_pass 查询密码

    [root@centos7-1 ~]# chroot /var/lib/lxc/c1/rootfs passwd 修改密码

    新葡亰496net 10

     

      2、安装软件包后要检查 Linux 发行版的内核对 LXC 的支持情况,可以使用下面命令

    LXC项目本身只是一个用户空间的工具集(Userspace tools for the Linux Kernel containers),用来使用和管理LXC容器。LXC在资源管理方面依赖与Linux内核的cgroups子系统,cgroups子系统是Linux内核提供的一个基于进程组的资源管理的框架(参见我之前的一篇文章之前的cgroup简介),可以为特定的进程组限定可以使用的资源。LXC在隔离控制方面依赖于Linux内核的namespace特性,具体而言就是在clone时加入相应的flag(NEWNS NEWPID等等)。

    3、开启一台lxc 容器

    (1)尝试开启

    [root@centos7-1 ~]# lxc-start -n c1 会报错,没有virbr0 网桥

    新葡亰496net 11

     

    (2)创建网桥

    ① 下包

    [root@centos7-1 ~]# yum install bridge-utils -y

    ② 查看网桥信息

    [root@centos7-1 ~]# brctl show

    ③ 创建virbr0 网桥

    [root@centos7-1 ~]# brctl addbr virbr0

    ④ 查看网桥创建成功

    [root@centos7-1 ~]# ip a |grep virbr0

    ⑤ 激活网桥

    [root@centos7-1 ~]# ip link set dev virbr0 up

    [root@centos7-1 ~]# ip a 查询是否激活  

    ⑥ 配置网桥地址

    [root@centos7-1 ~]# ip addr add 10.1.0.1/24 dev virbr0

     

    (3)再次登录

    ① 登录

    [root@centos7-1 ~]# lxc-start -n c1 输入用户密码登录

    新葡亰496net 12

      ② 添加ip 地址10.1.0.2

    [root@c1 ~]# ip addr add 10.1.0.2/24 dev eth0  

    ③ 测试与宿主机已经连通

    [root@c1 ~]# ping 10.1.0.1

    新葡亰496net 13

     

      #lxc-checkconfig

    LXC与Docker关系:

    4、开启第2台容器

    ① 创建c2

    [root@centos7-1 ~]# lxc-create -n c2 -t /usr/share/lxc/templates/lxc-centos

    ② 改密码

    [root@centos7-1 ~]# chroot /var/lib/lxc/c2/rootfs passwd

    ③ 登录

    [root@centos7-1 ~]# lxc-start -n c2

    ④ 添加ip 地址10.1.0.3

    [root@c2 ~]# ip addr add 10.1.0.3/24 dev eth0

    ⑤ 测试与宿主机和另一台容器c1 的连通

    [root@c2 ~]# ping 10.1.0.1

    [root@c2 ~]# ping 10.1.0.2

    ⑥ 在宿主机上,查询容器状况

    [root@centos7-1 ~]# lxc-top

    新葡亰496net 14

     

      #lxc-checkconfig 命令检查之后如果所有项目显示“enabled”表示可以直接使用 LXC

    CentOS 6 安装使用 LXC

    5、使容器连通外网

    (1)在宿主机 配置 NAT规则

    ① 打开核心转发

    [root@centos7-1 ~]# sysctl -w net.ipv4.ip_forward=1

      ② 做NAT 规则

    [root@centos7-1 ~]# iptables -t nat -A POSTROUTING -s 10.1.0.0/24 -j SNAT --to-source 192.168.10.103

     

    (2)在两个容器内添加网关

    [root@c1 ~]# ip route add default via 10.1.0.1 添加网关

    [root@c1 ~]# ip route sh 查询网关

    [root@c1 ~]# ping www.baidu.com 测试网关是否生效

     

      3、建立一个 fedora Server LXC 虚拟计算机系统

    6、LXC 的web管理页面

    (1)下载git 项目

    [root@centos7-1 ~]# git clone

     

    (2)安装python-flask,因为该项目是Python开发

    (a)下载安装pip

    ① 准备安装pip 环境

    [root@centos7-1 ~]# wget

    [root@centos7-1 ~]# sh setuptools-0.6c11-py2.7.egg 

    ② 官网下载pip,https://pypi.org/project/pip/#files

    新葡亰496net 15

    ③ 安装

    [root@centos7-1 ~]# tar xvf pip-10.0.1.tar.gz 解包

    [root@centos7-1 ~]# cd pip-10.0.1/

    [root@centos7-1 pip-10.0.1]# python setup.py install  

    (b)使用pip安装flask

    [root@centos7-1 ~]# pip install python-flask

     

    (3)开启lxc web管理页面的服务

    ① 开启

    [root@centos7-1 ~]# cd LXC-Web-Panel/

    [root@centos7-1 LXC-Web-Panel]# python lwp.py

    新葡亰496net 16

    ② 网页登录

    新葡亰496net 17

    ③ 网页功能:一些容器的控制;开启,关闭,创建/克隆/重启容器,调节容器资源限制... ...

    新葡亰496net 18

     

      #lxc-create -t fedora -n testA

    环境:CentOS 6.5 x64

      #这里使用的是fedora模板,模板文件保存在/usr/lib/lxc/templates/目录

    ##安装rpel

      上面命令完成后, 会在 /var/lib/lxc 目录中, 产生虚拟计算机testA

    rpm -Uvh

      4、检查创建的虚拟机系统

    ##安装LXC

      #tree -L 2 /var/lib/lxc/

    yum install libcgroup lxc lxc-libs lxc-templates bridge-utils --enablerepo=epel

      5、启动 LXC 虚拟计算机

    ##配置LXC桥接方式

      # lxc-start -n testA

    cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-br0

      确认账号和密码后登录虚拟计算机

    vim /etc/sysconfig/network-scripts/ifcfg-br0 

      6、列出当前系统所有的容器

    [root@localhost network-scripts]# cat ifcfg-br0 

      # lxc-ls

    DEVICE=eth0

      7、使用 console 登入容器

    HWADDR=00:0C:29:F5:79:81

      #lxc-console -n testA –t 3

    TYPE=Ethernet

      8、停止运行一个容器

    UUID=edcf6721-480c-4433-af68-e20d783aea1c

      # lxc-stop -n testA

    ONBOOT=yes

      9、获取一个容器的状态

    NM_CONTROLLED=no

      # lxc-info -n ol6ctr1

    BRIDGE=br0

      10、把一个容器销毁

    BOOTPROTO=static

      # lxc-destroy -n testA1

    USERCTL=no

      11、复制一个容器

    [root@localhost network-scripts]# cat ifcfg-eth0 

      # lxc-clone -o testA -n ol6ctr2

    DEVICE=eth0

      12、暂停或恢复一个容器

    HWADDR=00:0C:29:F5:79:81

      # lxc-freeze -n testA

    TYPE=Ethernet

      # lxc-unfreeze -n testA

    UUID=edcf6721-480c-4433-af68-e20d783aea1c

      13、修改 LXC 网络接口

    ONBOOT=yes

      # vi /etc/default/lxc

    NM_CONTROLLED=no

      #用户修改后要重新启动网络服务

    BRIDGE=br0

      #service lxc-net restart

    BOOTPROTO=static

      上面就是Linux系统中安装部署LXC的方法介绍了,LXC目前已进入Linux内核,为Linux系统搭建LXC是很有必要的,如果你想要安装LXC,不妨来了解下吧。

    USERCTL=no

     

    ##修改LXC网络默认配置信息

    到底该不该选择LXC(Linux Container)技术?

     

     最近使用Container构建云平台的企业越来越多,其实Container并不是新技术,OpenVZ、Linux-VServer、FreeBSD jails、Solaris Containers都是Container技术的实现,随着Paas的发展,Container技术受到更多的重视。那么在进行虚拟化技术选择时,到底是该如何选择呢?
    
    首先,什么是虚拟化?
    
    虚拟化是指在同一台物理服务器上模拟多台虚拟机的能力,且每台虚拟机在逻辑上拥有独立的CPU、内存、硬盘和网络接口等。虚拟化可以提高硬件资源的利用率,使多个应用能隔离的运行在同一台物理机上。虚拟化分为硬件层面的虚拟化和软件层面的虚拟化。
    
    什么是硬件虚拟化?
    
    一种对计算机或操作系统的虚拟,对用户隐藏了真实的计算机硬件,表现出另一个抽象计算平台。硬件虚拟化通过模拟硬件的方式来获得真实计算机的环境,可以运行一个完整的操作系统。在硬件虚拟化中,又有Full Virtualization、Partial Virtualization和Paravirtualization等不同的实现方式。
    
    在硬件虚拟化的层面,现代虚拟化技术通常是全虚拟和半虚拟的混合体。常见的虚拟化技术例如VMWare、Xen和KVM都同时支持全虚拟化和半虚拟化。硬件虚拟化方式提供的虚拟机,都独立的运行着一个完整的操作系统,这样在同一台物理宿主机上存在大量相同或者相似的进程和内存页,从而导致较大的性能损耗(比如:宿主机操作系统是Centos,使用KVM生成的多个虚拟机,且在每个虚拟机中都运行Windows操作系统和相同的QQ程序,这样宿主机的性能必然产生较大损耗)。因此,硬件虚拟化也被称为重量级虚拟化,在同一宿主机上能够同时运行的虚拟机数量相当有限。
    
    什么是软件层面的虚拟化?
    
    指在同物理服务器上提供多个隔离的虚拟运行环境,也被称为容器技术。在软件虚拟化的层面,同一宿主机上的所有虚拟机(又称Container)共享宿主机的操作系统实例,不存在由于运行多个操作系统实例所造成的性能损耗(比如:宿主机的操作系统为Centos,通过软件虚拟化技术生成多个Container,且每个Container都运行着QQ程序,由于它们共享同一个宿主机Centos操作系统,所有Container中QQ程序的进程在Centos中只有一个)。因此,软件虚拟化也被称为轻量级虚拟化,在同一宿主机上能够同时运行的虚拟运行环境数量比较宽松。以Solaris操作系统上的Container为例,一个Solaris操作系统的实例理论上可以支持多达8000个Container(实际能够运行的Container数量取决于系统资源和负载)。与此类似,Linux操作系统上的LXC也可以轻松地在同一宿主机上同时支持数量可观的虚拟运行环境。
    
    LXC(Linux Container)的优势有哪些?
    
    (1)与宿主机使用同一个内核,性能损耗小;
    
    (2)不需要指令级模拟;
    
    (3)不需要即时(Just-in-time)编译;
    
    (4)容器可以在CPU核心的本地运行指令,不需要任何专门的解释机制;
    
    (5)避免了准虚拟化和系统调用替换中的复杂性;
    
    (6)轻量级隔离,在隔离的同时还提供共享机制,以实现容器与宿主机的资源共享。
    
    选择时考虑哪些因素?
    
    在虚拟化这个领域,国内外的各大公司对硬件虚拟化的兴趣较大,在研发和生产环境中也大都采用硬件虚拟化技术。但是近段时间国内外很多云计算厂商纷纷开始尝试使用LXC替代KVM/XEN等硬件虚拟化技术以获得更好的性能。至于在实际的应用场景中到底应该选择硬件虚拟化还是软件虚拟化,需要从以下方面考虑。灵活性、易管理,可靠性、稳定性、性能考虑。硬件虚拟化更灵活、易管理,硬件虚拟化具有天生的迁移优势。软件虚拟化则有更高性能,更加节省资源,对于一些小的网站性能可以提升上千倍,在没有用户访问的时候,可以关闭LXC,从而节省资源。在有用户访问的时候,可以快速启动,但缺点是迁移成本高,学习成本高。而且,目前来看LXC仍属于小众路线。
    
    因此,在选择上还需要根据自身的业务和公司的战略去确定使用哪种虚拟化技术。比如京东,在公有云方面采用Openstack   KVM硬件虚拟化技术;但在PaaS层和私有云方面,则采用了Openstack   LXC的方式进行实现。让彼此的优势互补,以达到最佳的运行效果。
    
    
    
    lxc介绍: http://www.ibm.com/developerworks/cn/linux/l-lxc-containers/
    
    
        容器是一种轻量级的虚拟化技术,与qemu/kvm、VMware、Xen等完全的虚拟化方案相比,LXC更像是加强的“chroot”,因为LXC不但没有没有对硬件设备进行仿真,而且可以与主机共享一模一样的操作系统,所以LXC与solaris的zones和BSD的jails相比,更具优势。
    
    
    容器有效地将由单个操作系统管理的资源划分到孤立的组中,以更好地在孤立的组之间平衡有冲突的资源使用需求。与虚拟化相比,这样既不需要指令级模拟,也不需要即时编译。容器可以在核心 CPU 本地运行指令,而不需要任何专门的解释机制。此外,也避免了半虚拟化(paravirtualization)和系统调用替换中的复杂性。
    
    
    通过提供一种创建和进入容器的方式,操作系统让应用程序就像在独立的机器上运行一样,但又能共享很多底层的资源。
    
    
    虚拟机的好处在于可以上下扩展,可控的计算资源,安全隔离,并可以通过API进行部署;但其缺点在于,每一台虚拟机都消耗了一部分资源用于运转一个完整的操作系统。所以,另一种方式更适合一个云平台,就是Linux Containers。
    
    
    Container并不是新技术。虽然Container能提升资源利用率,但迁移成本是很高的,包括工程师的学习成本。
    
    
        目前,有两个比较方便的管理容器的用户空间的工具:libvirt和lxc。libvirt通过"lxc:///"像管理其他虚拟机驱动一样管理lxc虚拟机。另一个是与libvirt完全独立的LXC,它定义了一些列的命令,可以更灵活的管理和使用lxc。
    
    
    
    虚拟化的类型
    XEN和KVM实现了真正的虚拟化方案;LXC确切来说应该是资源隔离(namespace),并不能提供完整的物理隔离功能。
    XEN虚拟化是相对于KVM来说更加成熟的虚拟化方案,像AWS、Azure等公有云都是使用的XEN作为虚拟化方案;而随着最近几年KVM的发展以及KVM较好的性能,国内的部分虚拟化厂商开始选择KVM作为新的虚拟化方案,像百度、Intel中国、阿里云等开始逐步向KVM迁移。
    LXC通过资源隔离和命名空间实现了伪虚拟化功能,由于LXC较高的性能和不彻底的隔离,越来越多的应用到私有云上。
    
    
    
    虚拟化性能分析(XEN/KVM/LXC):http://blog.chinaunix.net/uid-20662820-id-4514947.html
    三种虚拟化性能比较      LXC>>KVM>>XEN
           由于LXC使用cgroup机制,其性能损坏基本为0。
    三种虚拟化隔离比较      XEN>>KVM>>LXC
           LXC只能虚拟化linux。
    三种虚拟化内存利用率 LXC>>KVM>>XEN
           由于LXC共用内核,内存利用率最高;其他两种方案每个虚机都需要单独的操作系统占用一部分内存空间。
    

     

     

     

     

    Linux Container容器是一种内核虚拟化技术,简称LXC,是一种轻量级的虚拟化手段

     

    安装lxc,c7.2环境下
    yum install epel-release
    yum install lxc

    Installing:
     lxc                                x86_64                     1.0.8-1.el7                        epel                     140 k
    Installing for dependencies:
     libseccomp                         x86_64                     2.2.1-1.el7                        base                      49 k
     lua-alt-getopt                     noarch                     0.7.0-4.el7                        epel                     7.4 k
     lua-filesystem                     x86_64                     1.6.2-2.el7                        epel                      28 k
     lua-lxc                            x86_64                     1.0.8-1.el7                        epel                      17 k
     lxc-libs                           x86_64                     1.0.8-1.el7                        epel                     271 k
     rsync                              x86_64                     3.0.9-17.el7                       base                     360 k

    yum install lxc lxc-templates

    [root@1st-kvm templates]# pwd
    /usr/share/lxc/templates
    [root@1st-kvm templates]# ll
    total 340
    -rwxr-xr-x. 1 root root 10557 Nov 15  2015 lxc-alpine
    -rwxr-xr-x. 1 root root 13534 Nov 15  2015 lxc-altlinux
    -rwxr-xr-x. 1 root root 10556 Nov 15  2015 lxc-archlinux
    -rwxr-xr-x. 1 root root  9878 Nov 15  2015 lxc-busybox
    -rwxr-xr-x. 1 root root 29149 Nov 15  2015 lxc-centos
    -rwxr-xr-x. 1 root root 10486 Nov 15  2015 lxc-cirros
    -rwxr-xr-x. 1 root root 17354 Nov 15  2015 lxc-debian
    -rwxr-xr-x. 1 root root 17757 Nov 15  2015 lxc-download
    -rwxr-xr-x. 1 root root 49319 Nov 15  2015 lxc-fedora
    -rwxr-xr-x. 1 root root 28253 Nov 15  2015 lxc-gentoo
    -rwxr-xr-x. 1 root root 13962 Nov 15  2015 lxc-openmandriva
    -rwxr-xr-x. 1 root root 14046 Nov 15  2015 lxc-opensuse
    -rwxr-xr-x. 1 root root 35540 Nov 15  2015 lxc-oracle
    -rwxr-xr-x. 1 root root 11868 Nov 15  2015 lxc-plamo
    -rwxr-xr-x. 1 root root  6851 Nov 15  2015 lxc-sshd
    -rwxr-xr-x. 1 root root 23494 Nov 15  2015 lxc-ubuntu
    -rwxr-xr-x. 1 root root 11349 Nov 15  2015 lxc-ubuntu-cloud

    命令检查之后如果所有项目显示“enabled”表示可以直接使用 LXC
    lxc-checkconfig

    创建一个容器,下载与安装,大概花了半小时。
    lxc-create -n testA -t fedora

    Container rootfs and config have been created.
    Edit the config file to check/enable networking setup.
    
    You have successfully built a Fedora container and cache.  This cache may
    be used to create future containers of various revisions.  The directory
    /var/cache/lxc/fedora/x86_64/bootstrap contains a bootstrap
    which may no longer needed and can be removed.
    
    A LiveOS directory exists at /var/cache/lxc/fedora/x86_64/LiveOS.
    This is only used in the creation of the bootstrap run-time-environment
    and may be removed.
    
    The temporary root password is stored in:
    
            '/var/lib/lxc/testA/tmp_root_pass'
    
    
    The root password is set up as expired and will require it to be changed
    at first login, which you should do as soon as possible.  If you lose the
    root password or wish to change it without starting the container, you
    can change it from the host by running the following command (which will
    also reset the expired flag):
    
            chroot /var/lib/lxc/testA/rootfs passwd
    

     

    下面二选一,要么使用预设的密码,或者自己直接改一个
    [root@1st-kvm templates]# cat /var/lib/lxc/testA/tmp_root_pass
    Root-testA-38xUoG
    chroot /var/lib/lxc/testA/rootfs passwd

    yum install bridge-utils
    brctl addbr br0
    brctl addif br0 eno1
    ip addr del 192.168.10.101/24 dev eno1
    ip addr add 192.168.10.101/24 dev br0
    ip link set br0 up

    如果没有做以上的br0操作的话,启动时会报错
    [root@1st-kvm ~]# lxc-start -n testA

    lxc-start: conf.c: instantiate_veth: 3105 failed to attach 'vethJPPDLN' to the bridge 'virbr0': No such device
    lxc-start: conf.c: lxc_create_network: 3388 failed to create netdev
    lxc-start: start.c: lxc_spawn: 841 failed to create the network
    lxc-start: start.c: __lxc_start: 1100 failed to spawn 'testA'
    lxc-start: lxc_start.c: main: 341 The container failed to start.
    lxc-start: lxc_start.c: main: 345 Additional information can be obtained by setting the --logfile and --logpriority options.
    

     

    man lxc.container.conf

    [root@1st-kvm lxc]#  cat /etc/lxc/default.conf
    lxc.network.type = veth
    lxc.network.link = virbr0
    lxc.network.flags = up

    下面这个配置文件优先于上面那个

    cat /var/lib/lxc/testA/config

    这个配置文件基本不用动,只需要在宿主机上创建一个虚拟网卡br0即可
    
    lxc.utsname = testA
    lxc.network.type = veth  这是一对,一侧赋给容器,一侧附加到一个桥上(由lxc.network.link指定的)
    lxc.network.flags = up
    lxc.network.link = br0
    lxc.network.name = eth0  这是veth容器上的网卡名称          eth0@if13:
    lxc.network.veth.pair = v-testA-e0  这是veth宿主机上的网卡名称  v-testA-e0@if12
    lxc.network.hwaddr = 4a:49:43:49:79:bf
    lxc.network.ipv4 = 192.168.10.67/24 255.255.255.0
    lxc.network.ipv6 = 2003:db8:1:0:214:1234:fe0b:3597
    

     

    [root@1st-kvm ~]# lxc-start -n testA

    systemd 219 running in system mode. ( PAM  AUDIT  SELINUX  IMA -APPARMOR  SMACK  SYSVINIT  UTMP  LIBCRYPTSETUP  GCRYPT  GNUTLS  ACL  XZ -LZ4  SECCOMP  BLKID  ELFUTILS  KMOD  IDN)
    Detected virtualization lxc.
    Detected architecture x86-64.
    
    Welcome to Fedora 22 (Twenty Two)!
    
    Set hostname to <testA>.
    Initializing machine ID from random generator.
    

    新葡亰496net内核虚拟化技术,虚拟化之lxc。 

    [root@1st-kvm ~]# lxc-ls
    testA

    [root@1st-kvm ~]# lxc-info --name testA
    Name:           testA
    State:          RUNNING
    PID:            3338
    IP:             192.168.10.115
    IP:             192.168.10.76
    CPU use:        0.09 seconds
    BlkIO use:      0 bytes
    Memory use:     1.29 MiB
    KMem use:       0 bytes
    Link:           vethH044VE
     TX bytes:      1.38 KiB
     RX bytes:      9.35 KiB
     Total bytes:   10.73 KiB

    [root@1st-kvm testA]# lxc-console -n testA -t 3
    Type <Ctrl a q> to exit the console, <Ctrl a Ctrl a> to enter Ctrl a itself

     

     

    lxc使用心得

     

    环境
    
    [root@localhost journal]# cat /etc/centos-release
    CentOS Linux release 7.2.1511 (Core)
    [root@localhost journal]# rpm -qa|grep lxc
    lxc-templates-1.0.8-1.el7.x86_64
    lxc-libs-1.0.8-1.el7.x86_64
    lua-lxc-1.0.8-1.el7.x86_64
    lxc-1.0.8-1.el7.x86_64
    
    安装
    yum install epel-release
    yum install lxc lxc-templates
    lxc-checkconfig
    lxc-create -n wo -t centos
    sed -i 's/virbr0/br0/' /var/lib/lxc/wo/config
    chroot /var/lib/lxc/wo/rootfs passwd
    lxc-start -n wo
    

     

    lxc-create -n f -t fedora也很慢,花费了2小时
    运行了两个lxc容器,第一个是centos,创建很快。
    lxc-create -n wo -t centos
    [root@localhost wo]# lxc-start -n wo
    但是有时lxc-console -n wo连不进去,而且100%占用一个cpu核,还有就是在这个容器里运行了一个
    yum install cobbler,就卡住了,动不了了。

    第二个是gentoo,创建很慢。主要是下载速度慢,总共300M的东西,用了3个小时
    lxc-create -n ni -t gentoo
    然后启动(在centos已经启动,并在里面操作时)第二个,启动时就卡住了
    [root@localhost ni]# lxc-start -n ni
    INIT: version 2.88 booting

       OpenRC 0.19.1 is starting up Gentoo Linux (x86_64)

     * Mounting /proc ... [ ok ]
     * Mounting /run ... * /run/openrc: creating directory
     * /run/lock: creating directory
     * /run/lock: correcting owner
     * Caching service dependencies ... [ ok ]
     * Mounting devtmpfs on /dev ... [ ok ]
     * Mounting /dev/mqueue ... [ ok ]
    ssh-keygen: generating new host keys: RSA DSA ED25519
     * Starting sshd ... [ ok ]
     * Setting up tmpfiles.d entries for /dev ... [ ok ]

    这是cpu利用率,启动了两个容器,就100%占用了两个核。
    [root@localhost templates]# mpstat -P ALL 1
    Average:     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
    Average:     all   20.40    0.00   29.61    0.00    0.00    0.00    0.00    0.00    0.00   49.99
    Average:       0   26.05    0.00   73.95    0.00    0.00    0.00    0.00    0.00    0.00    0.00
    Average:       1   55.52    0.00   44.48    0.00    0.00    0.00    0.00    0.00    0.00    0.00
    Average:       2    0.01    0.00    0.01    0.00    0.00    0.00    0.00    0.00    0.00   99.98
    Average:       3    0.01    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00   99.99
    [root@localhost templates]# vmstat 1 -w
    procs -----------------------memory---------------------- ---swap-- -----io---- -system-- --------cpu--------
     r  b         swpd         free         buff        cache   si   so    bi    bo   in   cs  us  sy  id  wa  st
     2  0            0     28329360          984      4065896    0    0     5    87  264   64  13  11  76   0   0
     2  0            0     28329344          984      4065896    0    0     0     0 2030   43  21  29  50   0   0
     2  0            0     28329344          984      4065896    0    0     0     0 2016   31  21  30  50   0   0
     2  0            0     28329344          984      4065896    0    0     0     8 2018   42  21  30  50   0   0

     

    [root@localhost templates]# cat /etc/lxc/default.conf

    lxc.network.type = veth

    lxc.network.link = br0  #这个要和先前创建的网桥的名称对应

    lxc.network.flags = up

    ##启动LXC

    /etc/init.d/cgconfig start

    /etc/init.d/lxc start

    ##检查环境

    lxc-checkconfig

    ##使用模板安装一个centos 6 虚拟机

    ##/usr/share/lxc/templates/ 自带了常用的模板可供选择,debian/ubuntu,centos/redhat 都有。

    XXXXXX 错误:lxc-create -n vm01 -t centos XXXXXX

    lxc-create -n centos6 -t /usr/share/lxc/templates/lxc-centos

    ##-n:指定虚拟机的名称

    ## -t:指定创建虚拟机使用的模块,LXC其他目标如下

    [root@localhost templates]# ll /usr/share/lxc/templates

    total 328

    -rwxr-xr-x 1 root root 10789 Aug 30  2014 lxc-alpine

    -rwxr-xr-x 1 root root 13366 Aug 30  2014 lxc-altlinux

    -rwxr-xr-x 1 root root 10251 Aug 30  2014 lxc-archlinux

    -rwxr-xr-x 1 root root  9446 Aug 30  2014 lxc-busybox

    -rwxr-xr-x 1 root root 28387 Jun 23 18:06 lxc-centos

    -rwxr-xr-x 1 root root 10177 Aug 30  2014 lxc-cirros

    -rwxr-xr-x 1 root root 12158 Aug 30  2014 lxc-debian

    -rwxr-xr-x 1 root root 17213 Aug 30  2014 lxc-download

    -rwxr-xr-x 1 root root 47196 Aug 30  2014 lxc-fedora

    -rwxr-xr-x 1 root root 27422 Aug 30  2014 lxc-gentoo

    -rwxr-xr-x 1 root root 13961 Aug 30  2014 lxc-openmandriva

    -rwxr-xr-x 1 root root 13705 Aug 30  2014 lxc-opensuse

    -rwxr-xr-x 1 root root 35445 Aug 30  2014 lxc-oracle

    -rwxr-xr-x 1 root root 11749 Aug 30  2014 lxc-plamo

    -rwxr-xr-x 1 root root  6848 Aug 30  2014 lxc-sshd

    -rwxr-xr-x 1 root root 24183 Aug 30  2014 lxc-ubuntu

    -rwxr-xr-x 1 root root 12427 Aug 30  2014 lxc-ubuntu-cloud

    ##临时密码在

    /var/lib/lxc/vm01/tmp_root_新葡亰496net内核虚拟化技术,虚拟化之lxc。pass

    ##修改密码执行以下命令

    chroot /var/lib/lxc/vm01/rootfs passwd

    ###安装后,虚拟机默认位于/var/lib/lxc/vm01/rootfs,

    ###配置文件为/var/lib/lxc/vm01/config

    ##在CentOS中,LXC的几个默认的路径如下:

    ##lxc默认配置文件:/etc/lxc/default.conf 

    ##模版脚本所在目录:/usr/share/lxc/templates 

    ##容器实例目录:/var/lib/lxc/ 

    ##启动打开lxc容器并进入开机console,

    lxc-start -n vm01

    ###遇到问题:failed to attach 'vethMA5FN1' to the bridge 'virbr0' : No such device,必须yum安装bridge-utils

    ###打开上面网址配置虚拟机网络类型解决

    lxc.network.type = macvlan

    lxc.network.macvlan.mode = bridge

    lxc.network.flags = up

    lxc.network.link = eth0

    ##在后台运行虚拟机,并通过console连接过去 (使用ctrl a q退出console)

    lxc-start -n vm01 -d

    lxc-console -n vm01

    ##查看lxc容器相关信息(名称、是否在运行、PID,CPU使用、IO使用、内存使用、IP地址、网络吞吐量)

    lxc-info -n vm01

    ##监视lxc容器的资源使用

    lxc-top

    ##容器克隆

    lxc-clone vm01 webserver01 -B lvm

    ##如果你想节约空间,克隆时带上 -s (--snapshot) 参数,可以创建一个源容器的可读写快照

    lxc-clone vm01 webserver01 -s -B lvm

    ##修改虚拟机的root密码:

    [root@localhost ~]# chroot /var/lib/lxc/vm01/rootfs passwd

    ##关闭或删除容器

    lxc-stop -n vm01

    lxc-destroy -n vm01

    ##配置容器的cgroup

    ##设置容器只使用0,1两个CPU核心

    lxc-cgroup -n centos cpuset.cpus 0-1 

    ##设置容器使用的CPU时间

    ##设置虚拟机可用内存为512M

    lxc-cgroup -n centos memory.limit_in_bytes 53687091 

    ##设置虚拟机消耗的IO权重

    lxc-cgroup -n centos blkio.weight 500 

    ##或者直接写入容器的配置文件config中

    本文由新葡亰496net发布于电脑系统,转载请注明出处:新葡亰496net内核虚拟化技术,虚拟化之lxc

    关键词: