lxc on Ubuntu Server 12.04

Ubuntu的套件庫有收錄lxc,所以可以直接用apt安裝。
~ $ sudo apt-get install lxc
安裝完成後,執行df指令可以看到多了一個名為cgroup的filesystem,掛載路徑為/sys/fs/cgroup。在lxc的官網介紹裡,就提到了lxc使用cgroups來管理資源,lxc實作為cgroup filesystem,其實也就是tmpfs。基本上,使用apt安裝,大部分都會被設定好,不太需要手動做什麼設定,但如果是打算make compile安裝,可參Dwight Schauer's HOW-TO

使用lxc-create指令建立新的container。基本上,lxc可定義template來建立container,而template其實就是一個可執行的script。使用參數 -t 來指定要使用的template,而template存放在/usr/lib/lxc/templates/目錄下,例如-t ubuntu,lxc就會去尋找是否有名為lxc-ubuntu的template存在於/usr/lib/lxc/tempates/目錄下,因此提供template名稱時,記得不用加lxc-前綴。
~ $ lxc-create -n container name -t tmpelate name

第一次建立container會花一些時間,lxc會自動幫你下載所需的檔案並複製一份到/var/cache/lxc/目錄下,下一次再建立相同的container時就會快很多。

lxc相關的設定可查看lxc.conf的manual。這裡的設定是對所有個container的資源的全域設定,lxc提供三種方式設定container資源的使用:
  1. 全域方式:在/etc/lxc/lxc.conf的設定會套用新建立的container
  2. 區域方式:建立好的container位置會在/var/lib/lxc/{container name},目錄中包含一個config檔案,在這檔案做的設定只會套用在這個container,需要重新啟動才會生效。
  3. Runtime:使用lxc-cgroup指令,語法如下:
    ~ $ lxc-cgroup -n container [name] [subsystem] [value]
    subsystem可使用lxc.conf的manual來查,或者到/sys/fs/cgroup/目錄下,有許多subsystem子目錄,每個子目錄的的檔案都是指令中subsystem的選項,但不建議以直接改檔案內容的方式做設定。使用lxc-cgroup設定,只有在container正在執行的時候做設定才有效,因為當container重啟後,設定就失效了。

在Ubuntu下,可以透過/etc/default/lxc來定義lxc daemon執行時所要用的環境變數,包含網路設定。環境變數是給/etc/init/lxc.conf/etc/init/lxc-net.conf這兩個upstart job script所用的,預設是會建立一個10.0.3.0網段,並提供DHCP自動指派ip給container(使用dnsmasq)。將/etc/default/lxc的USE_LXC_BRIDGE設為false,就可以使用自行設定的bridge interface,但記得在lxc.conf設定lxc.network.link,告訴lxc連結的network interface名稱。

還有很多其他設定,就請自行參考lxc.conf的manual了。

References:
http://lxc.sourceforge.net/
https://help.ubuntu.com/12.04/serverguide/lxc.html
http://www.kernel.org/doc/Documentation/cgroups/cgroups.txt
http://www.arthurtoday.com/2012/10/ubuntu-create-and-setting-lxc-containers.html#.UKtFgxI8FMk

留言

熱門文章