2012-10-28

建立和設定 LXC Container

使用 lxc 的好處之一,就是可以把虛擬機器再拿來切一切,分出更多的小小的執行環境來同時跑更多的 Linux 作業系統,這在需要模擬很多台電腦時,就會很方便,雖然大部份的文件都是提到用 KVM 來搭配 lxc 使用的,不過,阿舍是在 VirtualBox 上的 Ubuntu 虛擬機器來安裝和測試的,用來,還沒什麼問題,這大概因為 lxc 已被包在 Linux 核心裡,所以,一般的情況,只要 Linux 跑的起來,lxc 就應該可以用吧 !

Credit Diego Elio “Flameeyes” Pettenò 
lxc 是透過範本來建立虛擬機器 (有人說應該是稱為虛擬執行環境,阿舍瞭解,不過,阿舍習慣上,還是都會用虛擬機器再形容的哩 !),而 lxc 內建就有幾個 Linux 發行版本的範本檔可用,以 Ubuntu 為例,lxc 內建的範本檔是放在 /usr/share/lxc/templates 資料夾裡的,所以,當要建立 Ubuntu 的 虛擬機器時,就可以用下面的指令來建立。

lxc-create -n 虛擬機器名稱 -t 範本檔名(不需要加 lxc)

以阿舍要建立一個名為 ubuntu-lxc-vm 的虛擬機器為例,操作指令如下,產生出來的虛擬機器會被放在 /var/lib/lxc 資料夾下,以下面的例子來說,就會產生一個 /var/lib/lxc/ubuntu-lxc-vm 的資料夾來放這個虛擬機器的相關檔案。( 如果之前還沒安裝過 lxc 套件,請用 apt-get install lxc 安裝即可 )

sudo  lxc-create  -n  ubuntu-lxc-vm  -t  ubuntu

執行上面的指令後,lxc 就會自動去下載並安裝 Ubuntu 所需的檔案,這個過程要等一段時間,要看機器效能和網路頻寬而定,阿舍是放著就去看電視了,過了好一會才回來看,結果,就還在跑哩!OMG ! (不過,因為下載來的檔案會放到 /var/cache/lxc 資料夾裡,所以,之後就不用那麼久了哩 ! ) 等建立完成後,就可以用下面的指令來啟動虛擬機器,然後,就掛在那邊了,因為不知道帳號和密碼哩 !

sudo  lxc-start  -n  ubuntu-lxc-vm

後來,查了一下才知,預設的帳號和密碼都是「ubuntu」,不過,阿舍的還有一個問題沒解決,就是,阿舍是用 Ubuntu Server 的虛擬機器安裝的,沒有安裝 X Window 來用,就只有一個 Terminal 可用 (註:阿舍後來才知,在Guest 的 Ctrl+Alt F2 要改用 Hot Key+F2 哩 !),因此,就沒辦同時操作多個虛擬器哩 ! 所以,就又去安裝了 screen 來用,這樣,就不用開很多個 Termial 來用,而且,操作上會比較方便的,有關 screen 的操作,請參考這裡

啟動虛擬機器後,接下來,阿舍的疑問是,不是說 lxc 可以設定每個虛擬機器可以使用的資源使用量嗎 ? 那要去那裡設定哩 ? 阿舍查了一下,原來,是要透過 lxc-cgroup 指令來控制,而 lxc-cgroup 的可用參數,可分別查詢 /sys/fs/cgroup/cpu 和 /sys/fs/cgroup/memory 這二個資料夾的檔案名稱,以阿舍要設定 ubuntu-lxc-vm 這個虛擬機器的記憶體用量為 256MB 為例,就可用下面的指令來設定,不過,執行的時候,虛擬機器要是啟動中才行。

sudo  lxc-cgroup  -n ubuntu-lxc-vm  memroy.limit_in_bytes 256M

除了上述用指令的方式來設定之外,也可以搭配設定檔來使用,設定方式就是在參數前面要多加 「lxc.cgroup.」,以上面的指令來說,在設定檔就要設定如下,而預設的設定檔是 /var/lib/lxc/虛擬機器名稱/config,以阿舍的 ubuntu-lxc-vm 為例,設定檔就是 /var/lib/lxc/ubuntu-lxc-vm/config 這個檔案。

lxc.cgroup.memory.limit_in_bytes = 256M

另外,再提一下 CPU 的設定部份,CPU 的設定分成二種方式,一種是可佔用時間的週期,另一種則是在多 CPU 的環境下,指定虛擬機器要使用那一個 CPU,第一種的指令如下,後面的數字最高為 1024,不帶數字參數就會顯示設定值。

lxc-cgroup -n ubuntu-lxc-vm cpu.shares 512

第二種方式的操作指令如下(以使用第 0、4顆 CPU 為例),同樣,未帶入數字就是用來查詢的,而用在設定檔的話,就是「lxc.cgroup.cpuset.cpus = 0,3」。

lxc-cgroup -n ubuntu-lxc-vm cpuset.cpus 0,3

再來,是有關網卡的部份,雖然,大部份都是會用 NAT 的方式來連線,不過,在測試東西的時候,大都會需要用同一個網段來連線,因此,就會需要將網卡改成橋接的方式來連到 DHCP Server 取 IP 位址,而這個部份的設定是要調整 Host 的 /etc/network/interfaces 檔案,請將下面這幾行加到 interfaces 檔裡 ( 以 DHCP 為例) 。

auto br0
iface br0 inet dhcp
bridge_ports eth0

上面的這幾行加好後,請執行下面指令來啟用 br0 。

sudo ifup br0

然後,要修改設定檔 (以阿舍的 ubuntu-lxc-vm 為例,設定檔就是 /var/lib/lxc/ubuntu-lxc-vm/config 這個檔案 ),請將下面這一行的「lxcbr0」改成「br0」之後儲存設定,這樣,再啟動虛擬機器時,所取到的 IP 位址就是由 DHCP Server 發的,而不是 10.0.3.X 這一組哩 !

lxc.network.link = lxcbr0

最後,再說一下,如果是要停止虛擬機器的話,請用下面這行指令。

sudo lxc-shutdown  -n 虛擬機器名稱



sudo lxc-stop -n 虛擬機器名稱

而如果是要複製虛擬機器的話,請用下面這行指令。

sudo lxc-clone -o 來源虛擬機器名稱 -n 新虛擬機器名稱



順便看看 :


參考資料:
https://help.ubuntu.com/community/LXC
https://help.ubuntu.com/12.10/serverguide/lxc.html
http://www.stgraber.org/2012/05/04/lxc-in-ubuntu-12-04-lts/
http://linuxkvm.blogspot.tw/2012/10/linux-container-linux.html
http://guildwar23.blogspot.tw/2011/05/linux-containers-lxc.html
http://s3hh.wordpress.com/2011/05/17/lxc-with-bridged-network/
http://www.stgraber.org/2012/03/04/booting-an-ubuntu-12-04-virtual-machine-in-an-lxc-container/
http://blog.foaa.de/2010/05/lxc-on-debian-squeeze/#how-to-setup-a-private-network-between-containers

推薦閱讀


有疑問? 問題還是沒解決嗎? 歡迎下方留言提問和討論 😁

沒有留言 :

張貼留言

歡迎留言提問和討論 .... 😁