6. Rôle serveur de conteneurs

6.1. Configuration des interfaces du routeur

Une fois la machine virtuelle serveur de conteneurs lancée, les premières étapes consistent à lui attribuer un nouveau nom et à configurer les interfaces réseau pour joindre le routeur voisin et l'Internet.

Q14.

Comment changer le nom de la machine virtuelle ?

Il faut éditer les deux fichiers /etc/hosts et /etc/hostname en remplaçant le nom de l'image maître vm0 par le nom voulu. Il est ensuite nécessaire de redémarrer pour que le nouveau nom soit pris en compte par tous les outils du système.

etu@vm0:~$ sudo sed -i 's/vm0/srvr/g' /etc/hosts
etu@vm0:~$ sudo sed -i 's/vm0/srvr/g' /etc/hostname
sudo: impossible de résoudre l'hôte vm0: Échec temporaire dans la résolution du nom
etu@vm0:~$ sudo reboot

Q15.

Comment appliquer la configuration réseau IPv4 et IPv6 de l'interface du serveur ?

Consulter les pages de manuels du fichier de configuration système à l'aide de la commande man interfaces.

Il existe plusieurs possibilités pour configurer une interface réseau. Dans le contexte de ces manipulations, on utilise le fichier de configuration fourni par la distribution Debian GNU/Linux : /etc/network/interfaces.

La configuration de base fournie avec l'image maître suppose que l'interface obtienne un bail DHCP pour la partie IPv4 et une configuration automatique via SLAAC pour la partie IPv6.

La configuration IPv4 par défaut doit être éditée et remplacée par une configuration statique tandis que la configuration IPv6 doit toujours se faire automatiquement via SLAAC.

Voici une copie du fichier /etc/network/interfaces de la maquette.

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug enp0s6
iface enp0s6 inet static
        address 192.0.2.2/24
        gateway 192.0.2.1
        dns-nameserver 9.9.9.9

6.2. Installation du gestionnaire de conteneurs LXD

Sur l'hôte serveur, la gestion des conteneurs est confiée à LXD. Pour des raisons de rapidité de mise en œuvre, on choisit de passer par le gestionnaire de paquets snapd pour l'installation des outils.

Q16.

Comment installer le gestionnaire de paquets snap sur une distribution Debian GNU/Linux ?

Effectuer une recherche dans les paquets fournis via APT.

Il existe tout simplement un paquet appelé snapd.

$ sudo apt install snapd

Q17.

Comment installer le gestionnaire de conteneurs LXD ?

Rechercher dans la liste des snaps.

Le snap s'appelle tout simplement lxd.

$ sudo snap install lxd
2020-09-13T22:59:46+02:00 INFO Waiting for automatic snapd restart...
Warning: /snap/bin was not found in your $PATH. If you've not restarted your session since you
         installed snapd, try doing that. Please see https://forum.snapcraft.io/t/9469 for more
         details.

lxd 4.4 from Canonical✓ installed

On peut lister les snaps installés.

$ snap list
Name    Version   Rev    Tracking       Publisher   Notes
core18  20200724  1885   latest/stable  canonical✓  base
lxd     4.4       16926  latest/stable  canonical✓  -
snapd   2.45.3.1  8790   latest/stable  canonical✓  snapd

Q18.

Comment faire pour que l'utilisateur normal etu ait la capacité à gérer les conteneurs ?

Rechercher le nom du groupe système correspondant à l'utilisation des outils LXD.

Il faut que l'utilisteur normal appartienne au groupe système lxd pour qu'il est tous les droits sur la gestion des conteneurs.

$ sudo adduser etu lxd

Attention ! il faut se déconnecter/reconnecter pour bénéficier de la nouvelle attribution de groupe. On peut utiliser la commande groups pour vérifier le résultats.

$ groups
etu adm cdrom floppy sudo audio dip video plugdev staff netdev lxd

6.3. Configuration du gestionnaire de conteneurs LXD

Q19.

Quelle est l'instruction de configuration initiale du gestionnaire LXD ?

Utiliser l'aide de la commande lxd.

C'est l'instruction lxd init qui nous intéresse.

Voici une copie d'écran de son exécution.

$ lxd init
Would you like to use LXD clustering? (yes/no) [default=no]:
Do you want to configure a new storage pool? (yes/no) [default=yes]:
Name of the new storage pool [default=default]:
Name of the storage backend to use (ceph, btrfs, dir, lvm) [default=btrfs]:
Create a new BTRFS pool? (yes/no) [default=yes]:
Would you like to use an existing empty disk or partition? (yes/no) [default=no]:
Size in GB of the new loop device (1GB minimum) [default=13GB]:
Would you like to connect to a MAAS server? (yes/no) [default=no]:
Would you like to create a new local network bridge? (yes/no) [default=yes]: no
Would you like to configure LXD to use an existing bridge or host interface? (yes/no) [default=no]: yes
Name of the existing bridge or host interface: enp0s6
Would you like LXD to be available over the network? (yes/no) [default=no]:
Would you like stale cached images to be updated automatically? (yes/no) [default=yes]
Would you like a YAML "lxd init" preseed to be printed? (yes/no) [default=no]: yes
config: {}
networks: []
storage_pools:
- config:
    size: 13GB
  description: ""
  name: default
  driver: btrfs
profiles:
- config: {}
  description: ""
  devices:
    eth0:
      name: eth0
      nictype: macvlan
      parent: enp0s6
      type: nic
    root:
      path: /
      pool: default
      type: disk
  name: default
cluster: null

Q20.

Quelle est l'instruction qui permet d'afficher le profil par défaut des conteneur ?

Rechercher dans les options de la commande lxc.

Voici un exemple d'exécution.

$ lxc profile show default
To start your first instance, try: lxc launch ubuntu:18.04

config: {}
description: Default LXD profile
devices:
  eth0:
    name: eth0
    nictype: macvlan
    parent: enp0s6
    type: nic
  root:
    path: /
    pool: default
    type: disk
name: default
used_by: []

Q21.

Quelle est l'instruction de lancement d'un conteneur ?

Rechercher dans les options de la commande lxc.

Tester son exécution avec un conteneur de type debian/bullseye.

Voici un exemple d'exécution.

$ lxc launch images:debian/bullseye container0
Creating container0
Starting container0
$ lxc ls
+------------+---------+------+-------------------------------------------+-----------+-----------+
|    NAME    |  STATE  | IPV4 |                   IPV6                    |   TYPE    | SNAPSHOTS |
+------------+---------+------+-------------------------------------------+-----------+-----------+
| container0 | RUNNING |      | fda0:7a62:1ae:0:216:3eff:fe22:6075 (eth0) | CONTAINER | 0         |
+------------+---------+------+-------------------------------------------+-----------+-----------+