Linux Container (LXC) bieten eine performante Möglichkeit zum Betrieb virtualisierter Linuxsysteme. Hierbei wird auf Kernelebene ein Linux mit eingeschränkten Rechten emuliert d.h. damit lassen sich weitere "Linuxe" virtualisieren. Hauptvorteile: Kernel ab 2.6.26 unterstützen Container ohne weitere Patches und es entsteht kaum Overhead, außer zusätzlich benötigter Plattenplatz (welcher aus finanzieller Sicht am günstigsten zu haben ist).
Dokumentation: https://wiki.debian.org/LXC
Installation & Konfiguration
Vorraussetzungen schaffen:
aptitude install lxc bridge-utils debootstrap mkdir /cgroups echo "cgroup /cgroup cgroup defaults 0 0" >> /etc/fstab mount /cgroups
- Hier wird die notwendige userspace Software installiert und "cgroup" gemountet
- virtuellen Linux Container anlegen:
mkdir -p /var/lib/lxc/lxc1 /usr/lib/lxc/templates/lxc-debian -p /var/lib/lxc/lxc1 }}}
- An dieser Stelle wird im zunächst erstellten Verzeichnis ein Debiansystem mittels debootstrap installiert. "lxc1" ist der Name des virtuellen Systems.
/var/lib/lxc/lxc1 nach eigenen Wünschen anpassen und folgende Zeilen für das Netzwerk hinzufügen:
lxc.utsname = lxc1 lxc.network.type = veth lxc.network.flags = up lxc.network.link = br0 # lxc.network.name = eth0 lxc.network.hwaddr = 00:FF:12:34:56:78 lxc.network.ipv4 = 172.16.2.2/24
Im virtuellen Linux sollte die Netzwerkadresse in etc/network/interfaces mit der "lxc.network.ipv4" übereinstimmen.
Netzwerkkrate in Bridgemode betreiben. Dazu in /etc/network/interfaces beispielsweise folgendes schreiben:
#allow-hotplug eth0 #iface eth0 inet dhcp auto br0 iface br0 inet dhcp bridge_ports eth0 bridge_fd 0 bridge_maxwait 0
- eth0 ist in diesem Fall die verwendete Netzwerkarte
- Damit ist erstmal alles Grundsätzliche für den Betrieb von Linux Containern vorbereitet.
Test
Der Aufruf von lxc-checkconfig sollte eine ähnlich erfreuliche Ausgabe wie diese hervor bringen:
lxc-checkconfig Kernel config /proc/config.gz not found, looking in other places... Found kernel config file /boot/config-2.6.32-5-686 --- Namespaces --- Namespaces: enabled Utsname namespace: enabled Ipc namespace: enabled Pid namespace: enabled User namespace: enabled Network namespace: enabled Multiple /dev/pts instances: enabled --- Control groups --- Cgroup: enabled Cgroup namespace: enabled Cgroup device: enabled Cgroup sched: enabled Cgroup cpu account: enabled Cgroup memory controller: missing Cgroup cpuset: enabled --- Misc --- Veth pair device: enabled Macvlan: enabled Vlan: enabled File capabilities: enabled
memory controller ist im Standard-Debian-Squeeze-Kernel nicht aktiv aber für's erste auch nicht weiter wild. Wer mag baut sich einen eigenen Kernel und aktiviert “General Setup -> Control Group support -> Resource Counters -> Memory Resource Controller for Control Groups
Details dazu finden sich z.B. hier: http://blog.foaa.de/2010/05/lxc-on-debian-squeeze/#building-a-kernel-with-memory-controller
Container anlegen
- lxc-create -n lxc1 -t debian -- -r jessie
im laufenden Betrieb
Den eben erzeugten Linuxcontainer starten:
lxc-start -n lxc1
Konsole in das virtuelle System:
lxc-console -n lxc1
- Kann im ersten Moment ein Weilchen dauern, bis die Konsole angezeigt wird.
ein zusätzliches -t 1 nutzt das erste tty, -t 2 das zweite usw...
- alternativ läuft in dem Container ein ssh Server...
Stop mittels:
lxc-stop -n lxc1
weiterführende Links
- wer sich für die Hintergründe vpn Linuxcontainern aka cgroups interessiert findet hier eine ausführlihce Beschreibung:
- ausführliche Beschreibung zum Bridging: