Centos-adminã§ã¯ãæ°ããæè¡ã®åºçŸãç£èŠãããã¹ããããã¡ããå®è£ ããŸãã ã»ãšãã©ãã¹ãŠã®ãµãŒããŒã§ãOpenVZã³ã³ãããŒä»®æ³åã䜿çšããŠããŸãã äœæ¥ã§äœ¿çšãããããŒã«ã»ãããæ¡åŒµããããã«ããã€ãã£ãLinux LXCä»®æ³åã調æ»ããã³ãã¹ãããããšã«ããŸããã
ã«ããã®äžã«ãDebian Wheezyã§LXCã䜿çšããããã®æè¡ã®ç°¡åãªæŠèŠãšç°¡åãªããã¥ã¢ã«ãšç§ãã¡ã®çµè«ããããŸãã
ãã®æè¡ã¯é·ãéç©æ¥µçã«éçºãããŠããŸããã çŸåšãå®å®ããŒãžã§ã³0.9ãæ¥å¹ŽãªãªãŒã¹1.0ãæºåãããŠãããUbuntu 14.04 LTSã«å«ãŸããŸãã ãã ããçŸæç¹ã§ã¯ãUbuntuã¡ã€ã³ã¹ããªãŒã ã«ãŒãã«ã¯ãŠãŒã¶ãŒããŒã ã¹ããŒã¹ããµããŒãããŠããªãããããã®èšäºã§ã¯Debian Wheezyã®äŸã䜿çšããLinuxã³ã³ããã®äœ¿çšã«ã€ããŠèª¬æããŸãã
LXCã®äœ¿çšãä»ããéå§ããå¿ èŠããããŸããïŒ ãããç解ããŠã¿ãŸãããã
LXCïŒLinux ContainersïŒã¯ããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã¬ãã«ã®ä»®æ³åãã¯ãããžã«éããŸããã
LXCä»®æ³åãã¯ãããžãŒã®å šç¯å²ãåŒã³åºãããšã¯ã§ããŸãããããããã³ã³ãã¥ãŒã¿ãŒãªãœãŒã¹ãåé¢ããŠå ±æããããã®ãã¯ãããžãŒã§ãã
LXCã¯ãVserverãšOpenVZã®2ã€ã®ä»¥åã®ãã¯ãããžãŒã®è«ççãªç¶ç¶ã§ãããããŒãžã§ã³2.6.29ããå§ãŸããããã©ãã«ãŒãã«ãã©ã³ãã®ãã¬ãŒã ã¯ãŒã¯å ã§éçºãããŸããã«ãŒãã«ã
LXCãšã¯äœã§ããïŒ LXCã¯ãAPIãLinuxã«ãŒãã«ã®æ©èœã䜿çšããŠãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®åé¢ãããã³ã³ãããäœæããã³ç®¡çã§ããããã«ãããŠãŒãã£ãªãã£ã®ã»ããã§ãã ããããã¹ãŠå®çŸããããã«ãLinuxã«ãŒãã«ã®ããŸããŸãªæ©èœã§æ¬¡ã®ããšãã§ããŸãã
- åé¢ãšãªãœãŒã¹ã®å¶éïŒcgroupïŒ
- ã«ãŒãã«åå空éã®åé¢ïŒipcãutsãmountãpidãnetworkãuserïŒ
- ãã¡ã€ã«ã·ã¹ãã ã®åé¢ïŒChrootïŒ
- Apparmorããã³SELinuxãããã¡ã€ã«
- Seccompããªã·ãŒ
ä»ã®ã³ã³ããä»®æ³åæè¡ãšåæ§ã«ãLXCã¯Webãã¹ãã£ã³ã°ãéçºãããã³Webãããžã§ã¯ãã®ãã¹ããšãããã°ã®ããŒãºã«åœ¹ç«ã¡ãŸãã
Debian 7ã§ã®LXCã®ã€ã³ã¹ããŒã«ãèšå®
åè¿°ã®ããã«ãLXCã¯Cgroupã䜿çšããŸããã³ã³ããã®æäœãéå§ããã«ã¯ãcgroupãã¡ã€ã«ã·ã¹ãã ãããŠã³ãããå¿ èŠããããŸãã ããã©ã«ãã®ããŠã³ããã€ã³ãã¯/ sys / fs / cgroupã§ãããä»»æã®ãã€ã³ãã«ããŠã³ãã§ããŸãã
fstabãä¿®æ£ããcgroupãè¿œå ããŸãã
vi /etc/fstab
... cgroup /sys/fs/cgroup cgroup defaults 0 0 ...
ãããŠãcgroupä»®æ³ãã¡ã€ã«ã·ã¹ãã ãããŠã³ãããŸãã
mount /sys/fs/cgroup
ã³ã³ããã®ç®¡çã«ã¯ãlxcãŠãŒãã£ãªãã£ã®ã³ã³ããã»ããã䜿çšãããŸãã
lxcããã±ãŒãžãã€ã³ã¹ããŒã«ãããšãã·ã¹ãã èªäœã®æ®ãã®éšåããã«ããŸãïŒ
apt-get install lxc
ã³ã³ãããä¿åããããã©ã«ããããã©ã«ãã§ã¯ïŒ/ var / lib / lxc
ãŠãŒãã£ãªãã£ãã€ã³ã¹ããŒã«ããåŸãã·ã¹ãã ãã³ã³ããã§ã®äœæ¥ãéå§ããæºåãå®å šã«æŽã£ãŠããããšã確èªããå¿ èŠããããŸãã
lxc-checkconfig
root@lxc-debian:~# lxc-checkconfig Kernel config /proc/config.gz not found, looking in other places... Found kernel config file /boot/config-3.2.0-4-amd64 --- Namespaces --- Namespaces: enabled Utsname namespace: enabled Ipc namespace: enabled Pid namespace: enabled User namespace: enabled Network namespace: enabled Multiple /dev/pts instances: enabled --- Control groups --- Cgroup: enabled Cgroup clone_children flag: enabled Cgroup device: enabled Cgroup sched: enabled Cgroup cpu account: enabled Cgroup memory controller: enabled Cgroup cpuset: enabled --- Misc --- Veth pair device: enabled Macvlan: enabled Vlan: enabled File capabilities: enabled Note : Before booting a new kernel, you can check its configuration usage : CONFIG=/path/to/config /usr/bin/lxc-checkconfig
ãã¹ãŠãæ£åžžã§ããå Žåãæåã®ã³ã³ãããäœæããããšããããšãã§ããŸãã
ã³ã³ãã管ç
lxc-create -n test -t debian
ããã§ãã-n testãã¯ã³ã³ããã®ååãã-t debianãã¯äœæãããã³ã³ããã®OSãã³ãã¬ãŒãã§ãã
lxcãã³ãã¬ãŒãèªäœã¯ãã«ãŒããã¡ã€ã«ã·ã¹ãã ã®ãã©ã«ããŒãæ§æãã¡ã€ã«ã®æå°éã®ã»ãããäœæãããªããžããªããæ°ããããã±ãŒãžããã«ããbashã¹ã¯ãªããã§ãã ãã®å Žåããã³ãã¬ãŒãäœæã¹ã¯ãªãããæåã«èµ·åããåŸãå¿ èŠãªããã±ãŒãžããã£ã¹ã¯ã«ãã£ãã·ã¥ãããŸãã ãã¡ãããã¹ã¯ãªããã¯ç°¡åã«ã«ã¹ã¿ãã€ãºã§ããŸãã ããšãã°ãå¿ èŠãªããã±ãŒãžã»ããã®ã€ã³ã¹ããŒã«ãè¿œå ããŸãã ç§ã®è¬èãªæèŠã§ã¯ããã®ãã³ãã¬ãŒããžã®ã¢ãããŒãã¯ãåãOpenVZãããå°ã䟿å©ã§ãã
Debianã§ã¯ãArchlinuxãAltlinuxãFedoraãOpensuseãUbuntu-Cloudãã³ãã¬ãŒããèŠã€ããããšãã§ããŸãã å©çšå¯èœãªãã³ãã¬ãŒãã®ã»ãããååã§ãªãå Žåã¯ãèªåã§äžè¶³ããŠãããã³ãã¬ãŒããäœæããŠã¿ãŠãã ããã
ããã©ã«ãã§ã¯ããŠã£ã¶ãŒããDebianã§èµ·åãããããã€ãã®æé ã«åŸã£ãŠã³ã³ãããäœæã§ããŸãã ãããŠããã¹ãŠãããŸãããã§ããããããããWheezyãã³ãã¬ãŒãã¯ã å£ããŠããŸã ãããããŠãç§ã¯æ¬åœã«Sqeezeã䜿ããããããŸããã ãããã£ãŠãç¬èªã®ãã³ãã¬ãŒããäœæããããã€ã³ã¿ãŒãããã§ã¯ãŒã«ãŒãæ¢ãå¿ èŠããããŸãã
ããšãã°ãCentOS 6çšã®æ°ãããã³ãã¬ãŒããããŠã³ããŒãããŸãã
cd /usr/share/lxc/templates
wget https://gist.github.com/hagix9/3514296/raw/7f6bb4e291fad1dad59a49a5c02f78642bb99a45/lxc-centos
chmod +x lxc-centos
CentOSã®å Žåã¯ãyumããã±ãŒãžãããŒãžã£ãŒãå¿ èŠã§ãã
apt-get install yum
CentOSãã³ãã¬ãŒãã䜿çšããŠæ°ããã³ã³ãããäœæããŸãã
lxc-create -n test -t centos
æåã®ã³ã³ãããäœæãããšãå®å šã«ã¯ãªãŒã³ãªã·ã¹ãã ãåŸãããŸããå®éã«ã¯ãããã¹ããšãã£ã¿ãããããŸããã
ã³ã³ããã³ã³ãœãŒã«ã«ã¢ã¯ã»ã¹ããæ¹æ³ã¯2ã€ãããŸãã
ã³ã³ãããèµ·åãããšãèªåçã«ã³ã³ãœãŒã«ã«ã¢ã¯ã»ã¹ããŸããããã§ããã°ã€ã³ããå¿ èŠããããŸããããã©ã«ãã®ã«ãŒãïŒDebianã®ã«ãŒããã¹ã¯ãŒãã
lxc-start -n test
å¥ã®ãã³ãã¬ãŒãã䜿çšããå Žåããã¹ã¯ãŒãã¯ãã³ãã¬ãŒããã¡ã€ã«ã«ãããŸãã
2çªç®ã®ãªãã·ã§ã³ã¯ãæ¢ã«å®è¡äžã®ã³ã³ãããŒã«æ¥ç¶ããŸãïŒ
lxc-console -n test
ã³ã³ããã«åããŠæ¥ç¶ãããšã次ã®è¡šèšã衚瀺ãããŸãã
Type <Ctrl+a q> to exit the console, <Ctrl+a Ctrl+a> to enter Ctrl+a itself
-åäœããªãããŸãã¯åžžã«åäœãããšã¯éããŸããã ãã¶ãã圌ãã¯ããæè¿ã®ãªãªãŒã¹ã§ããããã§ã«ä¿®æ£ããŠãããããããŸããã
ãããã£ãŠãscreenã䜿çšãããã-dã¹ã€ããã䜿çšããŠã³ã³ãããèµ·åããsshçµç±ã§ã¢ã¯ã»ã¹ããå¿ èŠããããŸãïŒãããã¯ãŒã¯ãæ¢ã«æ§æãããŠããå ŽåïŒã
äžè¬çã«ãã³ã³ããã¯ãã¹ããã·ã³ã®ãããã¯ãŒã¯ã¹ã¿ãã¯ã䜿çšããŸãã ãã¹ãã«ã€ããŠã¯éåžžã«è¯ãã§ãããWebãããžã§ã¯ãã«ã€ããŠã¯ããã§ã¯ãªãã®ã§ã次ã«ã³ã³ããå ã§åé¢ããããããã¯ãŒã¯ã¹ã¿ãã¯ãååŸããæ¹æ³ãèŠãŠãããŸãã
ã³ã³ããã®åé€ã¯ãlxc-destroyãŠãŒãã£ãªãã£ã«ãã£ãŠå®è¡ãããŸãã
lxc-destroy -n test
ãããã¯ãŒã¯èšå®
2ã€ã®ãªãã·ã§ã³ãèããŠã¿ãŸãããã
-ãµãŒããŒãšå€æ°ã®ãçœããIPã¢ãã¬ã¹ããããŸãã åã³ã³ããã¯ç¬èªã®ã¢ãã¬ã¹ãæã¡ãã€ã³ã¿ãŒããããšèªç±ã«éä¿¡ã§ããŸãã
-ãµãŒããŒãšè€æ°ã®ããŸãã¯1ã€ã®ããã¯ã€ããIPã¢ãã¬ã¹ãããããŸãã ãã®å Žåãã»ãšãã©ã®ã³ã³ããã¯NATã§æ©èœããŸãã
ã©ã¡ãã®å Žåãããããã¯ãŒã¯ããªããžãDHCPãµãŒããŒãããã³iptablesãå¿ èŠã§ãã
apt-get install bridge-utils isc-dhcp-server
ã³ã³ãããããã¯ãŒã¯ãã»ããã¢ããããåã«ããã¹ããã·ã³ã§2ã€ã®ãããã¯ãŒã¯ããªããžãæ§æããŸãã 1ã€ã¯ããã¯ã€ããã¢ãã¬ã¹çšã§ããã1ã€ã¯ãã©ã€ããŒããªãã°ã¬ãŒãã¢ãã¬ã¹çšã§ãã
ãããã¯ãŒã¯ã¢ããã¿ãŒèšå®ãã¡ã€ã«ã¯æ¬¡ã®ããã«ãªããŸãã
vi /etc/network/interfaces
# auto br0 iface br0 inet static bridge_ports eth0 bridge_fd 0 address 192.168.0.100 netmask 255.255.255.0 gateway 192.168.0.1 dns-nameservers 192.168.0.1 8.8.8.8 # auto lxcbr0 iface lxcbr0 inet static bridge_ports none bridge_fd 0 address 10.0.0.1 netmask 255.255.255.0
æåã®ãªãã·ã§ã³
ãããã¯ãŒã¯ã¢ããã¿ãŒãã³ã³ãããŒæ§æã«ç»é²ããŸãã
ããã©ã«ãã§ã¯ãcontainers / var / lib / lxcãå«ããã©ã«ããŒã§ãã³ã³ãããŒïŒãã¹ãïŒã®ååã®ãã©ã«ããŒãæ¢ããèšå®ãã¡ã€ã«ããã®äžã«ãããç·šéããŸãã
ãããã¯ãŒã¯èšå®ã®ãããã¯ããã¡ã€ã«ã®æåŸã«è¿œå ããŸãã
vi /var/lib/lxc/test/config
... # networking lxc.utsname = centos # ( ) lxc.network.type = veth # - lxc.network.flags = up # ( ) lxc.network.link = br0 # lxc.network.name = eth0 # lxc.network.veth.pair = veth0 # IP- lxc.network.ipv4 = 192.168.0.101/24 # lxc.network.ipv4.gateway = 192.168.0.1 # (mac) lxc.network.hwaddr = 00:1E:2D:F7:E3:4F
ããã§ãã³ã³ãããèµ·åããŠãsshçµç±ã§æ¥ç¶ãè©Šè¡ã§ããŸãã
lxc-start -n test -d && ssh root@192.168.0.101
2çªç®ã®ãªãã·ã§ã³
2çªç®ã®ãªãã·ã§ã³ã¯ãç°ãªããããã¯ãŒã¯ããªããžã䜿çšããã³ã³ãããNATãä»ããŠã®ã¿ã€ã³ã¿ãŒãããã«ã¢ã¯ã»ã¹ã§ãããšããç¹ã§ãæåã®ãªãã·ã§ã³ãšç°ãªããŸãã
CentOSã³ã³ããã®èšå®ãä¿®æ£ããŸãããïŒ
vi /var/lib/lxc/test/config
... # networking lxc.utsname = centos lxc.network.type = veth lxc.network.flags = up lxc.network.link = lxcbr0 lxc.network.name = eth0 lxc.network.veth.pair = veth1 lxc.network.ipv4 = 10.0.0.10/24 lxc.network.ipv4.gateway = 10.0.0.1 lxc.network.hwaddr = 00:1E:2D:F7:E3:4E
ã³ã³ãããŒãã¢ãã¬ã¹ãèªåçã«åä¿¡ã§ããããã«ãdhcpãµãŒããŒãæ§æããŸãã
vi /etc/dhcp/dhcpd.conf
... # authoritative; ⊠# subnet 10.0.0.0 netmask 255.255.255.0 { range 10.0.0.10 10.0.0.50; option domain-name-servers 192.168.0.1, 8.8.8.8; option domain-name "somehost.com"; option routers 10.0.0.1; default-lease-time 600; max-lease-time 7200; }
DHCPãæ©èœãããããã¯ãŒã¯ã€ã³ã¿ãŒãã§ã€ã¹ã瀺ãããšãå¿ èŠã§ãã
vi /etc/default/isc-dhcp-server
... INTERFACES="lxcbr0" ...
ãã¹ããã·ã³ã§ãã±ãã転éãæå¹ã«ããå¿ èŠããããŸãã
/etc/sysctl.conf
... net.ipv4.ip_forward=1 ...
sysctl -p
ã³ã³ããããã®ã€ã³ã¿ãŒãããã¢ã¯ã»ã¹ãããã³ã€ã³ã¿ãŒãããããã®ã³ã³ãããžã®ã¢ã¯ã»ã¹ãæäŸããã«ã¯ã次ã®iptablesã«ãŒã«ã䜿çšããŠãã¡ã€ã¢ãŠã©ãŒã«ãæ§æããå¿ èŠããããŸãã
vi /etc/network/iptables.up.rules
*nat :PREROUTING ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :POSTROUTING ACCEPT [0:0] # NAT -A POSTROUTING -s 10.0.0.0/24 -o lxbr0 -j MASQUERADE # , SNAT # -A POSTROUTING -s 10.0.0.10/32 -j SNAT --to-source 192.168.0.100 # SSH -A PREROUTING -p tcp -m tcp -d 192.168.0.100 --dport 5678 -j DNAT --to-destination 10.0.0.10:22 COMMIT *mangle :PREROUTING ACCEPT [0:0] :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :POSTROUTING ACCEPT [0:0] COMMIT *filter :FORWARD ACCEPT [0:0] :INPUT DROP [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -p tcp -m tcp --dport 5678 -j ACCEPT COMMIT
ã«ãŒã«ãé©çšããŸãã
iptables-restore < /etc/network/iptables.up.rules
ãŸãããµãŒããŒã®èµ·åæã«ã«ãŒã«ãèªåçã«ããŒãããŸãã
echo âpost-up iptables-restore < /etc/network/iptables.up.rulesâ >> /etc/network/interfaces
ã³ã³ãããèµ·åããŠãã€ã³ã¿ãŒãããæ¥ç¶ã確èªããŸãã
lxc-start -n centos -d
ããã¯ã¢ãããã¯ããŒã³ã埩å
ã³ã³ãããããã¯ã¢ããããã«ã¯ãlxc-backupãŠãŒãã£ãªãã£ã䜿çšããŸãã vzdumpãšæ¯èŒãã䟡å€ã¯ãããŸããã ãŠãŒãã£ãªãã£ã¯ãrsyncã䜿çšããŠã³ã³ãããã¡ã€ã«ãã³ããŒããŸãã å®éãã³ã³ãããã¡ã€ã«ãé£æ¥ãããã©ã«ãã«åã«ã³ããŒããã ãã§ãã å®éçãªå©ç¹ã¯çãããã åãæåã§ãã¹ã¯ãªããã䜿çšããŠãåãrsyncã§ãã¡ã€ã«ãé©åãªå Žæã«ããã¯ã¢ããã§ããŸãã
ã³ã³ããã®ã¯ããŒã³äœæã¯lxc-cloneãŠãŒãã£ãªãã£ã䜿çšããŠå®è¡ãããŸããããã¯ã¢ããããã®ãªã«ããªã«ã¯lxc-restoreããããŸãã ãããã®ãŠãŒãã£ãªãã£ã¯è±å¯ãªæ©èœãèªãããšã¯ã§ããŸããããæäœéå¿ èŠãªãã®ããããŸãã
çµæã¯äœã§ããïŒ
ãã®æè¡ã¯39ã®ãªãªãŒã¹ãš1989ã®ã³ãããïŒ2013幎11æ14æ¥çŸåšïŒã§å€§ããªé²æ©ãéããŠãããçŸåšãäœããã®å®å šãªå€èŠ³ã«é©ããŠããŸãã çŸåšã®åœ¢åŒã®å ±æãã¹ãã£ã³ã°ã§LXCã䜿çšããã®ã¯ææå°æ©ãããããŸãããããã®æè¡ã¯ãã©ã€ããŒããããžã§ã¯ãã«éåžžã«é©ããŠããŸãã
ã³ã³ãããæ±ãããã®ãŠãŒãã£ãªãã£ã¯ããããããŸã æ¹åããå¿ èŠãããããã®ãããªäœæ¥ã¯ç©æ¥µçã«è¡ãããŠããŸãã åæã«ãçŸæç¹ã§ã¯ããããã®æ©èœã¯Linuxã³ã³ãããŒã®å®è£ ãšç®¡çã«é¢ããæ¬æ Œçãªäœæ¥ã«ååã§ãã
æåŸã«ããã€ãã®æ°å
ãã¹ãã¯å¥ã®æçš¿ã®ãããã¯ãªã®ã§ã詳现ã¯èª¬æããŸããããã¹ãã¯åããã·ã³ã§å®è¡ããããšããèšãããããããŸããã ãã¹ãŠãæ¥ãã§è¡ãããŸããããããã§äœãèµ·ãã£ãã®ã§ããïŒ
æçšãªèšäºïŒ
Debian Wiki LXC
LXCã³ã³ãããŒã30åã§ã»ããã¢ãããã
UbuntuãµãŒããŒã¬ã€ãLXC
LXCïŒLinuxã³ã³ãããŠãŒãã£ãªãã£
ã»ãã¥ã¢Linuxã³ã³ãããŒã¬ã€ã