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)
  • Editer la configuration DNS : dns

Sur l'hyperviseur lxd, lancer le script new-incus-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 ( incus config set ${hostname} limits.cpu 1)
  • RAM = 256Mo (incus config set ${hostname} limits.memory 256MB)
  • Pas de Swap (incus config set ${hostname} limits.memory.swap true)
  • Taille du / = 5Go (incus config device set ${hostname} root size 5GB)
  • Gestion stricte de la RAM (incus config device set ${hostname} limits.memory.enforce: hard)

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

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

root@karadoc:/root# ./new-incus-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 incus list comme “RUNNING”.

Pour obtenir un prompt sur le conteneur directement depuis l'hyperviseur, on peut utiliser la commande incus 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

Dans le cas d'une configuration dual-stack ipv4 et ipv6 (karadoc par ex) on ne touche pas à bird / tayga et on utilise les résolveurs suivants:

cat /etc/resolv.conf
nameserver 80.67.169.12 
nameserver 2a00:5881:8100:1000::3
options timeout:1

Normalisation et installation des bases avec ansible

Depuis l'hyperviseur, utiliser la commande incus exec ${HOSTNAME} bash pour obtenir un prompt sur notre nouveau conteneur.<HTML></li></HTML>

Ajouter sa clef ssh, temporairement, au /root/.ssh/authorized_keys du conteneur nouvellement crée<HTML></li></HTML>

Vérifier que l'on parvient à se connecter en SSH depuis sa machine.<HTML></li></HTML>

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 base.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.

mettre à jour https://wiki.hadoly.fr/documentation_technique:machines

Déploiement agent zabbix

Exécuter le playbook “zabbix_client.yml”: ansible-playbook -l CHANGEME zabbix_client.yml #CHANGEME étant le nom du container défini dans le fichier hosts.

On peut ignorer l'erreur “create zabbix mysql account”

À ce stade, le client zabbix est fonctionnel et la machine s'est normalement enregistrée auprès de https://infra.opendoor.Fr/zabbix

Les éléments suivants sont surveillés: * espace disque * disponibilité de la machine * nombre de processus en cours de fonctionnement * charge cpu, mémoire et IO

Une fois les services déployées sur la machine, il est possible de se connecter sur le serveur zabbix pour parfaire la supervision

Déploiement backup

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