LXC/LXD Container SingelServer (Ubuntu 22.04)

Hallo Freunde der Sonne,

ich bin sonst kein Freund von Containern, für die getrennte Bereitstellung von Diensten auf einem System sind diese dann aber doch ganz fein.

LXC/LXD Container SingelServer (Ubuntu 22.04)

Quellen

Vorteile/Nachteile Container

Was sind denn die Vorteile von Containern:

  • sie starten sehr schnell
  • die Bereitstellung ist schnell
  • man kann Snapshots nutzen (dank ZFS)
  • sie können eine eigene IP haben, oder eben auch nur Portweiterleitungen
  • benötigen keine Virtualisierungsfunktionen der CPU

Was sind die Nachteile:

  • geringere Sicherheit, da nur Unterprozess des Hauptbetriebssystems
  • Container sind an das Betriebssystem ihres Hosts gebunden (bei Linux aber zum Glück nicht an die Distro)

Installation

Wie üblich geht die Installation einfach, verwendet im Hintergrund aber ein Snap-Image:

apt-get install lxd-installer

Danach kann die Initialisierung der Installation per Assistent wie folgt vorgenommen werden:

lxd init

Verwendete Einstellungen bei meinen Installationen:

  • New Storage – yes
  • Storage-Type – zfs
  • ZFS-Pool – yes
  • Partition – eine nicht gemountete LVM-Partition (lxd-lv)
  • Loop Size – 5GB
  • MAAS – no
  • new Bridge – yes
  • Brdige-Name – lxdbr0
  • IPv4 – yes
  • IPv6 – no
  • LXD netwok avaibility – no
  • stale cached images – yes
  • print YAML – yes

Konfiguration Netzwerk

Die Netzwerkkonfiguration der Bridge kann über den Client LXC auch nachträglich konfiguriert werden,
im Beispiel für eine Bridge die später geroutet wird (daher kein NAT benötigt), aber DNS passend in die Zielsysteme übergeben soll:

lxc network set lxdbr0 ipv4.address 10.1.200.1/24
lxc network set lxdbr0 raw.dnsmasq dhcp-option=6,10.1.130.1,10.1.130.2
lxc network set lxdbr0 ipv4.nat false
lxc network set lxdbr0 ipv4.firewall true

Alle Einstellungen des Netzwerk können so eingesehen werden:

lxc network show lxdbr0

Die Konfigurationsdatei kann auch direkt bearbeitet werden mit:

lxc network edit lxdbr0

Der Inhalt könnte so aussehen (ggf. hier die Domain anpassen):

config:
dns.domain: <hierkoenntedeinedomainstehen.de>
ipv4.address: 10.1.128.1/24
ipv4.firewall: "true"
ipv4.nat: "false"
ipv6.address: none
raw.dnsmasq: dhcp-option=6,10.1.130.1,10.1.130.2
description: ""
name: lxdbr0
type: bridge
used_by:
- /1.0/profiles/default
- /1.0/instances/control1
- /1.0/instances/mariadb1
managed: true
status: Created
locations:
- none

Verwalten der Instanzen (ohne Cluster)

Das Anlegen und Löschen einer Instanz durch Verwendung eines Online-images, geht relativ einfach:

lxc launch ubuntu:22.04 beispielservername
lxc delete beispielservername

Danach ist ein leeres Containersystem am Laufen, erreichen lässt es sich intern wie folgt:

lxc exec beispielserver bash

Im Zweifel kann also auf SSH im Container verzichtet werden, generell werden die Container auch ohne Root-PW ausgeliefert.

Anzeigen der Container, stoppen, starten und neustarten kann man die Container über:

lxc list
lxc stop beispielserver 
lxc start beispielserver 
lxc restart beispielserver

Snapshots können erstellt, angezeigt, wiederhergestellt und entfernt werden:

lxc snapshot beispielserver snap0
lxc info beispielserver
lxc restore beispielserver
lxc delete beispielserver/snap0

Speicherverwaltung (Storage)

Die einfachste Übersicht bekommt man über eine direkte Abfrage des ZFS, diese bezieht sich aber nicht nur auf LXC/LXD:

zfs list

Via LXC/LXD kann man die Pool, deren Mitglieder und deren Auslastung wie folgt abfragen:

lxc storage list
lxc storage show default
lxc storage info default

Man kann auch die Konfigurationsdatei bearbeiten, wobei ich hiervon absehen würde:

lxc storage edit default

Ich würde ehr empfehlen über LVM die LV zu vergrößern und dann das ZFS zu expandieren…