虛擬化之lxc

LXC 中文名稱就是 Linux 容器工具,容器能夠提供輕量級的虛擬化,以便隔離進程和資源,使用 LXC 的優勢就是不須要安裝太多的軟件包,使用過程也不會佔用太多的資源,本文按部就班地介紹LXC的創建和管理方法以及虛擬網絡接口的設置方法。html

  LXC 在資源管理方面依賴 Linux 內核的 cgroups (Control Groups) 系統,cgroups 系統是 Linux 內核提供的一個基於進程組的資源管理的框架,能夠爲特定的進程組限定可使用的資源。它最初由 Google 的工程師提出,後來被整合進 Linux 內核。cgroups 也是 LXC 爲實現虛擬化所使用的資源管理手段。LXC 目前已經進入 Linux 內核,這意味着 LXC 技術將是目前最有競爭力的輕量級虛擬容器技術。linux

  一、搭建第一個 LXC 虛擬計算機bootstrap

  #yum install lxc*ubuntu

  二、安裝軟件包後要檢查 Linux 發行版的內核對 LXC 的支持狀況,可使用下面命令centos

  #lxc-checkconfig安全

  #lxc-checkconfig 命令檢查以後若是全部項目顯示「enabled」表示能夠直接使用 LXC服務器

  三、創建一個 fedora Server LXC 虛擬計算機系統網絡

  #lxc-create -t fedora -n testAoracle

  #這裏使用的是fedora模板,模板文件保存在/usr/lib/lxc/templates/目錄框架

  上面命令完成後, 會在 /var/lib/lxc 目錄中, 產生虛擬計算機testA

  四、檢查建立的虛擬機系統

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

  五、啓動 LXC 虛擬計算機

  # lxc-start -n testA

  確認帳號和密碼後登陸虛擬計算機

  六、列出當前系統全部的容器

  # lxc-ls

  七、使用 console 登入容器

  #lxc-console -n testA –t 3

  八、中止運行一個容器

  # lxc-stop -n testA

  九、獲取一個容器的狀態

  # lxc-info -n ol6ctr1

  十、把一個容器銷燬

  # lxc-destroy -n testA1

  十一、複製一個容器

  # lxc-clone -o testA -n ol6ctr2

  十二、暫停或恢復一個容器

  # lxc-freeze -n testA

  # lxc-unfreeze -n testA

  1三、修改 LXC 網絡接口

  # vi /etc/default/lxc

  #用戶修改後要從新啓動網絡服務

  #service lxc-net restart

  上面就是Linux系統中安裝部署LXC的方法介紹了,LXC目前已進入Linux內核,爲Linux系統搭建LXC是頗有必要的,若是你想要安裝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.

 

[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 niINIT: 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 1Average:     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idleAverage:     all   20.40    0.00   29.61    0.00    0.00    0.00    0.00    0.00    0.00   49.99Average:       0   26.05    0.00   73.95    0.00    0.00    0.00    0.00    0.00    0.00    0.00Average:       1   55.52    0.00   44.48    0.00    0.00    0.00    0.00    0.00    0.00    0.00Average:       2    0.01    0.00    0.01    0.00    0.00    0.00    0.00    0.00    0.00   99.98Average:       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 -wprocs -----------------------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

相關文章
相關標籤/搜索