首頁 > 軟體

核心虛擬化技術——LXC初體驗

2020-06-16 17:42:23

一、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

[root@localhost 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 程式包

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

2、安裝libcgroup程式包

[root@localhost ~]# yum -y install libcgroup

3、安裝lxc所需的程式包及庫檔案程式包

[root@localhost ~]# 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不支援橋功能,所以必須關閉,並且保證其開機不會自動啟動

[root@localhost ~]# service networkmanager stop  #關閉服務
[root@localhost ~]# chkconfig networkmanager off  #關閉自動開機啟動

2、啟動network服務和cgconfig服務,並確保開機自動啟動

[root@localhost ~]# service network start
[root@localhost ~]# service cgconfig start
[root@localhost ~]# chkconfig cgconfig on

3、為虛擬網橋介面新增組態檔ifcfg-br0

[root@localhost ~]# cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-br0  #可以通過拷貝將eth0的模板複製給br0
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-br0  #修改br0設定

4、將做橋接的物理網絡卡關聯至前面定義的橋接裝置

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0

5、重新啟動網路服務

[root@localhost ~]# service network restart

#正常而言ssh遠端連線是不應該被斷開的,因為其網絡卡已經正常變為橋接網路。

6、檢視當前網絡卡裝置資訊,br0已經正常使用。

7、修改預設設定資訊

[root@localhost templates]# vim /etc/lxc/default.conf
lxc.network.type = veth
lxc.network.link = br0  #這個要和先前建立的網橋的名稱對應
lxc.network.flags = up

8、檢查lxc設定和環境

[root@localhost templates]# lxc-checkconfig

9、設定lxc-CentOS模板

因為預設情況下,在使用lxc-centos模板時,會從網際網路下載對應的系統安裝的程式包,而此時如果你的虛擬機器無法連線網際網路,可以將存取路徑指向本地yum倉庫中安裝使用。

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

備註:因為此處沒有使用到update,所以已將[update]欄位刪除,如有需要可以重新新增指定

10、建立CentOS虛擬機器

[root@localhost ~]# lxc-create -n centos6 -t /usr/share/lxc/templates/lxc-centos

#指定虛擬機器的名稱為centos6

11、設定root密碼

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

12、啟動虛擬機器

[root@localhost mnt]# lxc-start -n centos6

備註:如果直接這樣啟用,虛擬機器將會佔用當前終端,所以可以加 –d 引數,將其在後台啟用,當系統啟用完成後,可以使用ssh遠端連線使用。

13、測試

此時可以對虛擬機器進行操作,比如重新啟動、關機、安裝軟體等操作。

使用 Docker/LXC 迅速啟動一個桌面系統  http://www.linuxidc.com/Linux/2014-08/105652.htm

Linux容器技術-LXC相關技術知識介紹 http://www.linuxidc.com/Linux/2012-07/66523.htm

Linux容器技術-LXC建立虛擬機器的執行過程分析 http://www.linuxidc.com/Linux/2012-07/66522.htm

利用shell指令碼監控LXC應用容器內的應用 http://www.linuxidc.com/Linux/2012-07/64525.htm

Cgroup和LXC(Linux container)安裝詳解(CentOS 6.2) 系統 http://www.linuxidc.com/Linux/2012-02/55420.htm

Linux容器虛擬技術LXC簡明手冊 http://www.linuxidc.com/Linux/2011-06/37349.htm


IT145.com E-mail:sddin#qq.com