
LXC (Linux Container) Ein Überblick Bernhard Wesely Trivadis Wien BASEL BERN BRUGES LAUSANNE ZÜRICH DÜSSELDORF FRANKFURT A.M. FREIBURG I.BR. HAMBURG MUNICH STUTTGART VIENNA 2014 © Trivadis LXC - ein Überblick - DOAG 2014 20.11.2014 AGENDA 1. Allgemeines 2. LXC Grundlagen § wie man an so einen Container kommt… 3. LXC Fortgeschrittenes § ein bisschen Hintergrundinformation… 4. Resourcen Management § ein wichtiges Thema in virtualisierten Umgebungen 5. Scripting § Weil es einfach ist, sinnvoll ist und Spass macht... 6. Zusammenfassung 2014 © Trivadis LXC - ein Überblick - DOAG 2014 20.11.2014 Allgemeines 2014 © Trivadis LXC - ein Überblick - DOAG 2014 20.11.2014 Virtualisationstechnologien § Viele unterschiedliche Vitualisationstechniken existieren § Die mit der meisten Verbreitung sind… § Hypervisor Virtualisation § Kernel-Level Virtualisation § VMWare, OracleVM § Solaris Zones § LDOMs, PowerVM § LXC § … § KVM,… Virtual Virtual Virtual Container Container Container Machine Machine Machine Root FS Root FS Root FS Kernel Kernel Kernel Hypervisor Kernel Hardware Hardware 2014 © Trivadis LXC - ein Überblick - DOAG 2014 20.11.2014 LXC Grundlagen 2014 © Trivadis LXC - ein Überblick - DOAG 2014 20.11.2014 LXC - Linux Container § LXC ist eine recht einfache Lösung § Während dem Start eines Containers passiert folgendes: § Holen eines neuen Namespaces aus jeder Namespaceklasse § Einbinden des rootfs Verzeichnises in den Container als /-Filesystem § Erstellen einer cgroup in jeder cgroup Klasse § LXC speichert alle Container an einem zentralen Ort § /var/lib/lxc – unter Ubuntu § /container – unter Oracle Linux § Für jeden Container wird dort ein Verzeichnis (Container Name) erstellt § In diesem Verzeichnis befinden sich - Das Config-File (namens config) und - ein rootfs Verzeichnis § Schliesslich wird eine Basis-Betriebssysteminstallation in dem rootfs Verzeichnis durchgeführt 2014 © Trivadis LXC - ein Überblick - DOAG 2014 20.11.2014 Voraussetzungen root@lxc01:~# lxc-checkconfig § LXC ist eigentlich nur ein Frontend für ein Kernel configuration not found at /proc/config.gz; searching... paar Kernel-Features Kernel configuration found at /boot/config-3.13.0-35-generic --- Namespaces --- § Der Kernel muss daher folgendes Namespaces: enabled unterstützen Utsname namespace: enabled Ipc namespace: enabled § Namespaces Pid namespace: enabled User namespace: enabled § cgroups Network namespace: enabled § Special Network settings Multiple /dev/pts instances: enabled --- Control groups --- § Die Userspace tools müssen installiert sein Cgroup: enabled Cgroup clone_children flag: enabled § Oracle Linux: yum install lxc Cgroup device: enabled § Ubuntu: apt-get install lxc Cgroup sched: enabled Cgroup cpu account: enabled Cgroup memory controller: enabled Cgroup cpuset: enabled § Der Befehl lxc-checkconfig überprüft ob --- Misc --- alle Voraussetzungen erfüllt sind Veth pair device: enabled Macvlan: enabled § Einfacher wird’s wirklich nicht mehr... ;-) Vlan: enabled File capabilities: enabled 2014 © Trivadis LXC - ein Überblick - DOAG 2014 20.11.2014 Ertellen eines Containers (1/2) § Container werden mittels des lxc-create Kommandos erstellt § erwartet werden mindestens zwei Argumente Standard-Templates: § -n <Name des Containers> lxc-alpine § Der Name des Containers und des Namespaces lxc-altlinux lxc-archlinux § und auch der Hostname im Container lxc-busybox § -t <Name des Templates> lxc-centos lxc-cirros § Templates sind eigentlich nur spezielle Shellskripte lxc-debian - Diese finden sich in /usr/share/lxc/template lxc-download § Fast alle Templates unterstützen eigene Argumente lxc-fedora lxc-gentoo § Diese können mittels "-- -<Parameter> <Value>” lxc-openmandriva übergeben werden lxc-opensuse lxc-oracle § -h lxc-plamo § Dies zeigt eine Kurzanleitung von lxc-create lxc-sshd § Wurde ein Template mit angegeben so werden dessen lxc-ubuntu spezifischen Argumente ebenfalls angezeigt lxc-ubuntu-cloud 2014 © Trivadis LXC - ein Überblick - DOAG 2014 20.11.2014 Erstellen eines Containers (2/2) root@lxc03:~# lxc-create -n cn-ol5u10 -t oracle -- -R 5.10 Host is Ubuntu 14.04 Create configuration file /var/lib/lxc/cn-ol5u10/config Downloading release 5.10 for x86_64 ... Setting up Install Process ... Downloading Packages: (1/121): MAKEDEV-3.23-1.2.x86_64.rpm | 135 kB 00:00 (121/121): zlib-1.2.3-7.el5.x86_64.rpm | 52 kB 00:00 ---------------------------------------------------------------------------------------- Total 2.0 MB/s | 82 MB 00:41 ... Running Transaction Installing : libgcc-4.1.2-54.el5.x86_64 1/121 Installing : rootfiles-8.1-1.1.1.noarch 121/121 ... Complete! Fixing (downgrading) rpm database from version 9 Rebuilding rpm database Patching container rootfs /var/lib/lxc/cn-ol5u10/rootfs for Oracle Linux 5.10 Configuring container for Oracle Linux 5.10 Added container user:oracle password:oracle Added container user:root password:root Container : /var/lib/lxc/cn-ol5u10/rootfs Config : /var/lib/lxc/cn-ol5u10/config Network : eth0 (veth) on virbr0 2014 © Trivadis LXC - ein Überblick - DOAG 2014 20.11.2014 Container Starten / Stoppen / Einloggen Verfügbare Befehle: § lxc-start -n <Container Name> -d lxc-attach lxc-autostart § Startet den Container im Vordergrund lxc-cgroup § mittels -d startet der Container im Hintergrund lxc-checkconfig lxc-clone § lxc-stop -n <Container Name> lxc-config lxc-console § Fährt das Gast-OS sauber herunter und beendet den LXC lxc-create § nach 60 Sek wird der Container dann jedoch gekillt lxc-destroy lxc-device lxc-execute lxc-freeze lxc-info § lxc-console -n <Container Name> lxc-ls § Verbindet zu einem Terminal im Container lxc-monitor lxc-snapshot § "Ctrl-a q” beendet die Verbindung mit dem Terminal lxc-start lxc-start-ephemeral § lxc-destroy –n <Container Name> -f lxc-stop § Zerstört (löscht) den Container aus dem Filesystem lxc-unfreeze lxc-unshare § -f (force) wird benötigt sollte der Container laufen lxc-usernsexec lxc-wait 2014 © Trivadis LXC - ein Überblick - DOAG 2014 20.11.2014 Container Config File § Standard Config File für einen Oracle Linux (5u10) Container root@lxc03:/var/lib/lxc/cn-ol5u10# cat config # Template used: /usr/share/lxc/templates/lxc-oracle # Parameters passed to the template: -R 5.10 # For additional config options, please look at lxc.container.conf(5) lxc.network.type = veth lxc.network.flags = up lxc.network.link = lxcbr0 lxc.network.hwaddr = 00:16:3e:f3:cf:81 lxc.rootfs = /var/lib/lxc/cn-ol5u10/rootfs # Common configuration lxc.include = /usr/share/lxc/config/oracle.common.conf # Container configuration for Oracle Linux 5.10 lxc.arch = x86_64 lxc.utsname = cn-ol5u10 lxc.cap.drop = sys_resource # Networking lxc.network.name = eth0 lxc.network.mtu = 1500 lxc.network.hwaddr = fe:21:d6:47:3a:20 2014 © Trivadis LXC - ein Überblick - DOAG 2014 20.11.2014 LXC Fortgeschrittenes 2014 © Trivadis LXC - ein Überblick - DOAG 2014 20.11.2014 Linux Namespaces § LXC verwendet Linux Namespaces um Prozesse zu kapseln § Namespaces für diverse Identifier wurden in den Linux Kernel hinzugefügt § pid - Prozesse root@lxc03:~# pstree § net - Netzwerk-Interfaces,… init─┬─acpid § mnt - Mount points, Filesysteme ├─atd … § uts - Hostname ├─sshd─┬─sshd───bash § user - UIDs │ └─sshd───bash───pstree § ipc - System V IPC ├─start_all.py───systemd ├─start_all.py───init─┬─dhclient │ ├─5*[mingetty] § Namespaces erlauben es einen │ ├─rsyslogd───3*[{rsyslogd}] │ └─sshd Namen einmal pro Namespace ├─start_all.py───init─┬─cron │ ├─dhclient wiederzuverwenden (zB. eth0) │ ├─5*[getty] │ ├─ntpdate │ ├─ntpdate───lockfile-create § Neue Prozesse übernehmen den │ ├─ondemand───sleep │ ├─rsyslogd───3*[{rsyslogd}] Namespace ihres Parent-Prozesses … └─sshd § Jeder Container erzeugt einen neuen Namespace und startet darin init § init erzeugt in einem Linux-System jeden weiteren Prozess § Somit läuft der komplette Prozess-Baum in dem neuen Namespace 2014 © Trivadis LXC - ein Überblick - DOAG 2014 20.11.2014 Backing Stores § lxc-create erlaubt es einen Backing Store zu spezifizieren § in diesem Backing Store liegen dann die Filesysteme § Die folgenden Backing Stores sind verfügbar § none / dir – erzeugt ein rootfs Verzeichnis im Container Verzeichnis § lvm – erzeugt ein neues LV in einer VG (Grösse auswählbar, Standard: 1GB) § btrfs – Erzeugt ein neues SubVolume für den Container § zfs – ähnlich wie btrfs, erzeugt ein neues ZFS Filesystem in einem ZPool § best – versucht der Reihe nach: btrfs, zfs, lvm und als letztes dir § Der Backing Store wird dann das root Filesystem des Containers § ähnlich zu chroot § Abhängig vom verwendeten Backing Store können LXC features wie Snapshots/Clones beschleunigt werden, da die nativen Features des backing Stores dafür verwendet werden 2014 © Trivadis LXC - ein Überblick - DOAG 2014 20.11.2014 Networking (1/2) § Veth § ain "veth-pair” wird erzeugt § Dies ist eine "network pipe" zwischen zwei Namespaces § Ein veth interface hängt am Host, das andere wechselt seinen Namespace auf den des Containers § Das Host-veth wird dann an eine Bridge angeschlossen § Welche mit Hilfe eines Masquerading Demons die Verbindung zur Aussenwelt herstellt § Dadurch ist es nicht möglich den Container von aussen zu erreichen! § Phys § Das physische Interface wechselt in den Namespace des Containers § Da ein Interface nur in einem Namespace existieren kann, verschwindet es vom Host! § Dies ist eine recht einfache Lösung, limitiert nur durch die Anzahl der Interfaces 2014 © Trivadis LXC - ein Überblick - DOAG 2014 20.11.2014 Networking (2/2) § macvlan Bridge § Erzeugt eine Bridge vom virtuellem zu dem physischen Interface § Jedes
Details
-
File Typepdf
-
Upload Time-
-
Content LanguagesEnglish
-
Upload UserAnonymous/Not logged-in
-
File Pages28 Page
-
File Size-