LXD Installation

LXD ist das Managment System für LXC Container und alles was es darum herum so gibt. Will man mit Container arbeiten, so installiert man sich erst mal dieses System. Mit LXD hat man dann beispielsweise Zugriff auf die LXC/LXD Image Server.

Wenn wir von LXD reden, dann meinen wir i.d.R. den Manager für die Container, wenn wir von LXC reden, dann meinen wir i.d.R. die Container selbst. Die Begriffe lassen sich aber nicht immer so ganz klar trennen. Historisch ist alles aus den cgroups des Linux Kernel entstanden, die erste Anwendung waren die Container, im Laufe der Zeit entwickelte sich LXD darum herum und inzwischen sind LXD und LXC eigentlich kaum noch zu trennen. Die nächst höhere Abstraktion ist dann die cloud-init die uns hier aber nicht interessiert, der Fokus dieses Artikels liegt auf den roots, den Containern.

Früher hat man LXD noch über den Paketmanager der Distributionen installiert, inzwischen wird das nicht mehr empfohlen und geht zum Teil auch gar nicht mehr. Inzwischen können aktuelle Versionen des LXD nur über snap installiert werden. Fun fakt Snap selbst installiert Container und das LXD wird (nur noch) in einem solchen Container ausgeliefert.

Das ganze erinnert ein wenig an Matrjoschka Puppen, das Bild stimmt aber nicht ganz, da die Container (je nach Konfiguration) auch Zugriff auf Komponenten des HOST Systems haben können. Aber es zeigt, dass wir mit der Installation von LXD eigentlich schon die ersten Container Anwendungen nutzen und es zeigt, wie weit man mit solchen Containern gehen kann. Als erstes starten wir also mit der Installation des snap. Um snap zu installieren:

$ sudo -H apt install snapd

Über die Paketverwaltung snap die erforderlichen Pakete installieren (s.a. Introduction to LXD projects):

$ sudo -H snap install lxd

Zur Installation gehört noch eine initiales Setup des LXD in dem der Image-Server als auch z.B. die Eigenschaften des (LXD) Netzwerks eingestellt werden.

$ sudo -H lxd init --auto

Weitere Hinweise siehe: snapcraft LXD

Will man sicher später mal das LXD Setup anschauen, so kann man das mit dem Kommando sudo lxd init --dump, die Ausgabe entspricht dem YAML Format und könnte in etwa so aussehen.

config: {}
networks:
- name: lxdbr0
  config:
    ipv4.address: 10.246.86.1/24
    ipv4.nat: "true"
    ipv6.address: fd42:8c58:2cd:b73f::1/64
    ipv6.nat: "true"
  description: ""
  managed: true
  type: bridge
storage_pools:
- name: default
  config:
    size: 15GB
    source: /var/snap/lxd/common/lxd/disks/default.img
    zfs.pool_name: default
  description: ""
  driver: zfs
profiles:
- name: default
  config: {}
  description: Default LXD profile
  devices:
    eth0:
      name: eth0
      nictype: bridged
      parent: lxdbr0
      type: nic
    root:
      path: /
      pool: default
      type: disk

In obiger Ausgabe sehen wir unter networks, dass die IP Adresse des Managers 10.246.86.1/24 ist und es sich um ein Class C Netzwerk im Adressraum 10.0.0.0 handelt.

Unter storage_pools sehen wir, dass die LXD Datenbank im default eine (maximale) Größe von 15GB hat. Genau genommen ist diese Datenbank das Image eines Squash Dateisystems.

Weiter sieht man, dass es ein default Profil gibt. Aus den Profilen werden (u.A.) die Container gebaut. Hier sieht man, das ein solcher Container (intern) mit einem Netzwerkadapter (eth0) ausgestattet wird und pool: default sagt uns, dass dieser Container in dem Squash Dateisystem aufgebaut werden würde, dass wir unter storage_pools: unter dem Namen default sehen.