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
- How to list VM images in LXD (Linux Containers) – nixCraft (cyberciti.biz)
- Forwarding host ports to LXD instances – LXDWARE
- Run Linux Containers with LXC/LXD on Ubuntu 22.04|20.04|18.04 – TechViewLeo
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…