LXC (Linux Container) Ein Überblick

LXC (Linux Container) Ein Überblick

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

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    28 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us