LXC - Linux Containers
2014-01-11
- <參考> Creating a virtualized fully-distributed Hadoop cluster using Linux Containers
- 測試環境:Debian Wheezy 7.1 netinstall ISO with preseed
jazz@debian:~$ lsb_release -a No LSB modules are available. Distributor ID: Debian Description: Debian GNU/Linux 7.3 (wheezy) Release: 7.3 Codename: wheezy
- 安裝 LXC
jazz@debian:~$ sudo apt-get install lxc
- 產生虛擬機器
jazz@debian:~$ sudo lxc-create -t debian -n test1 jazz@debian:~$ sudo lxc-start -d -n test1
- 安裝 LXC Web Panel
root@debian:~# wget http://lxc-webpanel.github.io/tools/install.sh -O - | bash
- <狀況> 指令可以建立 LXC VM, 但網頁似乎不太靈光。
2014-01-12
- 測試環境:Ubuntu 12.04 LTS
jazz@jazzbook:~$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 12.04.2 LTS Release: 12.04 Codename: precise
- 感覺上 LXC 1.0 的功能比較齊全(Ex. 支援根據 DNS 分配 IP 的機制),因此直接採用 precise-backports 套件庫中的 lxc 1.0 版本
echo "deb http://free.nchc.org.tw/ubuntu precise-backports main universe" > /tmp/precise-backport.list sudo mv /tmp/precise-backport.list /etc/apt/sources.list.d/ sudo apt-get update
- 安裝 LXC 1.0 版本
sudo apt-get install lxc
jazz@jazzbook:~$ lxc-version lxc version: 1.0.0.alpha1
- 根據 /etc/default/lxc-net 的說明,可以設定一個檔案,來根據 hostname 決定 IP 分配
# Uncomment the next line if you'd like to use a conf-file for the lxcbr0 # dnsmasq. For instance, you can use 'dhcp-host=mail1,10.0.3.100' to have # container 'mail1' always get ip address 10.0.3.100. #LXC_DHCP_CONFILE=/etc/lxc/dnsmasq.conf
jazz@jazzbook:~$ sudo su - root@jazzbook:~# echo "LXC_DHCP_CONFILE=/etc/lxc/dnsmasq.conf" >> /etc/default/lxc-net root@jazzbook:~# cat > /etc/lxc/dnsmasq.conf << EOF dhcp-host=hdp11,10.0.1.111 dhcp-host=hdp12,10.0.1.112 dhcp-host=hdp13,10.0.1.113 dhcp-host=hdp14,10.0.1.114 dhcp-host=hdp15,10.0.1.115 dhcp-host=hdp16,10.0.1.116 dhcp-host=hdp17,10.0.1.117 dhcp-host=hdp18,10.0.1.118 dhcp-host=hdp19,10.0.1.119 dhcp-host=hdp20,10.0.1.120 dhcp-host=hdp21,10.0.1.121 dhcp-host=hdp22,10.0.1.122 dhcp-host=hdp23,10.0.1.123 dhcp-host=hdp24,10.0.1.124 dhcp-host=hdp25,10.0.1.125 dhcp-host=hdp26,10.0.1.126 dhcp-host=hdp27,10.0.1.127 dhcp-host=hdp28,10.0.1.128 dhcp-host=hdp29,10.0.1.129 dhcp-host=hdp30,10.0.1.130 EOF
- 建立 20 個 VM 的主機名稱對應(hostname)
root@jazzbook:~# cat >> /etc/hosts << EOF # for LXC 10.0.1.111 hdp11 10.0.1.112 hdp12 10.0.1.113 hdp13 10.0.1.114 hdp14 10.0.1.115 hdp15 10.0.1.116 hdp16 10.0.1.117 hdp17 10.0.1.118 hdp18 10.0.1.119 hdp19 10.0.1.120 hdp20 10.0.1.121 hdp21 10.0.1.122 hdp22 10.0.1.123 hdp23 10.0.1.124 hdp24 10.0.1.125 hdp25 10.0.1.126 hdp26 10.0.1.127 hdp27 10.0.1.128 hdp28 10.0.1.129 hdp29 10.0.1.130 hdp30 EOF
- 為了讓根據 DNS 主機名稱對應分配 IP 的機制生效,必須重新啟動 lxc-net
root@jazzbook:~# /etc/init.d/lxc restart root@jazzbook:~# /etc/init.d/lxc-net restart
- 先建立五個 LXC VM 試試看
root@jazzbook:~# for ((i=11;i<=15;i++)); do lxc-create -t ubuntu -n hdp$i; done Checking cache download in /var/cache/lxc/precise/rootfs-i386 ... Copy /var/cache/lxc/precise/rootfs-i386 to /usr/lib/i386-linux-gnu/lxc ... Copying rootfs to /usr/lib/i386-linux-gnu/lxc ... /bin/bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8) Generating locales... en_US.UTF-8... done Generation complete. Creating SSH2 RSA key; this may take some time ... Creating SSH2 DSA key; this may take some time ... Creating SSH2 ECDSA key; this may take some time ... ## # The default user is 'ubuntu' with password 'ubuntu'! # Use the 'sudo' command to run tasks as root in the container. ##
- 從以上訊息可以得知,預設的帳號密碼都是 ubuntu
- 啟動 5 個 LXC VM
root@jazzbook:~# for ((i=11;i<=15;i++)); do lxc-start -d -n hdp$i; done
- 用 lxc-ls 查詢分配到的 IP 位置,看樣子 LXC_DHCP_CONFILE 的設定沒啥用 :P
root@jazzbook:~# lxc-ls --fancy NAME STATE IPV4 IPV6 AUTOSTART ------------------------------------------- hdp11 RUNNING 10.0.3.232 - NO hdp12 RUNNING 10.0.3.119 - NO hdp13 RUNNING 10.0.3.201 - NO hdp14 RUNNING 10.0.3.210 - NO hdp15 RUNNING 10.0.3.243 - NO
- 看樣子跟 /var/lib/misc/dnsmasq.lxcbr0.leases 有關,因此清除該檔案,再重來一次
service lxc-net stop rm /var/lib/misc/dnsmasq.lxcbr0.leases service lxc-net start
root@jazzbook:~# for ((i=11;i<=15;i++)); do lxc-stop -n hdp$i; done root@jazzbook:~# for ((i=11;i<=15;i++)); do lxc-destroy -n hdp$i; done root@jazzbook:~# for ((i=11;i<=15;i++)); do lxc-create -t ubuntu -n hdp$i; done root@jazzbook:~# for ((i=11;i<=15;i++)); do lxc-start -d -n hdp$i; done
- <結果> 一樣還是沒有照 hostname 分配 IP ..... XD
root@jazzbook:~# lxc-ls --fancy NAME STATE IPV4 IPV6 AUTOSTART ------------------------------------------- hdp11 RUNNING 10.0.3.238 - NO hdp12 RUNNING 10.0.3.36 - NO hdp13 RUNNING 10.0.3.72 - NO hdp14 RUNNING 10.0.3.214 - NO hdp15 RUNNING 10.0.3.9 - NO
- 安裝 LXC Web Panel
root@jazzbook:~# wget http://lxc-webpanel.github.io/tools/install.sh -O - | bash
- 金鑰交換
root@jazzbook:~# ssh-keygen root@jazzbook:~# for ((i=11;i<=15;i++)); do mkdir -p /var/lib/lxc/hdp$i/rootfs/root/.ssh; done root@jazzbook:~# for ((i=11;i<=15;i++)); do cp /root/.ssh/id_rsa.pub /var/lib/lxc/hdp$i/rootfs/root/.ssh/authorized_keys; done
- 安裝與設定 dsh
root@jazzbook:~# apt-get install dsh root@jazzbook:~# mkdir -p .dsh root@jazzbook:~# lxc-ls --fancy | grep hdp | awk '{ print $3 }' > .dsh/machines.list root@jazzbook:~# dsh -a hostname hdp11 hdp12 hdp13 hdp14 hdp15
LXC PXE Boot ?
- <問題> LXC 可以支援 PXE 開機嘛?
- 找了些參考資料,似乎多半都是讓 LTSP 或讓 PXE Boot Client 可以支援 lxc
Last modified 11 years ago
Last modified on Jan 13, 2014, 12:15:47 AM