==== Creation conteneur en utilisant incus ====
====== Création d'un conteneur ======
===== Étapes préliminaires : =====
* Déterminer le hostname du futur conteneur
* Déterminer son adresse IPv6 principale en utilisant le [[documentation_technique:plan_adressage]]. Vérifier que l'adresse choisie n'est pas utilisée (au minimum en essayant de la ping6)
* Editer la configuration DNS : [[documentation_technique:dns]]
===== Création effective du conteneur =====
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 ([[documentation_technique:machines:karadoc|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.
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 //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 [[documentation_technique:supervision|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 ======
Voir [[:documentation_technique:sauvegardes?s[]=borg#mise_en_œuvre|la page sauvegarde]]