LXC-Container für Schulserver – 01

Tja, unser Server-Equipment ist alt, der Windows­server stammt von 2003 und somit wird es Zeit für eine Konsoli­dierung. Damit muss eine Linux­lösung her, typischer­weise ressourcen­schonend und nachhaltig. Vorgesehen als Grundlage ist ein virtualisiertes/containerisiertes System von Ubuntu­servern. Hier wird der Vorgang dokumentiert (ich versuche es nach­voll­zieh­bar auf­zuzeichnen).

Aufsetzen des Servers=Wirtsystem

Zuerst wird auf einer freien Device ein Ubuntuserver 16.04 installiert. Warum? Es gibt 1 Million Anleit­un­gen und Doku­men­ta­tionen dazu. Die Instal­lation auf einen alten IBM-Server (RAID 1 _ 2 x 500 GIG, Prozessor, Intel Xeon E5450 @ 2.33GHz) verläuft problemlos, im Grunde geht es darum, bei der Installation im richtigen Moment alles zu bestätigen, was an Nachfragen kommt. Server fertig installiert, Updates gezogen? Nun wird die Umgebung für LXC-Container initialisiert.
sudo apt install lxc lxc-templates wget bridge-utils
Bridge-Utils ermöglichen den einfachen Zugriff auf die Container über das Netzwerk, dazu später.

Wichtig ist der Einsatz des ZFS-Filesystems, was einige besondere Extras bei der Erstellung von ›Snapshots‹, also den Momentaufnahmen und Sicherungen eines bestehenden Containers zulässt.
sudo apt install zfsutils-linux
Damit nicht genug, es gibt mittlerweile ›LXD‹, das den Vorgang der Containerisierung sehr unterstützt.

Initialisierung von LXD

sudo lxd init
Nun werden einige wichtige Paramater zur Erstellung von Containern abgefragt, die man im Grunde mit den ›Default‹-Lösungen durchwinken kann.

Do you want to configure a new storage pool (yes/no) [default=yes]? yes
Name of the storage backend to use (dir or zfs) [default=zfs]: zfs
Create a new ZFS pool (yes/no) [default=yes]? yes
Name of the new ZFS pool [default=lxd]: lxd

Die Abfrage nach Erstellung eines Block-Devices ist interessant, führt aber zu weiteren Komplikation, also nicht bestätigen.
Would you like to use an existing block device (yes/no) [default=no]?
Die Abfrage nach der Größe eines Loop-Devices wird unterschiedlich beantwortet:
Size in GB of the new loop device (1GB minimum) [default=15]: 15
Ich war heute großzügig und habe 20 GB eingetragen.
Netzwerk-Einstellungen (klärt sich später):
Would you like LXD to be available over the network (yes/no) [default=no]? no
Einrichtung einer Netzwerk-Brücke: ja, braucht man später.
Do you want to configure the LXD bridge (yes/no) [default=yes]? yes
Abfrage eines IPv4-Subnets, ›Yes‹.Damit wird ein privates Subnet für die Container eingerichtet. ›Ok‹ auswählen und weiter.

Abfrage einer IPv4-Addresse akzeptieren.
Angabe einer validen CIDR-Maske akzeptieren.
Abfrage der ersten DHCP-Addresse akzeptieren, dasselbe für die letzte DHCP-Addresse, sowie für die maximale Menge von DHCP-Clients des privaten Netzwerks.

›Yes‹ auswählen auf die Abfrage von NAT des IPv4-Traffics.

Konfiguration eines IPv6 Subnets: ›No‹.
Folgendes wird angezeigt: LXD has been successfully configured.

Aufsetzen erster Container

Eingabe von lxc list , um die vorhandenen Container zu sehen:
lxc list
+------+---------+------+------+------------+-----------+
| NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS |
+------+---------+------+------+------------+-----------+

Na klar, es ist nichts da, deswegen gibt es keine Einträge in dieser schicken Tabelle. Um einen ersten Systemcontainer zu erstellen, bauen wir uns ein Ubuntu (andere Lösungen werden z.B. mit dem Befehl lxc image list images: gelistet):
lxc launch ubuntu:16.04 c1
Es wird ein Ubuntu-Image gesaugt und innerhalb von 5 Minuten ein Container namens ›c1‹ erzeugt und gestartet. Anzeige z.B. so:
lxc list
+------+---------+------+------+------------+-----------+
| NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS |
+------+---------+------+------+------------+-----------+
| c1 | RUNNING | 10.10.10.100 (eth0) | | PERSISTENT | 0 |
+------+---------+------+------+------------+-----------+

Besuche den Container in Root-Shell mittels lxc exec c1 bash. Alle weiteren Befehle laufen wie bekannt auf einem vollständigen Ubuntu-System mit Shell.

Fazit

Die Einrichtung eines Wirtsystems (Ubuntu-Server) ist einfach. Danach folgen die Installation und Initialisierung eines gewünschten Containers (damit kann man sehr viele Dinge an/einstellen, dazu später).

Weiterführende Links

Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>