wiki:jazz/LXC

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 10 years ago Last modified on Jan 13, 2014, 12:15:47 AM