Wir haben mehrere Rechner im Einsatz, die als LXC/LXD-Hosts dienen. Auf diesen Rechnern wollen wir Basiscontainer von ubuntu-1804 und ubuntu-2004 bereitstellen, von denen dann eigene Container abgeleitet werden können.
Die Basiscontainer sind speziell angepasst an unsere Infrastruktur.
Da wir das mehrfach benötigen, verwende ich für das Aufsetzen eine automatisierte Lösung auf Basis von Ansible
Die nachfolgende Beschreibung geht von diesen Randbedingungen aus:
- ulinuc … Rechner, auf dem Ansible läuft
- hetzner-de … Rechner, der als LXC/LXD-Host dient
- ubuntu-2004 … einer der Basiscontainer, die auf dem LXC/LXD-Host laufen sollen
- ubuntu-1804 … ein weiterer Basiscontainer, die auf dem LXC/LXD-Host laufen sollen
Die hier vorgeschlagene Lösung ist eine Variante von derjenigen vom 2020-11-01. Sie kommt ohne erweiterte Zugriffe auf den LXC/LXD-Host aus und benötigt auch keine lokale LXD-Installation.
Grundinstallation und -konfiguration des LXC/LXD-Hosts
Die Grundinstallation erfolgt manuell:
- Im Wesentlichen eine minimale Ubuntu-2004-Server-Installation
- Vollverschlüsselung der Festplatte
- Entschlüsseln via DROPBEAR/SSH
Die nachfolgende Konfiguration erfolgt mittels Ansible. Nichts spezielles, es werden diese Module/“Befehle” verwendet:
- snap
- lvol
- lxd_profile
- lxd_container
Grundinstallation des LXC-Basiscontainers
Die Standard-Variante des LXC-Basiscontainers wird erzeugt mittels “lxd_container”.
Anpassen des LXC-Basiscontainers
Die Anpassung des LXC-Basiscontainers erfolgt mittels Ansible. Grob müssen wir diese Schritte durchführen:
- LXC-Basiscontainer zu Ansible hinzufügen
- Ansible-Tasks mit
delegate_to
/delegate_facts
ausführen
Ansible-Plugin sshlxd.pc installieren
- Ordner “connection_plugins” anlegen
- Datei sshlxd.py in diesem Ordner ablegen
LXC-Basiscontainer zu Ansible hinzufügen
Wir brauchen diese Variablen:
- Name des LXC/LXD-Hosts – lxd_host: hetzner-de
- Name des LXC-Basiscontainers – container_name: ubuntu-2004
- Name des LXC-Basiscontainers in Ansible – container_inventory_hostname: hetzner-de_ubuntu-2004
Der Name des LXC-Basiscontainers in Ansible sollte eine Kombination aus Name des LXC/LXD-Hosts und Name des LXC-Basiscontainers sein, da er eindeutlich sein soll und wir gleichnamige LXC-Basiscontainer auf allen unseren LXC/LXD-Hosts verwenden.
Im Ansible-Playbook sieht das dann so aus:
1 2 3 4 5 6 |
|
Ansible-Tasks mit delegate_to
/delegate_facts
ausführen
Hier ein Beispiel für einen Ansible-Task, der eine Datei in dem LXC-Basiscontainer ablegt:
1 2 3 4 5 6 7 8 |
|
Zu beachten sind die beiden Zeilen mit delegate_to
/delegate_facts
.
Links
- running tasks via a guest host inside an lxclxd
- add_host
- (noch) nicht verwendet: