Migriere LXD von DEB/PPA zu snap

Eine Migrationsanleitung für lxd Package zu snap lxd.
LXD ist nicht mehr länger als Package aus dem Repository (deprecated lxd PPA) verfügbar. Es gibt jetzt dafür ein lxd-Snap.

Hinweis: Die LTS lxd Version 2.0.x ist nicht von Umzug auf ein snap betroffen. lxd LTS wird bis 2021 unterstützt.

Hier ist eine Anleitung für Ubuntu 16.04

Hinweis: Mir ist keine Möglichkeit bekannt den Umzug ohne Downtime der LXC Container durchzuführen.

Aktualisieren und neustarten

Es empfiehlt sich vor der Migration alle Pakete auf den neuesten Stand zu bringen. Hosts Server aktualisieren:

$ sudo apt update
$ sudo apt upgrade
$ sudo apt autoclean && sudo apt autoremove -y
$ sudo purge-old-kernels   # optional

LXD überprüfen

Überprüfe die Versionen für die Migration

$ lxd --version
2.21

Prüfe den Pfad zum lxd binary:

$ which lxd
/usr/bin/lxd

Prüfe die apt Richtlinie für lxd

$ apt policy lxd
lxd:
  Installiert:           2.21-0ubuntu3~16.04.1
  Installationskandidat: 2.21-0ubuntu3~16.04.1
  Versionstabelle:
 *** 2.21-0ubuntu3~16.04.1 100
        100 http://ch.archive.ubuntu.com/ubuntu xenial-backports/main amd64 Packages
        100 /var/lib/dpkg/status
     2.0.11-0ubuntu1~16.04.4 500
        500 http://ch.archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages
     2.0.2-0ubuntu1~16.04.1 500
        500 http://security.ubuntu.com/ubuntu xenial-security/main amd64 Packages
     2.0.0-0ubuntu4 500
        500 http://ch.archive.ubuntu.com/ubuntu xenial/main amd64 Packages

Überprüfe die snapd lxd version:

$ snap info lxd
name:      lxd
summary:   System container manager and API
publisher: canonical
contact:   https://github.com/lxc/lxd/issues
description: |
  LXD is a container manager for system containers.

  It offers a REST API to remotely manage containers over the network, using an
  image based workflow and with support for live migration.

  Images are available for all Ubuntu releases and architectures as well as for
  a wide number of other Linux distributions.

  LXD containers are lightweight, secure by default and a great alternative to
  virtual machines.
snap-id:         J60k4JY0HppjwOjW8dZdYc8obXKxujRu
channels:
  stable:        2.21        (5866) 49MB -
  candidate:     2.21        (6005) 51MB -
  beta:          ↑
  edge:          git-1708565 (6012) 55MB -
  2.0/stable:    2.0.11      (5384) 21MB -
  2.0/candidate: 2.0.11      (5384) 21MB -
  2.0/beta:      ↑
  2.0/edge:      git-8130261 (5944) 20MB -

Installiere LXD snap

$ sudo snap install lxd

LXD migrieren

$ sudo lxd.migrate

Nach der Migration ausloggen und wieder einloggen. Wenn ihr euch nicht wieder einloggt oder eine neue Shell startet, wird die lxd binary nicht gefunden und es gibt eine Fehlermeldung:

$ lxd info
bash: /usr/bin/lxc: No such file or directory

LXD Pfad überprüfen:

$ which lxd
/snap/bin/lxd

Überprüfe ob lxd nun als snap läuft:

$ ps aux | grep lxd
root     15411  0.0  0.0   4504  1756 ?        Ss   16:29   0:00 /bin/sh /snap/lxd/5866/commands/daemon.start
root     15481  0.0  0.0 160920  3440 ?        Sl   16:29   0:00 lxcfs /var/snap/lxd/common/var/lib/lxcfs -p /var/snap/lxd/common/lxcfs.pid
root     15489  3.6  0.9 1483412 76388 ?       Sl   16:29   0:26 lxd --logfile /var/snap/lxd/common/lxd/logs/lxd.log --group lxd
…

Überprüfe ob die lxc Container:

$ lxc list

So, alles erledigt. lxd ist nun als snap installiert und alle Container wurden migriert.

Nachträgliche Tasks

Die konfigurierten remotes wurden anscheinend nicht umgezogen:

$ lxc remote list

Remotes erneut hinzufügen:

$ lxc remote add lxd02 192.168.XXX.XXX

Ebenfalls sind die Zertifikate neu weil der LXD Server auch neu ist. Somit müssen alle Zertifikate erneuert bzw. die Remotes neu konfiguriert werden.

Alternatives vorgehen bei der Migration

Mein vorgehen bei der Migration um eventuellen Problemen vorzubeugen.
Dafür braucht es einen zweiten lxd-Server:

  • Beide lxd-Server sollten möglichst identisch konfiguriert sein (Netzwerke, Profile, Storage usw.). Empfohlen ist auch eine ähnliche Leistung (Hardware) damit alle Container darauf betrieben werden können, falls dies nötig ist.

  • Beide werden jeweils als remote beim anderen lxd-Server hinzugefügt.

    lxd01$ lxc remote add lxd02 192.168.XXX.XXX
    lxd02$ lxc remote add lxd01 192.168.XXX.XXX
    

Ablauf:

  1. Alle (oder alle wichtigen) lxc Container werden auf einen lxd-Server verschoben. Ich habe dafür folgenden Befehl verwendet (cold migration):

    $ lxc stop <container> && lxc move <container> lxd02:<container> && lxc start lxd02:<container>
    

    Ebenfalls werden alle Snapshots umgezogen mit move. Je nach grösse des Containers, dauert dies auch entsprechend lange.

  2. Update zu snapd-lxd ausführen auf dem einen lxd-Server mit den unwichtigen Containern.

  3. Alle (wichtigen) lxc Container auf den aktualisierten, neuen snapd-lxd-Server zurückverschieben.

    $ lxc stop <container> && lxc move <container> lxd01:<container> && lxc start lxd01:<container>
    

Falls ihr sowieso zwei lxd-Server habt, könnt ihr ebenfalls so vorgehen und alle lxc zuerst auf den einen Server verschieben und dann umgekehrt für den zweiten Server dasselbe.

Mehr zum Thema lxd und snap Migration:

PPA Alternative xenial-backports

Via xenial-backports ist lxd noch immer verfügbar:

$ sudo apt install -t xenial-backports lxd lxd-client

Mehr Infos zu lxd Ubuntu Backports: