==== 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]]