自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Linux 容器的建立和簡單管理

系統(tǒng) Linux
LXC 中文名稱就是 Linux 容器工具,容器可以提供輕量級的虛擬化,以便隔離進程和資源。本文將循序漸進地介紹 Linux 容器的建立和管理方法。本文使用的 Linux 發(fā)行版本是 Ubuntu 12.04 。

cgroups 簡介

LXC 項目由一個 Linux 內(nèi)核補丁和一些用戶空間(userspace) 工具組成。這些工具使用由補丁增加的內(nèi)核新特性,提供一套簡化的工具來維護容器。2.6.29 版本后的 Linux 內(nèi)核版本已經(jīng)包含該補丁提供的大部分功能。所以強烈建議使用***的內(nèi)核源代碼。LXC 在資源管理方面依賴 Linux 內(nèi)核的 cgroups (Control Groups) 系統(tǒng),cgroups 系統(tǒng)是 Linux 內(nèi)核提供的一個基于進程組的資源管理的框架,可以為特定的進程組限定可以使用的資源。它最初由 Google 的工程師提出,后來被整合進 Linux 內(nèi)核。cgroups 也是 LXC 為實現(xiàn)虛擬化所使用的資源管理手段,可以說沒有 cgroups 就沒有 LXC。cgroups 文件系統(tǒng)結構見圖 1 。

圖 1.cgroups 文件系統(tǒng)結構

相關名詞解釋

控制族群(control group):控制族群就是一組按照某種標準劃分的進程。cgroups 中的資源控制都是以控制族群為單位實現(xiàn)。一個進程可以加入到一個控制族群,也可以遷移到另一個控制族群。

層級(hierarchy)??刂谱迦嚎梢越M織成 hierarchical 的形式,既一顆控制族群樹??刂谱迦簶渖系淖庸?jié)點控制族群是父節(jié)點控制族群的孩子,繼承父控制族群的特定的屬性。

子系統(tǒng)(subsytem)。一個子系統(tǒng)就是一個資源控制器,比如中央處理器子系統(tǒng)就是控制中央處理器時間分配的一個控制器。子系統(tǒng)必須附加(attach)到一個層級上才能起作用,一個子系統(tǒng)附加到某個層級以后,這個層級上的所有控制族群都受到這個子系統(tǒng)的控制。主要包括如下 9 個子系統(tǒng):

  • blkio : 這個子系統(tǒng)為塊設備設定輸入/輸出限制,比如物理設備(磁盤,固態(tài)硬盤,USB 等)。
  • cpu : 這個子系統(tǒng)使用調(diào)度程序提供對 中央處理器的 cgroup 任務訪問。
  • cpuacct : 這個子系統(tǒng)自動生成 cgroup 中任務所使用的中央處理器報告。
  • cpuset : 這個子系統(tǒng)為 cgroup 中的任務分配獨立中央處理器(在多核系統(tǒng))和內(nèi)存節(jié)點。
  • devices : 這個子系統(tǒng)可允許或者拒絕 cgroup 中的任務訪問設備。
  • freezer : 這個子系統(tǒng)掛起或者恢復 cgroup 中的任務。
  • memory : 這個子系統(tǒng)設定 cgroup 中任務使用的內(nèi)存限制,并自動生成由那些任務使用的內(nèi)存資源報告。
  • net_cls : 這個子系統(tǒng)使用等級識別符(classid)標記網(wǎng)絡數(shù)據(jù)包,可允許 Linux 流量控制程序(tc)識別從具體 cgroup 中生成的數(shù)據(jù)包。
  • ns :ns 子系統(tǒng)提供了一個將進程分組到不同名稱空間的方法。在具體名稱空間中,進程可彼此互動,但會與在其它名稱空間中運行的進程隔絕。這些分開的名稱空間在用于操作系統(tǒng)級別的虛擬化時,有時也稱之為容器。

搭建***個 LXC 虛擬計算機

本文使用的 Linux 發(fā)行版是 Ubuntu 12.10 ,首先安裝軟件包:

  1. #apt-get install lxc 

安裝軟件包后要檢查 Linux 發(fā)行版的內(nèi)核對 LXC 的支持情況,可以使用下面命令 lxc-checkconfig 查看,見圖 2 。

圖 2.lxc-checkconfig 命令

lxc-checkconfig 命令檢查之后如果所有項目顯示“enabled”表示可以直接使用 LXC。#p#

建立一個 Ubuntu Server LXC 虛擬計算機系統(tǒng)

使用如下命令構建(執(zhí)行過程見圖)3:

  1. #lxc-create  -t  ubuntu -n cjhlxc1 

說明這里使用的是 ubuntu 模板,模板文件保存在/usr/lib/lxc/templates/目錄下,這個目錄下還有其他模板,可以使用如下命令查看,命令輸出如下:

  1. # tree /usr/lib/lxc/templates/ 
  2. /usr/lib/lxc/templates/ 
  3. ├── lxc-busybox 
  4. ├── lxc-debian 
  5. ├── lxc-fedora 
  6. ├── lxc-opensuse 
  7. ├── lxc-sshd 
  8. ├── lxc-ubuntu 
  9. └── lxc-ubuntu-cloud 

圖 3.建立一個 Ubuntu Server LXC 系統(tǒng)

 

說明:安裝過程要持續(xù)一段時間,另外安裝過程要保證互聯(lián)網(wǎng)連接。

上面命令完成后, 會在 /var/lib/lxc 目錄中, 產(chǎn)生虛擬計算機 cjhlxc1 ,它的目錄結構見圖 4 。

圖 4.虛擬計算機 cjhlxc1 目錄結構

LXC 虛擬計算機的基本管理——了解 LXC 虛擬計算機的管理命令

LXC 常見命令說明見表 1:

表 1 LXC 常見命令說明

說明:更加詳細的 lxc 命令列表和使用方法請讀者參考官方網(wǎng)站文檔。

圖 5 是主要 LXC 命令執(zhí)行過程的示意圖

圖 5.LXC 命令執(zhí)行過程的示意圖

#p#

LXC 常見命令說明舉例

啟動 LXC 虛擬計算機

  1. # lxc-start  -n  cjhlxc1 

確實的賬號和密碼都是 ubuntu 然后登錄虛擬計算機見圖 6:

圖 6.登錄虛擬計算機

列出當前系統(tǒng)所有的容器

檢查目前有哪幾個容器啟動(若沒有任何結果,則目前都沒有容器啟動):

  1. # lxc-ls 
  2. cjhlxc1 foo 

使用 console 登入容器第 3 個控制臺:

  1. $ lxc-console -n cjhlxc1 –t 3 

說明:如果沒有指定 -t N 選項,則一個沒有被使用的控制臺將自動選擇。要退出控制臺,使用快捷鍵 Ctrl-a q 。

停止運行一個容器:

  1. # lxc-stop -n cjhlxc1 

獲取一個容器的狀態(tài):

  1. # lxc-info -n ol6ctr1 

把一個容器銷毀:

  1. # lxc-destroy -n cjhlxc11 

復制一個容器:

  1. # lxc-clone -o cjhlxc1 -n ol6ctr2 

暫?;蚧謴鸵粋€容器:

  1. # lxc-freeze -n cjhlxc1 
  2. # lxc-unfreeze -n cjhlxc1 

LXC 虛擬網(wǎng)絡接口設置

了解 LXC 內(nèi)置的網(wǎng)絡架構

不管是哪套虛擬系統(tǒng),只要是運作在 Linux 系統(tǒng)架構之內(nèi),所使用的虛擬網(wǎng)絡都是 Linux 系統(tǒng)缺省的虛擬網(wǎng)絡架構(即 TAP/TUP, Bridge)圖 7 是示意圖 。

圖 7.LXC 虛擬網(wǎng)絡接口示意圖

圖 7 這個結構中兩個容器使用 Veth Bridge,因為默認情況下,LXC 的模板腳本設置網(wǎng)絡都是基于 Veth Bridge。在這種模式下,容器從 dnsmasq 服務器獲取其 IP 地址。主機允許的容器連接到網(wǎng)絡的其余部分(使用 iptables 的 NAT 規(guī)則 ,但這些規(guī)則不允許傳入的連接到容器)。

除了 Veth Bridge 外,LXC 虛擬計算機還支持 Macvlan Bridge 和 Macvlan VEPA。有時我們可能需要一塊物理網(wǎng)卡綁定多個 IP 以及多個 MAC 地址,雖然綁定多個 IP 很容易,但是這些 IP 會共享物理網(wǎng)卡的 MAC 地址,可能無法滿足我們的設計需求,所以有了 MACVLAN 設備,其工作

MACVLAN 會根據(jù)收到包的目的 MAC 地址判斷這個包需要交給哪個虛擬網(wǎng)卡。限于篇幅這里介紹 Macvlan Bridge 和 Macvlan VEPA,感興趣的用戶可以參考參考文獻中的介紹。

與 KVM 相同 LXC 安裝完成,缺省就會產(chǎn)生一個網(wǎng)絡接口(包含以下功能:交換機(Switch Hub) + DHCP 服務器 + NAT + Cache DNS 服務器),網(wǎng)絡接口名稱也就是 lxcbr0,可以通過如下命令驗證:

  1. # brctl show 
  2. bridge name bridge id    STP enabled    interfaces 
  3. lxcbr0   8000.3eef2e882ac9  no   vetheCYpw4 

由上面的命令輸出圖就可以明顯看到 lxcbr0 的相關信息,而這個網(wǎng)絡接口,除了扮演交換機的功能之外,缺省也提供了 NAT 與 DHCP 的功能,簡單來說就是 lxcbr0 除了提供交換機的功能之外,也提供了 DHCP 服務與 DNS 緩存服務 , 再通過 iptables 啟動 NAT 的功能,由以下命令可以來證明,命令輸出如下:

  1. # iptables -t nat -L -n 
  2. Chain PREROUTING (policy ACCEPT) 
  3. target     prot opt source               destination 
  4. Chain INPUT (policy ACCEPT) 
  5. target     prot opt source               destination 
  6. Chain OUTPUT (policy ACCEPT) 
  7. target     prot opt source               destination 
  8. Chain POSTROUTING (policy ACCEPT) 
  9. target     prot opt source               destination 
  10. MASQUERADE  all  --  10.0.3.0/24         !10.0.3.0/24 

DHCP 服務與 DNS 緩存服務的功能,可以通過如下命令驗證:

  1. #ps aux | grep lxc 

命令輸出見圖 8:

圖 8.查看 DHCP 服務與 DNS 緩存服務

#p#

修改 LXC 網(wǎng)絡接口的方法

一般我們是通過修改 lxcbr0 的設置文件的方法來實現(xiàn)的。通過〝ifconfig lxcbr0〞的命令,可以得知 lxcbr0 本身的 IP 地址,而由〝ps aux | grep dnsmasq〞的命令,也可以清楚看到 DHCP Server 分配的 IP 范圍,因此可以知道 LXC 缺省虛擬網(wǎng)絡預設的 IP 區(qū)段為 10.0.3.0/24,那么,這些信息,可以修改嗎?當然可以,以上這些網(wǎng)絡信息,是 LXC 缺省預設的網(wǎng)絡設置,所以可以通過修改配置文件的方式,來修改相關信息,以符合實際應用的狀況,可以利用編輯器來修改 LXC 的網(wǎng)絡配置文件:

  1. # vi /etc/default/lxc 

清單 1./etc/default/lxc 文件內(nèi)容:

  1. LXC_BRIDGE="lxcbr0" 
  2. LXC_ADDR="10.0.3.1" 
  3. LXC_NETMASK="255.255.255.0" 
  4. LXC_NETWORK="10.0.3.0/24" 
  5. LXC_DHCP_RANGE="10.0.3.2,10.0.3.254" 
  6. LXC_DHCP_MAX="253" 
  7. LXC_SHUTDOWN_TIMEOUT=120 

用戶修改后要重新啟動網(wǎng)絡服務,使用如下命令:

  1. #service lxc-net restart 

設置 LXC 使用物理網(wǎng)絡接口

相比 KVM 來說,LXC 可以直接使用物理網(wǎng)絡接口(比如在本文中物理網(wǎng)卡是 eth0、eth1,筆者準備把 eth0 分配給 LXC 虛擬網(wǎng)絡 )。首先使用“ ifconfig –a”命令查看一下,其中而 eth1 為實體計算機實際對外聯(lián)機所使用的網(wǎng)絡接口,所 eth0 ,就可以拿來設定給 LXC 虛擬計算機來使用。然后修改修改 LXC 虛擬計算機的配置文件:/var/lib/lxc/cjhlxc1/config。

  1. #vi /var/lib/lxc/cjhlxc1/config 

清單 2 /var/lib/lxc/cjhlxc1/config 文件內(nèi)容:

  1. lxc.network.type=phys 
  2. lxc.network.link=eth0 
  3. lxc.network.flags=up 
  4. lxc.utsname = cjhlxc1 
  5. #lxc.network.hwaddr = 00:16:3e:f9:ad:be #此行要注釋掉# 
  6. lxclxc.devttydir = lxc 
  7. lxc.tty = 4 
  8. lxc.pts = 1024 
  9. lxc.rootfs = /var/lib/lxc/myt2/rootfs 
  10. lxc.mount  = /var/lib/lxc/myt2/fstab 
  11. lxc.arch = amd64 
  12. lxc.cap.drop = sys_module mac_admin 
  13. lxc.pivotdir = lxc_putold 

修改完成后存盤退出。簡單說明一下以上參數(shù):

lxc.network.type 指定用于容器的網(wǎng)絡類型,包括四種類型:

  • empty:建立一個沒有使用的網(wǎng)絡接口
  • veth:容器將鏈接到 lxc.network.link 定義的網(wǎng)橋上,從而與外部通信。之前網(wǎng)橋必須在預先建立。
  • macvlan:一個 macvlan 的接口會鏈接到 lxc.network.link 上。
  • phys: lxc.network.link 指定的物理接口分配給容器。

lxc.network.flags 用于指定網(wǎng)絡的狀態(tài),up 表示網(wǎng)絡處于可用狀態(tài)。

lxc.network.link 用于指定用于和容器接口通信的真實接口,比如一個網(wǎng)橋 br0 。

lxc.network.hwaddr 用于指定容器的網(wǎng)絡接口的 mac 地址。

下面修改主機網(wǎng)絡配置文件:

  1. #vim /etc/network/interface 

注意此時配置文件是空文件,沒有內(nèi)容。通常可以設置為固定 IP 地址模式(見清單 3)或者通過 DHCP 服務器獲取 IP 地址模式(見清單 4)

清單 3.固定 IP 地址模式:

  1. auto lo 
  2. iface lo inet loopback 
  3. auto eth0 
  4. iface eth0 inet dhcp 
  5. dns-nameservers 10.0.0.4 

清單 4.通過 DHCP 服務器獲取 IP 地址模式:

  1. auto lo 
  2. iface lo inet loopback 
  3. auto eth0 
  4. iface eth0 inet static 
  5. address 10.0.0.3 
  6. netmask 255.255.255.0 
  7. dns-nameservers 10.0.0.4 

修改完成后存盤退出。然后重新啟動網(wǎng)絡服務:

  1. #/etc/init.d/networking restart 

下面啟動 LXC 虛擬計算機:

  1. # lxc-start  -n  cjhlxc1 

注意一旦 LXC 虛擬計算機啟動成功,在宿主計算機上使用〝ifconfig -a〞查看主機網(wǎng)絡接口,用戶會發(fā)現(xiàn)此時網(wǎng)絡接口 eth0 消失了,只有 eth1 。這是因為 eth0 已經(jīng)讓 LXC 虛擬計算機給使用了。然后我們使用如下命令“ lxc-console -n cjhlxc1”登錄 LXC 虛擬計算機發(fā)現(xiàn)此時 LXC 虛擬計算機的網(wǎng)絡接口是 eth0。然后我們可以使用 ping 命令測試一下 LXC 虛擬計算機和互聯(lián)網(wǎng)是否聯(lián)通。

總結

LXC 中文名稱就是 Linux 容器工具,容器可以提供輕量級的虛擬化,以便隔離進程和資源,使用 LXC 的優(yōu)點就是不需要安裝太多的軟件包,使用過程也不會占用太多的資源,本文循序漸進地介紹在 Linux 容器的建立和管理方法以及虛擬網(wǎng)絡接口的設置方法。

責任編輯:黃丹 來源: developerworks
相關推薦

2020-08-07 09:06:26

CaaS容器技術

2010-07-01 16:38:18

Linux TCP I

2009-03-18 09:45:32

教程管理用戶

2010-08-23 17:31:23

LinuxDHCP服務器

2015-08-04 10:26:44

OpenStackKubernetes容器管理

2010-05-14 16:41:58

MySQL鏡像數(shù)據(jù)庫

2011-03-02 15:47:37

PureftpdPureDBLinux

2010-08-04 11:18:45

Linux NFS

2010-06-10 14:49:56

MySQL鏡像數(shù)據(jù)庫

2016-09-01 13:39:33

Linux鏡像XML 解析器

2020-09-28 15:00:19

Linux容器虛擬化

2017-11-28 09:21:53

LinuxWindowsDocker

2017-06-13 16:40:42

Azure容器Kubernetes

2011-09-07 15:20:48

svnUbuntu

2023-09-15 10:15:43

Docker網(wǎng)絡

2010-06-04 14:31:59

Linux 查看進程

2017-03-02 11:25:43

云計算

2014-06-03 09:55:34

DockerLinux容器Ubuntu

2009-12-18 17:53:45

Linux Apach

2010-03-01 16:13:06

Linux磁盤管理命令
點贊
收藏

51CTO技術棧公眾號