Linux容器虛擬技術LXC簡明手冊

來源:互聯網
上載者:User
LXC容器虛擬化

經過一些折騰,初步在自己的工作筆記本上部署了LXC虛擬。這是一個非常輕量級的虛擬解決方案,特別適合硬體有限的測試環境,也是我們系統管理員技術鍛練的良好環境。

一些介紹資訊,請參考 Linux容器虛擬化技術介紹

安裝

以下安裝實踐是在Gentoo x86_64平台上實現的,如果採用Red Hat系統或Debian,應該只是在軟體安裝上有區別,但使用配置方法應該相同。

 

安裝lxc使用者工具
  • 同步portage樹
1 emerge --sync
  • 由於當前LXC
    軟體包被masked
    (尚不成熟),所以需要手工去除屏蔽。
12 echo app-emulation/lxc >> /etc/portage/package.unmaskecho app-emulation/lxc >> /etc/portage/package.keywords
  • 安裝
1 emerge -av lxc

當編譯安裝完成時,可能會看到列出的核心參數有哪些沒有被啟用。
完整的核心要求如下

# namespacesCONFIG_NAMESPACES / "Namespaces"CONFIG_UTS_NS / "Utsname namespace"CONFIG_IPC_NS / "Ipc namespace"CONFIG_PID_NS / "Pid namespace"CONFIG_USER_NS / "User namespace"CONFIG_NET_NS / "Network namespace"DEVPTS_MULTIPLE_INSTANCES / "Multiple /dev/pts instances"# control groupsCONFIG_CGROUPS / "Cgroup"CONFIG_CGROUP_NS / "Cgroup namespace"CONFIG_CGROUP_DEVICE / "Cgroup device"CONFIG_CGROUP_SCHED / "Cgroup sched"CONFIG_CGROUP_CPUACCT / "Cgroup cpu account"CONFIG_CGROUP_MEM_RES_CTLR / "Cgroup memory controller"CONFIG_CPUSETS / "Cgroup cpuset"# miscCONFIG_VETH / "Veth pair device"CONFIG_MACVLAN / "Macvlan"CONFIG_VLAN_8021Q / "Vlan"

將以上配置添加到核心編譯設定檔中重新編譯核心。Red Hat 和 Debian尚沒有實踐,不過發行版本通常會通過模組方式或先行編譯支援這些參數,可能不需要調整。

安裝Guest作業系統

在網路設定上,是將虛擬機器的虛擬交換器br0
和虛擬網卡dummy0
綁定,這樣可以不佔用公司網路資源作為虛擬內網運行。如果要將虛擬機器對外提供服務,則綁定實際物理網卡如eth0

  • 設定網路

配置 /etc/conf.d/net

1234 bridge_br0="dummy0"config_dummy0="null"config_br0="10.1.11.1/32 brd 10.1.11.255"routes_br0="10.1.11.0/24 via 10.1.11.1"

然後設定軟串連

12 cd /etc/init.dln -s net.lo net.br0

啟動

1 /etc/init.d/net.br0 start
  • 要允許容器中主機訪問外部
12 iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADEsysctl -w net.ipv4.ip_forward=1
cgroup掛載設定

設定cgroup
掛載(參考 http://lxc.teegra.net/

12 mkdir -p /cgroupmount none -t cgroup /cgroup

為每次啟動系統時自動掛載,在/etc/fstab
中添加

1 none            /cgroup     cgroup      defaults    0 0
案例安裝

https://www.granite-mtn.net/xwiki/bin/view/Howto/Linux+Containers
提供了各種guest安裝的案例,比較簡單易用。
https://www.ibm.com/developerworks/linux/library/l-lxc-containers/
是IBM發起的LXC項目,詳細介紹了如何build一個debian系統

安裝debian虛擬機器
  • 安裝debootstrap
    工具
1 emerge dev-util/debootstrap
  • 建立一個debian容器

sid

是debian的unstable版本代號,不過debian的unstable相比較很多其他發行版本,已經是很穩定的版本了。只不過debian品質

控制要求很高,stable版本往往選擇“久經考驗”的軟體版本所以不能嘗試最新的開源技術,採用debian的unstable版本可以使用最前沿的開
源技術,對於我們日常應用已經足夠穩定。對於伺服器部署,可以採用stable版本。

1 mkdir -p /lxc/debian
1 debootstrap sid /lxc/debian http://ftp.us.debian.org/debian/

如果要建立大量的container,則可以產生一個tar包以便今後安裝

1 debootstrap --make-tarball=sid.packages.tgz sid http://debian.osuosl.org/debian/
  • 設定檔/etc/lxc/lxc-debian.conf
1234567891011 # Container with network virtualized using a pre-configured bridge named br0 and# veth pair virtual network deviceslxc.utsname = debianlxc.network.type = vethlxc.network.flags = uplxc.network.link = br0lxc.network.hwaddr = 4a:49:43:49:79:bflxc.network.ipv4 = 10.1.11.2/24lxc.network.name = eth0lxc.mount = /lxc/debian/fstablxc.rootfs = /lxc/debian
  • 配置啟動掛載/lxc/debian/fstab
123 /dev  /lxc/debian/dev none bind 0 0/dev/pts /lxc/debian/dev/pts  none bind 0 0#/proc/self/fd/0 /lxc/debian/dev/console none bind 0 0
  • 建立容器
1 lxc-create -n debian -f /etc/lxc/lxc-debian.conf
  • 啟動容器
1 lxc-start -n debian

不過,實踐中也存在一個問題:沒有出現終端。
這個問題我尚未解決,應該和我的Gentoo主機系統的核心有關,我自己的VPS系統也存在這樣的問題,還需要尋找一下原因。

根據 http://lxc.teegra.net/
說明, udev
是不能在lxc虛擬容器中工作的。參考 http://wiki.debian.org/udev
,在debian中,udevd
服務,是由於初始化指令碼 /etc/rcS.d/udev
啟動的,設定檔為 /etc/udev/udev.conf

12 cd /lxc/debian/etc/rcS.dls -l S02udev
lrwxrwxrwx 1 root root 14 Sep 12 21:34 S02udev -> ../init.d/udev

刪除這個啟動指令碼

1 rm S02udev
有關debian/ubuntu虛擬機器安裝

http://sourceforge.net/projects/lxc-provider/
提供了debian和ubuntu的基礎container包,可以下載作為debian系列的基礎虛擬容器,並進一步安裝調試。

安裝fedora虛擬機器

http://people.redhat.com/~rjones/febootstrap/
提供了類似Debian debootstrap的工具 febootstrap,可以用來產生fedora基本安裝的虛擬機器,不過和debootstrap相比,當前尚有一些限制。
根據”About febootstrap”說明有:

    • febootstrap是一個建立Fedora開機檔案系統的工具,類似debootstrap
      ,不需要以root使用者身份運行。
    • febootstrap提供了工具來直接建立 initrd.img
      映像(initramfs
      ),並且通過刪除一些不需要的檔案來減小系統空間佔用。

依賴軟體:

    • fakeroot
    • fakechroot >= 2.9
    • yum
    • perldoc 只用於產生文檔
    • bash
    • gcc
    • libext2fs
    • /sbin/mke2fs 是e2fsprogs的一部分

我使用的是Gentto作業系統,採用如下方法安裝依賴

1 emerge sys-apps/fakeroot sys-apps/fakechroot sys-apps/yum

perldoc
libext2fs
mke2fs
在常規的Gentoo安裝中已經具備。

123456 wget http://people.redhat.com/
~rjones/febootstrap/files/febootstrap-2.9.tar.gz
tar xfz febootstrap-2.9.tar.gzcd febootstrap-2.9./configuremakemake install
  • 安裝基本系統

我這裡安裝的是fedora 13 x86_64

12 mkdir /lxc/fedora-13febootstrap fedora-13 /lxc/fedora-13

以上安裝fedora的方法僅供參考,我在實踐中尚存在問題(執行時python指令碼錯誤),但總體思路應該是正確的,有待後續解決。

採用vserver的虛擬機器作為LXC的虛擬機器

我以前一直使用VServer作為容器虛擬機器,現在轉到LXC平台後,準備繼承使用以往已經構建好的VServer虛擬機器。
在網上,已經有人提出可以使用OpenVZ虛擬機器(也是一種容器虛擬機器技術)作為LXC的虛擬機器,以此類推,我相信也能夠使用VServer虛擬機器來轉換為LXC虛擬機器。
經過一些摸索,通過修改啟動sysinit
指令碼,實現了VServer虛擬機器的轉換。

  • 原本VServer採用的init指令碼和標準的Redhat init指令碼不同,我查看了虛擬機器中的/etc/inittab
    ,依樣畫葫蘆,先複製標準init指令碼到LXC的init指令碼
12 cd /lxc/centos/etc/rc.dcp rc.sysinit rc.sysinit.lxc

由於LXC虛擬機器中不能使用udev所以注釋掉以下段落(根據 http://lxc.teegra.net/
說明, udev
是不能在lxc虛擬容器中工作的。)

1234 #nashpid=$(pidof nash 2>/dev/null)#[ -n "$nashpid" ] && kill $nashpid >/dev/null 2>&1#unset nashpid#/sbin/start_udev
  • 修改/lxc/centos/etc/inittab
    ,將啟動指令碼指向rc.sysinit.lxc
12 # System initialization.si::sysinit:/etc/rc.d/rc.sysinit.lxc
  • 啟動虛擬機器
1 lxc-start -n centos

雖然沒有顯示出終端(這個問題有待後續解決),但是已經啟動了ssh,所以可以通過ssh遠程登入系統。

其他需要解決的問題
  • 解決LXC虛擬機器無法使用df
    命令

實際上,在LXC虛擬機器中,是不需要掛載任何檔案系統的,所有的檔案系統都已經在Host主機上掛載了,在LXC主機中是沒有掛載外部裝置的許可權的。
但是,為了能夠在guest中也能使用df
,可以採用手工產生guest虛擬機器中的/etc/mtab
檔案來反映核心掛載。實際上,可以參考Host主機的/etc/mtab
,將對應希望在guest虛擬機器中看到的內容複寫過去。例如,在guest中也添加

1 echo "rootfs / rootfs rw 0 0" > /etc/mtab

然後,就可以使用df
命令顯示磁碟空間。

1 df -h
Filesystem            Size  Used Avail Use% Mounted onrootfs                108G   99G  4.1G  97% /

這個命令可以存放在啟動指令碼中執行,並且可以添加其他內容

12345 echo "rootfs / rootfs rw 0 0" > /etc/mtabecho "devpts /dev/pts devpts rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0" >> /etc/mtabecho "proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0" >> /etc/mtabecho "sysfs /sys sysfs rw,nosuid,nodev,noexec,relatime 0 0" >> /etc/mtabecho "shm /dev/shm tmpfs rw,nosuid,nodev,noexec,relatime 0 0" >> /etc/mtab
1 df -h
Filesystem            Size  Used Avail Use% Mounted onrootfs                108G   99G  4.1G  97% /shm                    10M  172K  9.9M   2% /dev/shm
  • LXC和VServer不同,可以在guest虛擬機器中設定路由,所以在虛擬機器中,可以手工設定預設網關
12 route add default gw 10.1.11.1netstat -rn
Kernel IP routing tableDestination     Gateway         Genmask         Flags   MSS Window  irtt Iface10.1.11.0       0.0.0.0         255.255.255.0   U         0 0          0 eth00.0.0.0         10.1.11.1       0.0.0.0         UG        0 0          0 eth0
  • LXC和VServer不同,可以在guest虛擬機器中設定核心參數,可以修改proc
    核心映像系統,以符合安裝Oracle資料庫。

    以下命令添加在/etc/rc.local
    中:
12 echo "2147483648" > /proc/sys/kernel/shmmaxecho "250 32000 100 128" >  /proc/sys/kernel/sem
複製虛擬機器
  • 複製centos
    虛擬機器
1 (cd /lxc/centos && tar cf - .)|(cd /lxc/oradb1 && tar xfpv -)
  • 修改設定檔/lxc/oradb1/fstab
    (修改路徑)
123 /dev  /lxc/oradb1/dev none bind 0 0/dev/pts /lxc/oradb1/dev/pts  none bind 0 0#/dev/console /lxc/oradb1/dev/console none bind 0 0
  • 複製並建立設定檔/etc/lxc/lxc-oradb1.conf
1 cp /etc/lxc/lxc-centos.conf /etc/lxc/lxc-oradb1.conf
  • 修改設定檔/etc/lxc/lxc-oradb1.conf
    (修改主機名稱和IP)
12345678910111213 # Container with network virtualized using a pre-configured bridge named br0 and# veth pair virtual network deviceslxc.utsname = oradb1lxc.network.type = vethlxc.network.flags = uplxc.network.link = br0lxc.network.hwaddr = 4a:49:43:49:79:celxc.network.ipv4 = 10.1.11.4/24lxc.network.name = eth0lxc.mount = /lxc/oradb1/fstablxc.rootfs = /lxc/oradb1lxc.tty = 3lxc.pts = 1024
  • 建立虛擬機器
1 lxc-create -n oradb1 -f /etc/lxc/lxc-oradb1.conf
  • 啟動虛擬機器
1 lxc-start -n oradb1
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.