如何:配置支援 LXC 的 CentOS 6
1. LXC 的 介紹
LXC(Linux Container)不是真正的虛擬化技術,它更像是一個「強化版」的 chroot 環境。這裡有更多關於 LXC 的資訊: http://lxc.sourceforge.net
2. 安裝 libvirt 堆疊
yum install libvirt libvirt-client python-virtinst
3. 設置 LXC 容器
假設你想建立一個完整的容器,就像一個最小化的 CentOS 設置。
請確保你機器上的 libvirtd 已經啟動(service libvirtd start)。
我們會根據以下假設來初始化一個 CentOS 6 x86_64 容器:
- 根目錄是 /var/lib/libvirt/lxc/centos-6-x86_64/
- root 的密碼是 MYROOTPASS
- 架構與主機相同,在這個範例中即是 x86_64
容器名稱是 test
3.1. 在本機的檔案系統上
{{{ mkdir /var/lib/libvirt/lxc/centos-6-x86_64/etc/yum.repos.d/ -p cat /etc/yum.repos.d/CentOS-Base.repo |sed s/'$releasever'/6/g > /var/lib/libvirt/lxc/centos-6-x86_64/etc/yum.repos.d/CentOS-Base.repo yum groupinstall core --installroot=/var/lib/libvirt/lxc/centos-6-x86_64/ --nogpgcheck -y yum install plymouth libselinux-python --installroot=/var/lib/libvirt/lxc/centos-6-x86_64/ --nogpgcheck -y }}}
Selinux 備註: 你須要建立一個允許 virtd_lxc_t 使用 dbus 的 selinux 政策:
{{{ module lxc 1.0;
require {
- type hald_t; type virtd_lxc_t; class dbus send_msg;
}
#============= hald_t ============== allow hald_t virtd_lxc_t:dbus send_msg; }}}
請參詳 http://wiki.centos.org/HowTos/SELinux 頁的出色指引有關如何完成以上步驟。
請留意你不能在停用 SELinux 的情況下運用 LXC,你可嘗試把政策改為 permissive(見 https://bugzilla.redhat.com/show_bug.cgi?id=995897)
3.2. 在 chroot 檔案系統內
以下所有步驟均須要在 chroot 環境下完成:
{{{ chroot /var/lib/libvirt/lxc/centos-6-x86_64/
echo MYROOTPASS |passwd root --stdin
#Fix root login on console
echo "pts/0" >>/etc/securetty
sed -i s/"session required pam_selinux.so close"/"#session required pam_selinux.so close"/g /etc/pam.d/login
sed -i s/"session required pam_selinux.so open"/"#session required pam_selinux.so open"/g /etc/pam.d/login
sed -i s/"session required pam_loginuid.so"/"#session required pam_loginuid.so"/g /etc/pam.d/login
#Configuring basic networking
cat > /etc/sysconfig/network << EOF
NETWORKING=yes
HOSTNAME=lxc1.test.centos.org
EOF
cat > /etc/sysconfig/network-scripts/ifcfg-eth0 << EOF
DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes
EOF
#Enabling sshd
chkconfig sshd on
# Fixing root login for sshd
sed -i s/"session required pam_selinux.so close"/"#session required pam_selinux.so close"/g /etc/pam.d/sshd
sed -i s/"session required pam_loginuid.so"/"#session required pam_loginuid.so"/g /etc/pam.d/sshd
sed -i s/"session required pam_selinux.so open env_params"/"#session required pam_selinux.so open env_params"/g /etc/pam.d/sshd
# Leaving the chroot'ed filesystem
exit }}}
3.3. 返回本機
# 現在從該檔案系統建立 LXC 容器
{{{ virt-install --connect lxc:/// --name test --ram 512 --vcpu 1 --filesystem /var/lib/libvirt/lxc/centos-6-x86_64/,/ --noautoconsole }}}
你可以如此存取該 LXC 容器: {{{ virsh console test }}} 又或者 {{{ ssh -l root CONTAINER_IP }}}
要取得 LXC 容器的 IP 位址,請在 dhcp 租約 /var/lib/libvirt/dnsmasq/default.leases 內查閱它的 MAC 位址(收錄於 /etc/libvirt/lxc/test.xml)
3.4. 有關在 KVM 虛擬機器內運行 LXC 與預設網絡
當你在 KVM 虛擬機器內運行 LXC(兩者皆採用 libvirt),預設的 192.168.122.0/24 網絡將會在 LXC 容器啟動時產生衝突,你須要更改客端虛擬機器的 libvirtd(執行容器的那個)的 IP 範圍來矯正問題。
service libvirtd stop sed -i 's/"192\.168\.122\./"192.168.120./' /etc/libvirt/qemu/networks/default.xml service libvirtd start
Translation of revision 7