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