documentation_technique:lxc:creation_conteneur_en_utilisant_lxd

Création d'un conteneur

  • Déterminer le hostname du futur conteneur
  • Déterminer son adresse IPv6 principale en utilisant le plan_adressage. Vérifier que l'adresse choisie n'est pas utilisée (au minimum en essayant de la ping6)

Sur l'hyperviseur lxd, lancer le script new-lxc-ct.sh situé dans /root. Aucun paramètre n'est nécessaire. Le script demande le hostname et l'IPv6 principale a utiliser directement sur la stdin. Ce script crée le conteneur, le démarre, change ses dépots apt, le met à jour, installe python (nécessaire pour qu'ansible fonctionne par la suite) et définie les limites suivantes :

  • CPU = 1 ( lxc config set ${hostname} limits.cpu 1)
  • RAM = 256Mo (lxc config set ${hostname} limits.memory 256MB)
  • Pas de Swap (lxc config set ${hostname} limits.memory.swap true)
  • Taille du / = 5Go (lxc config device set ${hostname} root size 5GB)

Il est possible d'adapter ces limites après coup si nécessaire, en utilisant les commandes lxc config ... .

Pour mémoire, la sortie du script quand il s'exécute correctement :

root@karadoc:/root# ./new-lxc-ct.sh 
CT hostname ?
test-doc
IPv6 addr ? (ex: 2001:0912:3064:127::1)
2001:912:3064:134::1
Creating test-doc
Starting test-doc
Get:1 http://ftp.rezopole.net/ubuntu xenial InRelease [247 kB]
Get:2 http://ftp.rezopole.net/ubuntu xenial-updates InRelease [102 kB]                
[...]
Fetched 16.3 MB in 6s (2508 kB/s)                                                                                                                                                                                 
Reading package lists... Done
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  libpython-stdlib libpython2.7-minimal libpython2.7-stdlib python-minimal python2.7 python2.7-minimal
Suggested packages:
  python-doc python-tk python2.7-doc binutils binfmt-support
The following NEW packages will be installed:
  libpython-stdlib libpython2.7-minimal libpython2.7-stdlib python python-minimal python2.7 python2.7-minimal
0 upgraded, 7 newly installed, 0 to remove and 18 not upgraded.
Need to get 3915 kB of archives.
After this operation, 16.6 MB of additional disk space will be used.
Get:1 http://ftp.rezopole.net/ubuntu xenial-updates/main amd64 libpython2.7-minimal amd64 2.7.12-1ubuntu0~16.04.1 [339 kB]
[...]
Fetched 3915 kB in 0s (11.8 MB/s)
Selecting previously unselected package libpython2.7-minimal:amd64.
[...]
Device eth0 added to test-doc
Fin de l'install, restart CT

Une fois le conteneur crée, il doit apparaître dans le résultat de la commande lxc list comme “RUNNING”.

Pour obtenir un prompt sur le conteneur directement depuis l'hyperviseur, on peut utiliser la commande lxc exec ${HOSTNAME} bash

Mise en place du réseau

  • Sur l'hyperviseur, éditer le fichier /etc/bird/bird6.conf, et ajouter dans le “protocol static” une route pour le conteneur nouvellement crée. Ceci permet d'ajouter une route statique vers le /64 du conteneur. Cette même route est ensuite propagée automatiquement vers le routeur Perceval via bgp.
  • Vérifier la conf de bird6 avec la commande birdc6 conf check
  • Si la conf est ok, lancer la reconfiguration de bird6 avec la commande birdc6 conf
  • Si tous s'est bien passé, le conteneur est joignable depuis Internet (en IPv6) !

Si jamais le conteneur a besoin d'être accédé en IPv4 depuis l'extérieur, sur perceval:

  • éditer le fichier /etc/tayga.conf pour y ajouter une ligne map faisant correspondre une IPv4 disponible avec l'ipv6 principale du conteneur. Puis redémarrer taygua systemctl restart tayga pour appliquer le changement.
  • éditer le fichier /etc/bird/bird.conf pour y ajouter une route en /32 vers l'interface nat64. Puis vérifier que la conf est syntaxiquement correcte avec birdc configure check; si c'est le cas, appliquer la conf avec birdc configure

Normalisation et installation des bases avec ansible

  • Depuis l'hyperviseur, utiliser la commande lxc exec ${HOSTNAME} bash pour obtenir un prompt sur notre nouveau conteneur.

  • Ajouter sa clef ssh, temporairement, au /root/.ssh/authorized_keys du conteneur nouvellement crée

  • Vérifier que l'on parvient à se connecter en SSH depuis sa machine.

  • Sur sa propre machine, installer ansible et cloner le dépot git qui contient les rôles ansible:

    sudo apt install git ansible
    mkdir ~/Hadoly
    cd ~/Hadoly
    git clone https://git.hadoly.fr/CS_CT/ansible_hadoly.git
    cd admin/ansible
    
  • Editer le fichier ansible/hosts et ajouter le nouveau CT dans la section new, en suivant le modèle: 2001:912:3064:XXX ansible_user=root ansible_port=22

  • Exécuter le playbook ansible etckeeper.yml: ansible-playbook -l new etckeeper.yml

  • Éditer le fichier roles/base/vars/main.yml ajouter la nouvelle machine. Executer le playbook main.yml avec la commande ansible-playbook -l new base.yml

  • Se connecter au conteneur en SSH avec son compte attitré.

  • Initialiser son mot de passe sudo avec sudo passwd-init.

  • Supprimer sa clef ssh du /root/.ssh/authorized_keys.

  • Redémarrer ssh avec systemctl restart ssh.

  • A partir de cet instant, il faut se connecter en ssh sur le port 6900.

  • Sur sa machine, éditer a nouveau le fichier ansible/hosts, supprimer l'hote de la section new, le mettre dans la section conteneur avec tous les autres.

  • git commit et git push pour posser sur le dépot git les modifications liées à l'ajout du nouveau conteneur.

  • Ne pas oublier d'etc-commiter sur toutes les machines où il y a eu des changements de conf.

  • documentation_technique/lxc/creation_conteneur_en_utilisant_lxd.txt
  • Dernière modification : il y a 14 mois
  • de thomas