Mettre à jour des milliers de servers linux en un clin d'oeil avec Ctfreak
Jean-Yves Pellé
Posted on March 27, 2023
Vous cherchez à automatiser la mise à jour de vos serveurs sous linux ?
En lançant les mises à jour en parallèle ?
Sans devoir mettre en place une usine à gaz ?
Ne cherchez plus ce tuto est fait pour vous 😉.
Prérequis
- 1000 serveurs à mettre à jour (par exemple) :
- Ayant pour hostname
serverXXXXX.local
avecXXXXX
allant de 00001 à 01000 - Utilisant une distribution linux basée sur Debian (Debian, Ubuntu, Linux mint, ...)
- Accessibles via SSH sur le port 22 avec la même clef privée et un compte utilisateur
adminuser
pouvant lancer des commandessudo
sans demande de mot de passe
- Ayant pour hostname
- Une instance de Ctfreak (vous verrez ça s'installe très bien : pas de dépendance, pas de bdd à configurer) avec un compte administrateur, la Free Edition suffira.
Le script
Sur chaque serveur, ce script shell permettra d'effectuer la mise à jour :
#!/bin/bash
export DEBIAN_FRONTEND=noninteractive
sudo apt update
sudo apt upgrade -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold"
On retrouve le classique apt update/upgrade
enrichi de quelques éléments permettant de répondre automatiquement à toute question susceptible d'interrompre le script.
NB : Si vos serveurs sont sous Redhat (ou tout autre distribution basé sur RPM), je vous invite à adapter le script en conséquence.
Ctfreak
L'étape suivante sera d'utiliser ctfreak pour déployer et exécuter via SSH le script sur nos 1000 serveurs.
Connectez-vous à ctfreak avec votre compte administrateur.
Ajout de la clef SSH
Allez dans SSH Credential -> Bouton New SSH Credential
Ajoutez la clef privée SSH MySSHKey qui permet de se connecter aux serveurs et validez.
NB : Vous pouvez aussi vous connecter avec un mot de passe plutôt qu'une clef privée
Ajout des nodes
Un node désigne les paramètres de connexion à un serveur via SSH, les nodes sont regroupés en node sources.
Pour rappel, il y a 1000 serveurs, donc 1000 nodes à ajouter.
Il est bien sûr possible d'ajouter les nodes un par un via l'interface web, mais dans ce cas de figure, vous allez plutôt partir sur la création d'un node source dédié qui sera alimenté par un fichier yaml décrivant nos 1000 nodes.
Soit le fichier /home/adminuser/ctfreak-nodes.yaml
(accessible en lecture par le user faisant tourner l'instance de ctfreak) :
- name: server0001
tagNames:
- debian_server
- linux_server
username: adminuser
hostname: server0001.local
osFamily: UNIX
sshPort: 22
- name: server0002
tagNames:
- debian_server
- linux_server
username: adminuser
hostname: server0002.local
osFamily: UNIX
sshPort: 22
## ...
## Complétez avec les nodes 3 à 1000
## ...
Allez dans Nodes -> Bouton New External Node Source
Vérifiez que la clef SSH MySSHKey est bien sélectionnée comme Credential (ctfreak s'en servira pour se connecter aux nodes via SSH),
puis validez pour créer le node source Linux Servers (ce dernier resynchronisera ses nodes à partir du fichier yaml toutes les 2 heures).
Si le fichier yaml a bien été reconnu, vous devriez voir la liste suivante :
Ajout de la tâche
Allez dans Projects -> Bouton New Project
Validez pour créer le projet Sysadmin.
Cliquez sur le bouton New Task.
Validez pour créer la tâche Upgrade debian servers.
Cette tâche déploiera et exécutera le script shell :
- sur tous les nodes correspondants au tag #debian_server
- à chaque 1er jour du mois à 4h du matin
Exécution de la tâche
Pour éviter d'attendre le 1er du mois pour voir ce que ça donne 😉, exécutez la tâche en cliquant sur le bouton Execute.
L'exécution est lancée, cliquez alors sur l'identifiant d'exécution #T0ZJX pour consulter son avancement pour chaque node.
Une fois l'exécution terminée, il se peut que quelques nodes soient en échecs (timeout sur l'ouverture de connexion SSH, repo des packages indispo au lancement du apt-update, problème de DNS, ...) :
Après avoir coché le filtre Failed only pour n'afficher que les nodes en échecs et consulter les logs pour fixer le souci (ici un problème de DNS),
vous pouvez lancer une nouvelle exécution pour retraiter uniquement les nodes en échecs via un simple clic sur Re-execute failed nodes.
Conclusion
Vous voilà avec un process fiable de mise à jour de vos serveurs.
Pour ceux qui voudraient aller plus loin, voici quelques suggestions d'amélioration :
- Ajouter une notification par mail en cas d'échec de mise à jour.
- Ajouter des serveurs Redhat:
- Ajouter 1000 nouveaux nodes avec les tags redhat_server, linux_server.
- Dupliquer la tâche Upgrade debian servers en Upgrade redhat servers et l'adapter en conséquence.
- Créer une tâche Upgrade all servers de type workflow pour lancer en parallèle (PRO Edition) ou séquentiellement (FREE Edition) les tâches Upgrade debian servers et Upgrade redhat servers.
Posted on March 27, 2023
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.