Ceci est une ancienne révision du document !
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 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
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 : <code> 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 </code> 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: <code> cat /etc/resolv.conf nameserver 80.67.169.12 nameserver 2a00:5881:8100:1000::3 options timeout:1 </code> ====== 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: <code> sudo apt install git ansible mkdir ~/Hadoly cd ~/Hadoly git clone https://git.hadoly.fr/CS_CT/ansible_hadoly.git cd admin/ansible </code> 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
Voir la page sauvegarde