Share
Embed
Linuxコンテナの基本と最新情報 (2014-11-14)
第5回コンテナ型仮想化の情報交換会の発表資料です。
参考となる情報にはPDF中からリンクをしていますが、資料中のリンクは Speaker Deck 上ではクリックできないので PDF をダウンロードしてご覧ください。
tenforward
November 14, 2014
Transcript
30 slides
-
୭? Ճ౻ହจ ϑΝʔεταʔόגࣜձࣾɹج൫։ൃ෦ ΤϯδχΞืूதͰ͢ http://www.ten-forward.ws/ @ten forward http://gplus.to/tenforward https://github.com/tenforward http://d.hatena.ne.jp/defiant/
Ճ౻ହจ Linux ίϯςφͷجຊͱ࠷৽ใ 2014-11-14 2 / 30 -
୭? 2010 ࠒʹ cgroup ͷௐࠪΛ࢝Ίͨͷ͕͖͔͚ͬͰίϯςφ पลΛ৭ʑ͓͔͚ͬͯͨͷ͕ߴͯ͜͡ͷษڧձΛͬͯ·͢ LXC ͷίϛοτ ຊޠ man
pages ࠷ۙগ͠ίʔυ Ճ౻ହจ Linux ίϯςφͷجຊͱ࠷৽ใ 2014-11-14 3 / 30 -
୭? Plamo Linux ϝϯςφ LXC ͰֶͿίϯςφೖɹʔܰྔԾԽڥΛ࣮ݱ͢Δٕज़ gihyo.jp Ͱ࿈ࡌ ʲվగ৽൛ʳLinux ΤϯδχΞཆಡຊ
(ٕज़ධࣾ) Ճ౻ହจ Linux ίϯςφͷجຊͱ࠷৽ใ 2014-11-14 4 / 30 -
LinuxͰίϯςφΛ࣮ݱ͢ΔͨΊͷओͳػೳ Namespace(໊લۭؒ) ϓϩηεΛάϧʔϓԽͯ͠ଞͷάϧʔϓͱִ Cgroup άϧʔϓԽͨ͠ϓϩηεʹର͢ΔϦιʔε੍ݶ ωοτϫʔΫ (veth, macvlan) chroot (pivot
root) έʔύϏϦςΟ ͳͲʜ Ճ౻ହจ Linux ίϯςφͷجຊͱ࠷৽ใ 2014-11-14 7 / 30 -
Namespace Mount (2.4.19) ϓϩηε͔Βݟ͍͑ͯΔϚϯτͷू߹ɺૢ࡞Λ UTS (2.6.19) ϗετ໊ͳͲ uname(2) ͕ฦ͢ͷू߹Λ PID
(2.6.24) PID ۭؒͷ IPC (2.6.19) SysV IPC ΦϒδΣΫτɺPOSIX ϝοηʔδΩϡʔ User (3.8) ಠཱͨ͠ UID/GID ۭؒͱۭؒͷϚοϐϯά Network (2.6.26) ωοτϫʔΫϦιʔεͷ Ճ౻ହจ Linux ίϯςφͷجຊͱ࠷৽ใ 2014-11-14 8 / 30 -
Cgroup cpu ୯Ґ࣌ؒʹάϧʔϓͷλεΫ͕࣮ߦͰ͖Δ࣌ؒͷ੍ݶ (2.6.24) άϧʔϓؒͰͷ CPU ࣌ؒͷׂͷׂ߹Λࢦఆ (3.2) cpuacct (2.6.24)
άϧʔϓͷ CPU ࣌ؒͷϨϙʔτ cpuset (2.6.24) ׂΓͯΔ CPUɺϝϞϦϊʔυͷׂ device (2.6.26) σόΠεͷΞΫηεڐՄɺ੍ݶ freezer (2.6.28) άϧʔϓͷϓϩηεͯ͢ʹରͯ͠Ұ࣌ఀࢭɺ࠶։ Ճ౻ହจ Linux ίϯςφͷجຊͱ࠷৽ใ 2014-11-14 9 / 30 -
Cgroup blkio άϧʔϓؒͰͷ I/O ͷ༏ઌΛࢦఆ (2.6.33) άϧʔϓͷϓϩηεͷσόΠεʹର͢Δ I/O Λ bps/iops
Ͱ੍ݶ (2.6.37) memory (2.6.29) ϝϞϦ༻ྔͷ੍ݶɻϢʔβϝϞϦͱϖʔδΩϟογϡ hugetlb (3.6) perf event (2.6.39) άϧʔϓ୯ҐͰ perf πʔϧͰϞχλϦϯάՄೳ net cls (2.6.29) άϧʔϓͷϓϩηε͔Βग़ΔύέοτʹࣝผࢠΛ͚ͭ tc,netfilter Ͱ੍ݶ (netfilter 3.14) net prio (3.3) άϧʔϓؒͰͷωοτϫʔΫͷΠϯλʔϑΣʔε͝ͱͷ༏ઌ Ճ౻ହจ Linux ίϯςφͷجຊͱ࠷৽ใ 2014-11-14 10 / 30 -
ωοτϫʔΫ veth ରͱͳΔΠϯλʔϑΣʔεΛ࡞͠ɺΠϯλʔϑΣʔεؒͰ௨ ৴ (L2 τϯωϦϯά) macvlan ཧΠϯλʔϑΣʔεʹผͷ MAC ΞυϨε͕͍ͨ৽͍͠
ΠϯλʔϑΣʔεΛ࡞ Ճ౻ହจ Linux ίϯςφͷجຊͱ࠷৽ใ 2014-11-14 11 / 30 -
ίϯςφؔ࿈ͷࠓޙͷಈ͖ Cgroup ͷେվ Memory Cgroup Namespace ؔͷػೳՃ CRIU LXC/LXD overlayfs
Ճ౻ହจ Linux ίϯςφͷجຊͱ࠷৽ใ 2014-11-14 13 / 30 -
Cgroupେվ (1) Cgroup ͷಛ͓͞Β͍ ػೳ͝ͱʹαϒγεςϜʹ͔ΕΔ cgroupfs ΛϚϯτͯ͠σΟϨΫτϦͰάϧʔϓΛද͢ ϓϩηεΛάϧʔϓͷ tasks ϑΝΠϧʹՃ͢Δͱؔ࿈͢Δ
λεΫ͕εϨου୯ҐͰάϧʔϓʹՃ͞ΕΔ ෳ֊ߏɻվߏ͝ͱʹҟͳΔπϦʔΛ࡞Ͱ͖Δɻͨ ͩ͠ɺҰͭͷαϒγεςϜ͕ॴଐͰ͖ΔπϦʔҰͭ πϦʔͷͲͷϨϕϧͷάϧʔϓʹλεΫ͕ॴଐͰ͖Δ Ճ౻ହจ Linux ίϯςφͷجຊͱ࠷৽ใ 2014-11-14 14 / 30 -
Cgroupେվ (2) Cgroup ͷ ΧΦε ෳͷ֊ͰҟͳΔπϦʔΛ࡞Δ αϒγεςϜ͝ͱʹ֊ߏͷಈ͖͕ҧ͏ (ͷӨڹ) ࢠؒͷάϧʔϓͷؔ άϧʔϓʹଐ͢Δϓϩηεͱࢠάϧʔϓʹଐ͢Δϓϩηεͷ
ؔ? ͔ͦ͠ΕͧΕͷϓϩηεͷࢠϓϩηεεϨου· Ͱߟ͑Δͱ!? ཧ୯Ґͷ ϝϞϦϓϩηε୯ҐͷཧͳͷʹεϨου୯ҐͰొ αϒγεςϜ͕ػೳ͝ͱʹΘ͔Ε͍ͯͯɺෳ֊ߏ͕࣋ͯ ΔͷͰɺαϒγεςϜಉ࢜ͷڠௐಈ࡞͕͍͠ Ճ౻ହจ Linux ίϯςφͷجຊͱ࠷৽ใ 2014-11-14 15 / 30 -
Cgroupେվ (3) sane behavior Φϓγϣϯ (·ͱͳৼΔ͍!!) 3.16 ͔ΒࢼͤΔ (ͨͩ͋͘͠·Ͱ͓ࢼ͠)
mount -t cgroup -o __DEVEL__sane_behavior \ cgroup /path/to/cgroup Ճ౻ହจ Linux ίϯςφͷجຊͱ࠷৽ใ 2014-11-14 16 / 30 -
Cgroupେվ(4) ୯Ұ֊ߏ ϓϩηε୯ҐͰཧ ϓϩηε͕ॴଐ͠ͳ͍άϧʔϓ͚͕ͩࢠάϧʔϓΛ࣋ͯΔ (ϧʔτΛআ͘) ֊͝ͱʹ༗ޮʹͰ͖ΔαϒγεςϜΛࢦఆͰ͖Δɻͨͩ͠ɺ άϧʔϓͰ༗ޮʹͳ͍ͬͯΔαϒγεςϜͷΈ༻Մೳ άϧʔϓʹଐ͢Δϓϩηε͕ͳ͘ͳͬͨ௨Λ poll ͱ
[id]notify Ͱड͚औΕΔ (release agent ഇࢭ) ৄ͘͠ Linux 3.16 ͔ΒࢼͤΔ cgroup ͷ୯Ұ֊ߏ (1) Linux 3.16 ͔ΒࢼͤΔ cgroup ͷ୯Ұ֊ߏ (2) Ճ౻ହจ Linux ίϯςφͷجຊͱ࠷৽ใ 2014-11-14 17 / 30 -
Namespaceؔ࿈ σόΠεؔ࿈ͷ͕͍ٞ ݱࡏɺσόΠεԾԽ͞Ε͓ͯΒͣϗετͱڞ௨ (Cgroup ʹΑΔ੍ݶͷΈ) ৽͍͠σόΠε͕Ճ͞Ε͔ͨΒͱݴͬͯશίϯςφʹ udev ͷΠϕϯτ͕ඈͿҙຯ͋·Γͳ͍ ͔͠͠ҙຯͷ͋ΔσόΠε͋ΔͩΖ͏ Loop
Fuse console, X display, iscsi ͳΜ͔ඞཁͱ͍͏ User Namespace ͷ root ͕ߦ͑Δಈ࡞ͷݕ౼ ίϯςφ͔ΒϑΝΠϧγεςϜͷϚϯτ ৽͍͠ Namespace ͷύονͷఏҊ Log Namespace Cgroup Namespace (!) Ҏલ ns cgroup ͱ͍͏ͷ͕͕͋ͬͨͦΕͱผ Ճ౻ହจ Linux ίϯςφͷجຊͱ࠷৽ใ 2014-11-14 19 / 30 -
CRIU(1) http://criu.org/ OpenVZ ϓϩδΣΫτͷ Checkpoint/Restore ࣮ ΞϓϦέʔγϣϯͷ͋Δ࣌ͷঢ়ଶΛอଘ͠ɺ࠶։Ͱ͖Δ Χʔωϧ 3.11 Ҏ߱Ͱ༻Մೳ
Ճ౻ହจ Linux ίϯςφͷجຊͱ࠷৽ใ 2014-11-14 20 / 30 -
CRIU(2) ubuntu@criu1:~$ sudo lxc-start -n ct01 ubuntu@criu1:~$ sudo
lxc-checkpoint -v -n ct01 -s -D /tmp/checkpoint (νΣο ΫϙΠϯτॲཧޙʹίϯςφఀࢭ) ubuntu@criu1:~$ sudo lxc-ls --fancy NAME STATE IPV4 IPV6 GROUPS AUTOSTART -------------------------------------------- ct01 STOPPED - - - NO ubuntu@criu1:~$ ls /tmp/criu/ cgroup.img fdinfo-17.img inventory.img pages-15.img core-170.img fdinfo-18.img ipcns-msg-9.img pages-16.img core-176.img fdinfo-2.img ipcns-sem-9.img pages-17.img core-1.img fdinfo-3.img ipcns-shm-9.img pages-1.img core-260.img fdinfo-4.img ipcns-var-9.img pages-2.img core-261.img fdinfo-5.img iptables-8.img pages-3.img : (snip) ubuntu@criu1:~$ sudo rsync -avz --devices --rsync-path="sudo rsync" \ /var/lib/lxc/ct01 [email protected]:/var/lib/lxc ubuntu@criu1:~$ sudo rsync -avz --rsync-path="sudo rsync" \ /tmp/checkpoint [email protected]:/tmp Ճ౻ହจ Linux ίϯςφͷجຊͱ࠷৽ใ 2014-11-14 21 / 30 -
CRIU(3) ubuntu@criu2:~$ ls /tmp/criu/ cgroup.img fdinfo-3.img ipcns-sem-9.img pages-3.img
core-1.img fdinfo-4.img ipcns-shm-9.img pages-4.img core-255.img fdinfo-5.img ipcns-var-9.img pages-5.img core-260.img fdinfo-6.img iptables-8.img pages-6.img : (snip) ubuntu@criu2:~$ sudo lxc-checkpoint -n ct01 -r -D /tmp/checkpoint -v -d ubuntu@criu2:~$ sudo lxc-ls -f NAME STATE IPV4 IPV6 GROUPS AUTOSTART -------------------------------------------------- ct01 RUNNING 10.0.3.200 - - NO Ճ౻ହจ Linux ίϯςφͷجຊͱ࠷৽ใ 2014-11-14 22 / 30 -
LXCؔ࿈ LXC 1.1.0 ʹ͚ͯ։ൃத LXC 1.1.0.alpha2 Ͱগ͠౿Έ CRIU ରԠ (lxc-checkpoint
ίϚϯυ) lxc-start ίϚϯυσʔϞϯϞʔυ͕σϑΥϧτʹ nbd ετϨʔδόοΫΤϯυ lxc-execute Ͱىಈ͢ΔΞϓϦέʔγϣϯίϯςφͷ४උ͕ ָʹ download ςϯϓϨʔτΛͬͨ߹ɺ࡞͞ΕΔίϯςφ ͰϢʔβઃఆ͕ඞཁɻroot ͷύεϫʔυσϑΥϧτϢʔ β࡞͞Εͳ͍ LXD αΠτϦχϡʔΞϧ (४උத) Ճ౻ହจ Linux ίϯςφͷجຊͱ࠷৽ใ 2014-11-14 23 / 30 -
LXD LXD The Linux Container Daemon ϦϞʔτ͔Β REST API Λͬͯ
LXC ίϯςφΛૢ࡞Մೳ ͳσʔϞϯͱ ίϚϯυϥΠϯ I/F (୯ҰͷίϚϯυ) OpenStack ϓϥάΠϯ Go ݴޠͰهड़ (go-lxc Λ༻) https://github.com/lxc/lxd Ճ౻ହจ Linux ίϯςφͷجຊͱ࠷৽ใ 2014-11-14 24 / 30 -
overlayfs Union Filesystem (aufs ͱҰॹ) ίϯςφͱؔ͋Γ·ͤΜ 3.10 ͷࠒϚʔδ͞ΕΔͱ͍͏͕͕͋ͬͨ 3.18 ͰϚʔδ͞
Εͦ͏ ίϯςφͷΫϩʔϯΛ࡞͢Δͱ͖ͷϑΝΠϧγεςϜͱ͠ ͯ LXC ͔Βར༻Ͱ͖Δ Ubuntu/Plamo ͩͱඇಛݖίϯςφͷΫϩʔϯʹ͑·͢ Ubuntu 14.04 LTSɺPlamo Linux 5.2(࠷৽Χʔωϧ) Ͱར ༻Մೳ Ճ౻ହจ Linux ίϯςφͷجຊͱ࠷৽ใ 2014-11-14 25 / 30 -
overlayfs(2) # ls -F lower/ overlay/ upper/ work/
# touch lower/lower # touch upper/upper # mount -n -t overlayfs -o lowerdir=lower,upperdir=upper,workdir=work \ overlayfs overlay # ls overlay/ lower upper # touch overlay/overlay # ls overlay/ lower overlay upper # umount overlay # ls upper/ overlay upper ˞ Ubuntu 14.04 LTS ͷΧʔωϧͷ overlayfs ͷόʔδϣϯݹ ͍ͷͰ workdir Φϓγϣϯෆཁ Ճ౻ହจ Linux ίϯςφͷجຊͱ࠷৽ใ 2014-11-14 26 / 30 -
ڠྗऀืू ڠྗऀืूத ຊޠ man pages linuxcontainers.org ϦχϡʔΞϧͰ༁த ϨϏϡʔɺ༁ ͜ͷษڧձ Ճ౻ହจ
Linux ίϯςφͷجຊͱ࠷৽ใ 2014-11-14 29 / 30