Neuerungen in LXC 1.0

Aus Thomas-Krenn-Wiki
Wechseln zu: Navigation, Suche

Die Userspace Tools LXC erlauben die Verwaltung von Linux Container. Im Februar 2014 ist LXC 1.0 erschienen, die erste als stabil deklarierte Version.

Wichtige Neuerungen

LTS Support

LXC 1.0 ist Teil von Ubuntu 14.04 LTS (trusty) und erhält somit 5 Jahre Support. Außerdem wird LXC 1.0 Teil von Debian 8 (Jessie) sein.

liblxc API

Es wurde ein eigenes API für LXC geschaffen.

Unprivileged Containers dank User Namespaces

Ab Linux Kernel 3.12 sind unprivileged Container möglich. Dies bedeutet, dass Container als normale Benutzer ("kein root") gestartet werden können. Ein Ausbruch aus dem Container verschafft somit nicht automatisch root-Rechte.

Notwendig ist dafür eine Überarbeitung des ID Mappings und des Cgroup Managements (cgmanager) geworden.

Prebuilt Containers

Es gibt nun vorgefertigte Container unter http://jenkins.linuxcontainers.org.

Dies wurde notwendig, da ohne root Rechte das Bootstrapping von Systemen (z.b. debootstrap) problematisch sein kann.

Container Nesting

Es können nun auch Container innerhalb eines Containers gestartet werden. Dafür ist ebenfalls der cgmanager erforderlich.

Cgmanager

Bisher wurden in LXC die Cgroups über ein Filesystem Interface (z.b. /sys/fs/cgroup/) verwaltet. Für die Einführung von Container Nesting und auch des immer komplexer gewordenen Codes für die Cgroup-Verwaltung, wurde mit Cgmanager Abhilfe geschaffen. Dieser wird über ein D-Bus Interface angesprochen.

Im Paket cgmanager-utils ist der Client cgm enthalten. Damit können z.B. Werte abgefragt werden:

root@lxc:/# cgm getvalue memory '/lxc/test_container' memory.usage_in_bytes
method return sender=(null sender) -> dest=(null destination) reply_serial=1
   string "1676333056"

Oder alternativ via lxc-cgroup:

lxc-cgroup --name test_container memory.usage_in_bytes
1676333056

Für die Swap Limitierung muss bei Ubuntu 14.04 der Kernelparameter swapaccount=1 hinzugefügt werden. Dies erfolgt in /etc/default/grub, danach muss noch update-grub2 aufgerufen werden mit anschließendem Neustart.

Devices hinzufügen

Mit dem Kommando lxc-device können Geräte vom Host in einen Container hinzugefügt werden.

Configuration Templates

In /usr/share/lxc/config/ gibt es nun Templates die als Basis für einzelne lxc Container Konfigurationsdateien verwendet werden können. Durch diese mittels "include" eingebunden Templates bekommt man eine wesentlich schlankere Container Konfiguration.

z.B. centos.common.conf, ubuntu.common.conf, ...

Auto Start via Container Konfiguration

Bisher wurde der automatische Start von Containern via Symlinks in /etc/lxc/auto gelöst.

Nun ist diese Funktionalität mit der Container Konfigurationsdatei möglich

lxc.start.auto = 1

Beispiele auf der Kommandozeile

Die im Container konfigurierte IP kann nun am Host ausgegeben werden:

lxc-ls --fancy 
NAME    STATE    IPV4        IPV6                                    AUTOSTART     
--------------------------------------------------------------------------------- 
p1      RUNNING  10.0.3.128  2607:f2c0:f00f:2751:216:...  YES (ubuntu) 
p2      RUNNING  10.0.3.165  2607:f2c0:f00f:2751:216:...  YES 

Das Attach Kommando funktioniert nun ohne Probleme mit einem aktuellem 14.04er Ubuntu Kernel.

lxc-attach -n test_container 

Weitere Informationen


Foto Christoph Mitasch.jpg

Autor: Christoph Mitasch

Christoph Mitasch arbeitet in der Abteilung Web Operations & Knowledge Transfer bei Thomas-Krenn. Er ist für die Betreuung und Weiterentwicklung der Webshop Infrastruktur zuständig. Seit einem Studienprojekt zum Thema Hochverfügbarkeit und Daten Replikation unter Linux beschäftigt er sich intensiv mit diesem Themenbereich. Nach einem Praktikum bei IBM Linz schloss er sein Diplomstudium „Computer- und Mediensicherheit“ an der FH Hagenberg ab. Er wohnt in der Nähe von Linz und ist neben der Arbeit ein begeisterter Marathon-Läufer und Jongleur, wo er mehrere Weltrekorde in der Team-Jonglage hält.


Das könnte Sie auch interessieren

Cgroup Werte von LXC Linux Containern
Event-News: LinuxCon Europe 2012
LXD Grundbefehle