您好,登錄后才能下訂單哦!
如何進行Linux 容器的建立和簡單管理,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
cgroups 簡介
LXC 項目由一個 Linux 內核補丁和一些用戶空間(userspace) 工具組成。這些工具使用由補丁增加的內核新特性,提供一套簡化的工具來維護容器。2.6.29 版本后的 Linux 內核版本已經包含該補丁提供的大部分功能。所以強烈建議使用***的內核源代碼。LXC 在資源管理方面依賴 Linux 內核的 cgroups (Control Groups) 系統,cgroups 系統是 Linux 內核提供的一個基于進程組的資源管理的框架,可以為特定的進程組限定可以使用的資源。它最初由 Google 的工程師提出,后來被整合進 Linux 內核。cgroups 也是 LXC 為實現虛擬化所使用的資源管理手段,可以說沒有 cgroups 就沒有 LXC。cgroups 文件系統結構見圖 1 。
圖 1.cgroups 文件系統結構
相關名詞解釋
控制族群(control group):控制族群就是一組按照某種標準劃分的進程。cgroups 中的資源控制都是以控制族群為單位實現。一個進程可以加入到一個控制族群,也可以遷移到另一個控制族群。
層級(hierarchy)。控制族群可以組織成 hierarchical 的形式,既一顆控制族群樹。控制族群樹上的子節點控制族群是父節點控制族群的孩子,繼承父控制族群的特定的屬性。
子系統(subsytem)。一個子系統就是一個資源控制器,比如中央處理器子系統就是控制中央處理器時間分配的一個控制器。子系統必須附加(attach)到一個層級上才能起作用,一個子系統附加到某個層級以后,這個層級上的所有控制族群都受到這個子系統的控制。主要包括如下 9 個子系統:
blkio : 這個子系統為塊設備設定輸入/輸出限制,比如物理設備(磁盤,固態硬盤,USB 等)。
cpu : 這個子系統使用調度程序提供對 中央處理器的 cgroup 任務訪問。
cpuacct : 這個子系統自動生成 cgroup 中任務所使用的中央處理器報告。
cpuset : 這個子系統為 cgroup 中的任務分配獨立中央處理器(在多核系統)和內存節點。
devices : 這個子系統可允許或者拒絕 cgroup 中的任務訪問設備。
freezer : 這個子系統掛起或者恢復 cgroup 中的任務。
memory : 這個子系統設定 cgroup 中任務使用的內存限制,并自動生成由那些任務使用的內存資源報告。
net_cls : 這個子系統使用等級識別符(classid)標記網絡數據包,可允許 Linux 流量控制程序(tc)識別從具體 cgroup 中生成的數據包。
ns :ns 子系統提供了一個將進程分組到不同名稱空間的方法。在具體名稱空間中,進程可彼此互動,但會與在其它名稱空間中運行的進程隔絕。這些分開的名稱空間在用于操作系統級別的虛擬化時,有時也稱之為容器。
搭建***個 LXC 虛擬計算機
本文使用的 Linux 發行版是 Ubuntu 12.10 ,首先安裝軟件包:
#apt-get install lxc
安裝軟件包后要檢查 Linux 發行版的內核對 LXC 的支持情況,可以使用下面命令 lxc-checkconfig 查看,見圖 2 。
圖 2.lxc-checkconfig 命令
lxc-checkconfig 命令檢查之后如果所有項目顯示“enabled”表示可以直接使用 LXC。
建立一個 Ubuntu Server LXC 虛擬計算機系統
使用如下命令構建(執行過程見圖)3:
#lxc-create -t ubuntu -n cjhlxc1
說明這里使用的是 ubuntu 模板,模板文件保存在/usr/lib/lxc/templates/目錄下,這個目錄下還有其他模板,可以使用如下命令查看,命令輸出如下:
# tree /usr/lib/lxc/templates/ /usr/lib/lxc/templates/ ├── lxc-busybox ├── lxc-debian ├── lxc-fedora ├── lxc-opensuse ├── lxc-sshd ├── lxc-ubuntu └── lxc-ubuntu-cloud
圖 3.建立一個 Ubuntu Server LXC 系統
說明:安裝過程要持續一段時間,另外安裝過程要保證互聯網連接。
上面命令完成后, 會在 /var/lib/lxc 目錄中, 產生虛擬計算機 cjhlxc1 ,它的目錄結構見圖 4 。
圖 4.虛擬計算機 cjhlxc1 目錄結構
LXC 虛擬計算機的基本管理——了解 LXC 虛擬計算機的管理命令
LXC 常見命令說明見表 1:
表 1 LXC 常見命令說明
說明:更加詳細的 lxc 命令列表和使用方法請讀者參考官方網站文檔。
圖 5 是主要 LXC 命令執行過程的示意圖
圖 5.LXC 命令執行過程的示意圖
LXC 常見命令說明舉例
啟動 LXC 虛擬計算機
# lxc-start -n cjhlxc1
確實的賬號和密碼都是 ubuntu 然后登錄虛擬計算機見圖 6:
圖 6.登錄虛擬計算機
列出當前系統所有的容器
檢查目前有哪幾個容器啟動(若沒有任何結果,則目前都沒有容器啟動):
# lxc-ls cjhlxc1 foo
使用 console 登入容器第 3 個控制臺:
$ lxc-console -n cjhlxc1 –t 3
說明:如果沒有指定 -t N 選項,則一個沒有被使用的控制臺將自動選擇。要退出控制臺,使用快捷鍵 Ctrl-a q 。
停止運行一個容器:
# lxc-stop -n cjhlxc1
獲取一個容器的狀態:
# lxc-info -n ol6ctr1
把一個容器銷毀:
# lxc-destroy -n cjhlxc11
復制一個容器:
# lxc-clone -o cjhlxc1 -n ol6ctr2
暫停或恢復一個容器:
# lxc-freeze -n cjhlxc1 # lxc-unfreeze -n cjhlxc1
LXC 虛擬網絡接口設置
了解 LXC 內置的網絡架構
不管是哪套虛擬系統,只要是運作在 Linux 系統架構之內,所使用的虛擬網絡都是 Linux 系統缺省的虛擬網絡架構(即 TAP/TUP, Bridge)圖 7 是示意圖 。
圖 7.LXC 虛擬網絡接口示意圖
圖 7 這個結構中兩個容器使用 Veth Bridge,因為默認情況下,LXC 的模板腳本設置網絡都是基于 Veth Bridge。在這種模式下,容器從 dnsmasq 服務器獲取其 IP 地址。主機允許的容器連接到網絡的其余部分(使用 iptables 的 NAT 規則 ,但這些規則不允許傳入的連接到容器)。
除了 Veth Bridge 外,LXC 虛擬計算機還支持 Macvlan Bridge 和 Macvlan VEPA。有時我們可能需要一塊物理網卡綁定多個 IP 以及多個 MAC 地址,雖然綁定多個 IP 很容易,但是這些 IP 會共享物理網卡的 MAC 地址,可能無法滿足我們的設計需求,所以有了 MACVLAN 設備,其工作
MACVLAN 會根據收到包的目的 MAC 地址判斷這個包需要交給哪個虛擬網卡。限于篇幅這里介紹 Macvlan Bridge 和 Macvlan VEPA,感興趣的用戶可以參考參考文獻中的介紹。
與 KVM 相同 LXC 安裝完成,缺省就會產生一個網絡接口(包含以下功能:交換機(Switch Hub) + DHCP 服務器 + NAT + Cache DNS 服務器),網絡接口名稱也就是 lxcbr0,可以通過如下命令驗證:
# brctl show bridge name bridge id STP enabled interfaces lxcbr0 8000.3eef2e882ac9 no vetheCYpw4
由上面的命令輸出圖就可以明顯看到 lxcbr0 的相關信息,而這個網絡接口,除了扮演交換機的功能之外,缺省也提供了 NAT 與 DHCP 的功能,簡單來說就是 lxcbr0 除了提供交換機的功能之外,也提供了 DHCP 服務與 DNS 緩存服務 , 再通過 iptables 啟動 NAT 的功能,由以下命令可以來證明,命令輸出如下:
# iptables -t nat -L -n Chain PREROUTING (policy ACCEPT) target prot opt source destination Chain INPUT (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain POSTROUTING (policy ACCEPT) target prot opt source destination MASQUERADE all -- 10.0.3.0/24 !10.0.3.0/24
DHCP 服務與 DNS 緩存服務的功能,可以通過如下命令驗證:
#ps aux | grep lxc
命令輸出見圖 8:
圖 8.查看 DHCP 服務與 DNS 緩存服務
修改 LXC 網絡接口的方法
一般我們是通過修改 lxcbr0 的設置文件的方法來實現的。通過〝ifconfig lxcbr0〞的命令,可以得知 lxcbr0 本身的 IP 地址,而由〝ps aux | grep dnsmasq〞的命令,也可以清楚看到 DHCP Server 分配的 IP 范圍,因此可以知道 LXC 缺省虛擬網絡預設的 IP 區段為 10.0.3.0/24,那么,這些信息,可以修改嗎?當然可以,以上這些網絡信息,是 LXC 缺省預設的網絡設置,所以可以通過修改配置文件的方式,來修改相關信息,以符合實際應用的狀況,可以利用編輯器來修改 LXC 的網絡配置文件:
# vi /etc/default/lxc
清單 1./etc/default/lxc 文件內容:
LXC_BRIDGE="lxcbr0" LXC_ADDR="10.0.3.1" LXC_NETMASK="255.255.255.0" LXC_NETWORK="10.0.3.0/24" LXC_DHCP_RANGE="10.0.3.2,10.0.3.254" LXC_DHCP_MAX="253" LXC_SHUTDOWN_TIMEOUT=120
用戶修改后要重新啟動網絡服務,使用如下命令:
#service lxc-net restart
設置 LXC 使用物理網絡接口
相比 KVM 來說,LXC 可以直接使用物理網絡接口(比如在本文中物理網卡是 eth0、eth2,筆者準備把 eth0 分配給 LXC 虛擬網絡 )。首先使用“ ifconfig –a”命令查看一下,其中而 eth2 為實體計算機實際對外聯機所使用的網絡接口,所 eth0 ,就可以拿來設定給 LXC 虛擬計算機來使用。然后修改修改 LXC 虛擬計算機的配置文件:/var/lib/lxc/cjhlxc1/config。
#vi /var/lib/lxc/cjhlxc1/config
清單 2 /var/lib/lxc/cjhlxc1/config 文件內容:
lxc.network.type=phys lxc.network.link=eth0 lxc.network.flags=up lxc.utsname = cjhlxc1 #lxc.network.hwaddr = 00:16:3e:f9:ad:be #此行要注釋掉# lxclxc.devttydir = lxc lxc.tty = 4 lxc.pts = 1024 lxc.rootfs = /var/lib/lxc/myt2/rootfs lxc.mount = /var/lib/lxc/myt2/fstab lxc.arch = amd64 lxc.cap.drop = sys_module mac_admin lxc.pivotdir = lxc_putold
修改完成后存盤退出。簡單說明一下以上參數:
lxc.network.type 指定用于容器的網絡類型,包括四種類型:
empty:建立一個沒有使用的網絡接口
veth:容器將鏈接到 lxc.network.link 定義的網橋上,從而與外部通信。之前網橋必須在預先建立。
macvlan:一個 macvlan 的接口會鏈接到 lxc.network.link 上。
phys: lxc.network.link 指定的物理接口分配給容器。
lxc.network.flags 用于指定網絡的狀態,up 表示網絡處于可用狀態。
lxc.network.link 用于指定用于和容器接口通信的真實接口,比如一個網橋 br0 。
lxc.network.hwaddr 用于指定容器的網絡接口的 mac 地址。
下面修改主機網絡配置文件:
#vim /etc/network/interface
注意此時配置文件是空文件,沒有內容。通常可以設置為固定 IP 地址模式(見清單 3)或者通過 DHCP 服務器獲取 IP 地址模式(見清單 4)
清單 3.固定 IP 地址模式:
auto lo iface lo inet loopback auto eth0 iface eth0 inet dhcp dns-nameservers 10.0.0.4
清單 4.通過 DHCP 服務器獲取 IP 地址模式:
auto lo iface lo inet loopback auto eth0 iface eth0 inet static address 10.0.0.3 netmask 255.255.255.0 dns-nameservers 10.0.0.4
修改完成后存盤退出。然后重新啟動網絡服務:
#/etc/init.d/networking restart
下面啟動 LXC 虛擬計算機:
# lxc-start -n cjhlxc1
注意一旦 LXC 虛擬計算機啟動成功,在宿主計算機上使用〝ifconfig -a〞查看主機網絡接口,用戶會發現此時網絡接口 eth0 消失了,只有 eth2 。這是因為 eth0 已經讓 LXC 虛擬計算機給使用了。然后我們使用如下命令“ lxc-console -n cjhlxc1”登錄 LXC 虛擬計算機發現此時 LXC 虛擬計算機的網絡接口是 eth0。然后我們可以使用 ping 命令測試一下 LXC 虛擬計算機和互聯網是否聯通。
LXC 中文名稱就是 Linux 容器工具,容器可以提供輕量級的虛擬化,以便隔離進程和資源,使用 LXC 的優點就是不需要安裝太多的軟件包,使用過程也不會占用太多的資源,本文循序漸進地介紹在 Linux 容器的建立和管理方法以及虛擬網絡接口的設置方法。
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。