Setup LXD per migrazioni live su server remoti (lxc copy/move remote:…)

Seguiamo le seguenti istruzioni:

https://www.stgraber.org/2016/04/12/lxd-2-0-remote-hosts-and-container-migration-612/ https://www.stgraber.org/2016/04/25/lxd-2-0-live-migration-912/

Setup sulle nostre macchine: ct1-r3-s06 e ba1-r1-s06

  • Verifico se la porta 8443 è aperta in entrambi i nodi nella configurazione di LXC:

    # lxc config show
      config:
         core.https_address: 10.4.0.88:8443
         core.trust_password: true
         storage.zfs_pool_name: vd_lxd_container
    
  • Se non è presente la stringa core.https_address:

    lxc config set core.https_address 10.3.0.120:8443
    
  • Definisco una password che mi verrà chiesta piu’ avanti:

    lxc config set core.trust_password $PASSWORD
    

Inserire una password al posto di $PASSWORD

  • Verifico che sul server sia apera la porta 8443 su iptables, in caso aggiungo la regola:

    -A INPUT -s 10.0.0.0/8 -p tcp -m state --state NEW -m tcp -m multiport --dports ...,8443,... -j ACCEPT
    
  • Aggiungo i server remoti sui rispettivi nodi, es. su ct1-r3-s06:

    # lxc remote add ba1-r1-s06 10.4.0.88
    (viene richiesta la passwd settata prima)
    
    # lxc remote list
    +-----------------+------------------------------------------+---------------+--------+--------+
    |      NAME       |                   URL                    |   PROTOCOL    | PUBLIC | STATIC |
    +-----------------+------------------------------------------+---------------+--------+--------+
    | ba1-r1-s06      | https://10.4.0.88:8443                   | lxd           | NO     | NO     |
    +-----------------+------------------------------------------+---------------+--------+--------+
    
  • Se necessario installo criu per permettere la migrazione live:

    # apt install criu
    
  • Sul server remoto deve essere presente il profilo LXC che usano i container da copiare, altrimenti la copia fallisce.

    Supponendo che il profilo richiesto sia chiamato maas, si puo’ copiare sul server remoto con questo comando:

    # lxc profile copy maas $SERVER_REMOTO:maas
    
  • Puo’ essere necessario adattare la configurazione del profilo sul server remoto, in particolare la configurazione dei device di rete (nomi dei bridge sul server fisico su cui appoggiano le interfacce dei container). La configurazione si edita con il seguente comando:

    # lxc config edit maas
    
  • Esempi di copia, migrazione e snapshot:

    Copy: lxc copy xenial-test ba1-r1-s06:xenial-test
    Move: lxc move xenial-test 10.4.0.88:xenial-test
    Snapshot: lxc snapshot xenial-juju xenial-juju-snap01 [--stateful]
    
  • Puo’ essere necessario editare la configurazione di rete del container prima di accenderlo. Ad esempio, il file /etc/network/interfaces sul server fisico si trova al seguente path:

    /var/lib/lxd/containers/$NOME_CONTAINER/rootfs/etc/network/interfaces
    

Note

  • Inizialmente la copia remota falliva con errore “connection failed to 192.168.122.1:8443”. L’indirizzo è quello assegnato al bridge virbr0, che non era usato. Togliendo di mezzo il bridge il problema si è risolto.
  • La copia/move funziona “bene” solo da Catania a Bari, viceversa fallisce. Forse dipende dalla configurazione di zfs a Catania cambiata “al volo”?
  • Snapshot stateful funziona solo a Catania e solo sulle prime istanze (prima del cambio di zfs pool), a Bari non ha mai funzionato.