Comment utiliser des environnements de marionnettes dans Linux pour mettre à jour en toute sécurité un agent

Comment utiliser des environnements de marionnettes dans Linux pour mettre à jour en toute sécurité un agent

Objectif

Créez et utilisez des environnements de marionnettes pour tester une nouvelle configuration avant de mettre à jour un système de production en direct.

Système d'exploitation et versions logicielles

  • Système opérateur: Toute distribution Linux majeure e.g. Ubuntu, Debian, Centos
  • Logiciel: marionnette et marionnette

Exigences

Accès privilégié au serveur maître de marionnette et au nœud client de marionnette.

Conventions

  • # - Exige que les commandes Linux soient exécutées avec des privilèges racine soit directement en tant qu'utilisateur racine, soit par l'utilisation de Sudo commande
  • $ - Étant donné les commandes Linux à exécuter en tant qu'utilisateur non privilégié régulier

Introduction

La plupart des installations de marionnettes commencent la vie en tant que serveur maître exécutant une seule branche. Le maître contient tous les manifestes et autres configurations pour tous les agents de marionnettes qui y sont synchronisés. C'est un bon endroit pour commencer, mais il arrivera rapidement un moment où une mise à jour doit être poussée qui a le potentiel de briser un serveur de production. Espérer le meilleur n'est pas la meilleure façon de continuer.

La marionnette fournit les outils pour séparer les branches de configuration entières. Ce sont appelés environnements. Un environnement de marionnette est un moyen de fournir un groupe isolé de nœuds d'agent avec leur propre configuration dédiée. Chaque environnement contient une arborescence de configuration de marionnette entière et peut être considéré comme un serveur de maître de marionnettes distinct.

Comment les environnements de marionnettes sont-ils utilisés?

Le scénario typique des environnements, et c'est celui que nous explorons dans ce guide, est de créer un environnement de test, à côté de l'environnement de production, où une nouvelle configuration de marionnette est créée.

Une façon de tester la nouvelle configuration dans l'environnement de test est de mettre à jour une copie d'un serveur de production, comme un instantané VM. Tout problème sera observé sur la machine de test et la configuration de la marionnette modifiée pour corriger cela. Cependant, il n'est pas toujours possible d'avoir un serveur de test pour vérifier les modifications de l'environnement de test.

Une autre méthode et celle que nous explorerons ici est d'exécuter manuellement l'agent de marionnettes sur le serveur de production, mais utiliser plusieurs options qui feront la synchronisation de l'agent de marionnette avec l'environnement de test, mais montrent uniquement ce qui se serait passé sans apporter de modifications réelles. Cela mettra en évidence toutes les erreurs qui auraient eu lieu dans une mise à jour complète sans provoquer de temps d'arrêt.

Création d'environnements de marionnettes

Dans ce guide, nous créerons une instance de marionnette très simple avec un maître de marionnette et un nœud d'agent de marionnette. Le serveur Puppet Master sera configuré pour avoir deux environnements; tests et développement.

Ce guide suppose que vous avez un serveur maître de marionnette et un nœud d'agent de marionnette capable de vous connecter au maître de marionnette.

Nous allons créer deux environnements sur le maître des marionnettes et dans ces environnements, nous créerons un manifeste de marionnettes très simple qui crée un fichier texte sur le nœud de l'agent.

L'emplacement par défaut pour les modifications de configuration de la marionnette en fonction de la distribution que vous utilisez. Sur Ubuntu 18.04LTS, la version qui sera utilisée dans ce guide, l'emplacement est à / etc / marionnette. D'autres distributions (et la documentation officielle) peuvent la placer à / etc / puppetLabs /. Cependant, une fois que vous êtes dans le répertoire principal de configuration des marionnettes, tous les sous-répertoires sont les mêmes pour toutes les distributions.

Instructions

Créer les répertoires environnementaux

Les environnements et leur configuration existent tous sous le / etc / marionnette / code / annuaire. Sur Ubuntu 18.04 Ce répertoire est vide sur l'installation, nous devrons donc d'abord créer les deux répertoires d'environnement de niveau supérieur avec les deux commandes suivantes:

# MKDIR -P / ETC / PUPPET / CODE / ENVIRONNES / TEST 

Tout nouveau nœud d'agent se connectera automatiquement développement environnement à moins que le environnement la variable est définie sur une alternative dans le [agent] Section de la fantoche.confli fichier sur le nœud d'agent.



Création de deux site simples.PP manifeste

Le placer.pp Le fichier est le principal manifeste d'où l'agent de marionnette commence à construire un catalogue de l'état de machine souhaité. Nous allons créer deux très simples placer.pp Fichiers dans les deux environnements qui créent le même fichier sur le nœud d'agent. La seule différence est qu'ils mettent un texte différent dans le fichier.

La première placer.pp Le fichier sera l'environnement de production à:

/ etc / marionnette / code / environnements / développement / manifestes / site.pp

Ce fichier doit avoir le contenu suivant:

fichier '/ tmp / exemple.txt ': assure => présent, mode => "0644", contenu => "de l'environnement de développement \ n", 
Copie

Utilisez votre éditeur de texte préféré pour créer et remplir ce fichier.

Ce manifeste garantit qu'un fichier est présent à / TMP / Exemple.SMS et contient le texte «de l'environnement de développement» (le «\ n» ajoute une nouvelle ligne à la fin du fichier qui est une bonne pratique et arrête la marionnette montrant un message d'avertissement lorsqu'il n'est pas présent).

Le deuxième manifeste sera sous l'environnement de test à:

/ etc / marionnette / code / environnements / tests / manifestes / site.pp

Ce fichier contient les éléments suivants:

fichier '/ tmp / exemple.txt ': assure => présent, mode => "0644", contenu => "de l'environnement de test \ n", 
Copie

Ceci est presque identique au fichier dans l'environnement de développement, la seule différence étant que le texte du fichier indique qu'il est venu de l'environnement de test.

Évaluation de nouvelles configurations de marionnettes à partir de l'environnement de test

Le nœud d'agent ne se synchronisera par défaut que avec l'environnement de développement. Nous allons d'abord instruire manuellement l'agent de marionnettes de se synchroniser avec le serveur maître de marionnettes et de créer et d'appliquer le placer.pp que nous avons créé dans l'environnement de développement.

Cela se fait avec la commande suivante:

# Puppet Agent --environment = Production - Test 

Le --test L'option fait que l'agent de marionnettes exécute un catalogue exécuté au premier plan avec journalisation verbeux. Toutes les mises à jour ou modifications seront appliquées au nœud.

Le --environnement = production L'option est là pour indiquer clairement que nous synchronions à partir de l'environnement de production. Habituellement, cela serait configuré dans la configuration principale de l'agent de marionnettes et n'aurait pas besoin d'être inclus dans la commande.

Lorsque la commande ci-dessus est exécutée, nous obtenons la sortie suivante:

 Info: Utilisation de l'environnement configuré Infos «Production»: Récupération.Info net: Application de la version de configuration '1527680694' Avis: / étape [Main] / Main / Fichier [/ TMP / Exemple.txt] / assurez-vous: contenu défini comme 'md5 59f9ce1d4aad5fd155db7cccc2478a93b' Avis: catalogue appliqué dans 0.02 secondes 

Cette sortie indique ce fichier / TMP / Exemple.SMS n'était pas présent, donc l'agent de marionnette l'a créé comme indiqué dans le placer.pp manifeste. Les courses suivantes n'auront pas le Avis: lignes comme le / TMP / Exemple.SMS Le fichier existe avec le contenu correct.

Maintenant que l'état du nœud d'agent est d'accord avec le manifeste de l'environnement de développement, nous pouvons tester ce qui se passerait si nous appliquions le manifeste alternatif de l'environnement de test.

Afin de tester et de ne pas commettre la nouvelle configuration, nous devons exécuter la commande suivante:

# Puppet Agent --environment = Test - Test --noop 

Comme vous pouvez le voir --environnement L'option a été modifiée en test et nous avons inclus l'option supplémentaire --noop. Cette option fait que l'agent exécute une course à sec. Cela signifie que l'agent de marionnette n'apportera aucune modification réelle au nœud d'agent mais produira toute la sortie comme si elle l'avait fait.

Cela nous permet d'évaluer ce qui se serait passé si la nouvelle configuration était appliquée au serveur. Dans ce cas, la sortie de la commande ci-dessus ressemble:

 Info: Utilisation de l'environnement configuré «Test» Info: récupération de pluginfacts Info: récupération du plugin Info: récupération des localités Info: Chargement Facts Info: Application de la version de configuration '1527683748' Avis: / stage [Main] / main / fichier [/ tmp / exemple.txt] / contenu: --- / tmp / exemple.txt 2018-05-30 12:19:16.205774048 +0000 +++ / tmp / puppet-file20180530-21610-8ipzur 2018-05-30 12:35:48.740982652 +0000 @@ -1 +1 @@ -from L'environnement de développement + à partir de l'environnement de test Avis: / étape [Main] / Main / Fichier [/ TMP / Exemple.txt] / contenu: current_value 'md5 59f9ce1d4aad5fd155db7cccc2478a93b', devrait être 'md5 abbb8f68df144a5673d 62ae6c4a036ed' (noop) Avis: class [main] déclenché «actualiser» à partir de 1 avis d'événement: catalogue appliqué dans 0.04 secondes 

Les lignes les plus intéressantes ici sont les suivantes:

 -De l'environnement de développement + à partir de l'environnement de test 

Ceux-ci indiquent avec le symbole moins (-) ce qui est changé et avec le symbole plus (+) ce qui est changé pour. Dans cet exemple, c'est le texte du fichier.

Toute cette sortie indique que la nouvelle configuration aurait été appliquée avec succès et le contenu de / TMP / Exemple.SMS aurait été modifié. S'il s'agit de l'état souhaité du serveur de production, alors les modifications placer.pp Le fichier peut être fabriqué en toute sécurité dans l'environnement de production.



Identifier une erreur

Une nouvelle configuration de marionnettes ne s'applique pas toujours sans erreur et c'est la raison pour laquelle il doit toujours être testé avant d'être appliqué à un système de production. Nous forcerons une erreur dans cette situation en faisant une erreur délibérée dans les tests placer.pp déposer. Nous essaierons de définir les autorisations du fichier pour 0944 qui n'est pas une autorisation valide et provoquera une erreur.

Maintenant, quand nous courons:

 # Puppet Agent --environment = Test - Test --noop 

Nous verrons la sortie suivante:

 INFO: Utilisation de l'environnement configuré «Test» Info: récupération des pluginfacts Info: Récupération du plugin Info: Récupération des localités Info: Chargement des faits Erreur: Échec du catalogue: mode de paramètre Échec sur le fichier [/ tmp / exemple.txt]: La spécification du mode de fichier n'est pas valide: "0944" (fichier: / etc / puppetcode / Environments / Testing / Manifests / Site.pp, ligne: 1) 

La capture d'écran suivante montre cette sortie car elle serait présentée sur la ligne de commande:

La marionnette indiquera toute erreur en les imprimant en rouge.

Les couleurs nous ont immédiatement fait savoir qu'il y aurait eu une erreur dans la tentative d'utilisation de la nouvelle configuration de marionnette à partir de l'environnement de test. Cependant, comme nous avons utilisé le --noop Option Aucune erre n'a été engagée dans le serveur de production.

Conclusion

Lorsque vous exécutez des systèmes de production gérés par Puppet, il est toujours important de tester une nouvelle configuration avant son application. L'utilisation des outils fournit que la marionnette fournit pour créer des environnements alternatifs où une nouvelle configuration peut être créée et évaluée en toute sécurité par rapport aux systèmes de production signifie moins d'erreurs et moins de temps d'arrêt.

Tutoriels Linux connexes:

  • Choses à installer sur Ubuntu 20.04
  • Une introduction à l'automatisation Linux, des outils et des techniques
  • Choses à faire après l'installation d'Ubuntu 20.04 Focal Fossa Linux
  • Fichiers de configuration Linux: 30 premiers
  • Téléchargement Linux CD / DVD en direct
  • Linux peut-il obtenir des virus? Exploration de la vulnérabilité de Linux…
  • Téléchargement Linux
  • Choses à faire après l'installation d'Ubuntu 22.04 Jammy Jellyfish…
  • Comment doubler Kali Linux et Windows 10
  • Comment mettre à jour Firefox sur Linux