Linux Containers LXC

Aus Thomas-Krenn-Wiki
Zur Navigation springen Zur Suche springen

Linux Containers (LXC) ist eine Container Virtualisierung unter Linux. LXC ist Bestandteil des Linux-Kernels seit Version 2.6.29.

Linux Container basieren auf Kernel Namespaces für die Ressourcen Isolation und auf Cgroups für die Ressourcen Limitierung. LXC kann sowohl für Applikations-Container als auch für komplette System-Container (unterschiedliche Linux Distributionen) verwendet werden.

Distributions Support

  • RHEL 6 unterstützt Linux Containers experimentiell [1]
  • seit Debian Squeeze (6.0). Achtung jedoch wegen fehlendem Memory Controller Support in Cgroups [2]
  • seit Ubuntu Lucid (10.04) unterstützt
  • seit openSUSE 11.2

Userspace Tools

Hier ein kurzer Auszug von verfügbaren Userspace Tools:

  • lxc-start / lxc-stop
    • Starten eines Containers
    • Bsp: lxc-start -n vm0 -f /lxc/vm0/config
  • lxc-create / lxc-destroy
    • Instanz eines Containers anlegen, entfernen
  • lxc-ls
    • zeigt erstellte sowie laufende Container an
  • lxc-attach
    • Kommando direkt in Container ausführen (default: bash)
  • lxc-console
    • lxc-console -n vm0 --tty 1
  • lxc-checkconfig
    • überprüft Kernel Namespace und Cgroup Support
  • generell lxc-*

Beispiele

# lxc-start -n vm0 -f /lxc/vm0/config -d
# lxc-attach -n vm0
root@vm0 # hostname
vm0
# exit
# lxc-console -n vm0 -t 3
Type <Ctrl+a q> to exit the console
Debian GNU/Linux 6.0 vm0 tty3
vm0 login:
# lxc-ls
vm0
# lxc-freeze -n vm0
# lxc-info -n vm0
'vm0' is FROZEN
# lxc-stop -n vm0

Integration

Pacemaker

Für Pacemaker ist seit 5/2011 ein Resource Agent für LXC verfügbar:

OpenQRM

Auch für OpenQRM existiert seit kurzem ein LXC Plugin:

Cgroups Fork Demo

Diese Demo zeigt, dass bei entsprechender Konfiguration der Cgroups, die Linux Container gut gegenseitig abgeschottet sind und sogar eine Fork-Bombe andere System kaum beeinflusst.

  1. Als normaler User eine Bash starten und die PID ausgeben lassen
    • bash
    • echo $$
  2. Als root User eine neue cgroup namens "forktest" anlegen
    • cd /sys/fs/cgroup/cpu
    • mkdir forktest
    • cd forktest
  3. Die CPU Shares limitieren auf 512 statt dem Default Wert 1024
    • echo 512 > cpu.shares
  4. Die PID der Bash der Cgroup zuweisen
    • echo <PID> > tasks
  5. Ident dazu erstellen Sie im Verzeichnis memory eine Cgroup namens "forktest"
    • cd /sys/fs/cgroup/memory
    • mkdir forktest
    • cd forktest
    • echo 512M > memory.limit_in_bytes
    • echo 512M > memory.memsw.limit_in_bytes
    • echo <PID> > tasks
  6. Jetzt starten wir in der Bash, die wir als normaler User in Schritt 1 gestartet haben, folgende Perl Fork Bomb:
    • perl -e "fork while fork"
  7. Jetzt wird die Load auf dem System sehr stark ansteigen (z.B. "load average: 11899.22, 8936.07, 5346.59"), das System ist aber noch immer nutzbar, da der RAM für die Fork Bomb eingeschränkt ist und es weniger CPU Shares bekommt, als der normale Benutzer (1024 vs. 512).
  8. Um die Fork Bombe wieder zu beenden, kann folgendes Bash Skript verwendet werden. Dafür ist wichtig, dass unter dem User keine perl Befehle laufen, die man beibehalten möchte.
#!/bin/bash
for (( c=1; c<=100; c++ ))
do
  killall -9 perl
done

Einzelnachweise

Weitere Informationen

Vorträge


Foto Werner Fischer.jpg

Autor: Werner Fischer

Werner Fischer arbeitet im Product Management Team von Thomas-Krenn. Er evaluiert dabei neueste Technologien und teilt sein Wissen in Fachartikeln, bei Konferenzen und im Thomas-Krenn Wiki. Bereits 2005 - ein Jahr nach seinem Abschluss des Studiums zu Computer- und Mediensicherheit an der FH Hagenberg - heuerte er beim bayerischen Server-Hersteller an. Als Öffi-Fan nutzt er gerne Bus & Bahn und genießt seinen morgendlichen Spaziergang ins Büro.


Das könnte Sie auch interessieren

Cgroup Werte von LXC Linux Containern
LXD Grundbefehle