41
Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012 LXC – kontener pingwinów Grzegorz Nosek, MegiTeam

LXC - kontener pingwinów

  • Upload
    gnosek

  • View
    7.701

  • Download
    3

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: LXC - kontener pingwinów

Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012

LXC – kontener pingwinów

Grzegorz Nosek,MegiTeam

Page 2: LXC - kontener pingwinów

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

Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012

Wirtualizacja w kilku słowach

Page 4: LXC - kontener pingwinów

Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012

Wirtualizacja w kilku słowach

Page 5: LXC - kontener pingwinów

Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012

Wirtualizacja w kilku słowach

Page 6: LXC - kontener pingwinów

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

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

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

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

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

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

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

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

Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012

CGroups

● cgroupfs● mkdir, rmdir● echo $$ > .../tasks

– w dowolnym momencie

Page 15: LXC - kontener pingwinów

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

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

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

Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012

CGroups

Page 19: LXC - kontener pingwinów

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

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

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

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

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

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

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

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

Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012

Kolorowe klocki raz jeszcze

Page 28: LXC - kontener pingwinów

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

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

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

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

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

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

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

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

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

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

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

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

Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012

Porównanie

OpenVZ Linux-VServer

LXC

Page 41: LXC - kontener pingwinów

Grzegorz Nosek | Dni Wolnego Oprogramowania, Bielsko-Biała 2012

That's all, folks!

Pytania?