Wir haben mehrere Rechner im Einsatz, die als LXC/LXD- …">

Intelligente Lösungen
in neuer Dimension

Ansible: Grundkonfiguration eines LXC-Containers

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

  1. Ordner “connection_plugins” anlegen
  2. 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
- name: Add container '' to the inventory as ''
  add_host:
    name: ""
    ansible_host: ":"
    ansible_connection: sshlxd
    changed_when: false

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
- name: /tmp/uli-war da for ''
  copy:
    content: |
      Dies ist einfach irgendein Dateiinhalt,
      den wir gerne auf dem Container sehen wollen
    dest: /tmp/uli-war-da
  delegate_to: ""
  delegate_facts: true

Zu beachten sind die beiden Zeilen mit delegate_to/delegate_facts.

Links