Tutoriel de marionnettes pour débutants : Bases et DSL

⚡ Résumé intelligent

Puppet est une plateforme de gestion de configuration open source qui automatise le provisionnement, la configuration et la maintenance des serveurs. Elle utilise l'infrastructure en tant que code via un langage déclaratif dédié au domaine, remplaçant ainsi les tâches d'administration manuelles répétitives sur de vastes parcs de serveurs.

  • 🧩 Gestion de la configuration: Puppet maintient les serveurs, le stockage et les réseaux dans un état connu et cohérent et conserve un historique auditable de chaque modification.
  • ???? Agent principal Archistructure : Un serveur maître Linux compile les catalogues, et les agents sur Linux, Windows, Solarisou Mac OS les appliquent par-dessus des certificats sécurisés.
  • (I.e. Modèle de traction : Les agents se connectent toutes les 1800 secondes, récupèrent le code Puppet requis et corrigent toute dérive de configuration sur le nœud.
  • 🧠 DSL déclaratif : Écrit en Ruby, Puppet utilise un langage déclaratif ; vous définissez donc l’état final souhaité au lieu de commandes étape par étape.
  • 🧱 Blocs de construction: Les ressources, les classes, les manifestes et les modules structurent le code réutilisable, avec 49 types de ressources de base intégrés disponibles par défaut.
  • ⚙️ Exemple pratique de NTP : Définissez et déclarez une classe, validez-la avec puppet parser validate, puis appliquez le manifeste à l'aide de puppet apply.

Tutoriel Puppet expliquant les bases de la gestion de la configuration, l'architecture maître-agent et le DSL déclaratif

Puppet est un outil de gestion de configuration open source qui permet de définir l'infrastructure sous forme de code et de maintenir de vastes parcs de serveurs dans un état cohérent et reproductible. Avant d'apprendre Puppet, commençons par comprendre la gestion de configuration.

Qu'est-ce que la gestion des configurations ?

La gestion de la configuration est le processus de maintien des logiciels et des systèmes informatiques (serveurs, stockage, réseaux, etc.) dans un état connu, souhaité et cohérent. Elle permet également d'accéder à un historique précis de l'état du système à des fins de gestion de projet et d'audit.

Les administrateurs système effectuent principalement des tâches répétitives, comme l'installation et la configuration des serveurs. Ces professionnels peuvent automatiser ce travail en écrivant des scripts.

Cependant, cette tâche se complexifie lorsqu'il s'agit d'infrastructures de grande envergure. Des outils de gestion de configuration tels que Puppet ont été mis en place pour résoudre ces problèmes.

C'est quoi Marionnette ?

Fantoche Puppet est un outil de gestion de systèmes permettant de centraliser et d'automatiser le processus de gestion de la configuration. Il est également utilisé comme outil de déploiement logiciel.

Il s'agit d'un logiciel de gestion de configuration open source, largement utilisé pour la configuration, la gestion, le déploiement et l'orchestration de diverses applications et services au sein de l'infrastructure d'une organisation.

Puppet est spécialement conçu pour gérer la configuration de Linux et Windows systèmes. Il est écrit en Ruby et utilise son unique Domain Sspécifique Llangage (DSL) pour décrire la configuration du système.

Quelles sont les versions Puppet ?

Puppet est disponible en deux versions :

  • Marionnette Open SourceIl s'agit d'une version de base de l'outil de gestion de configuration Puppet, également connu sous le nom de Puppet Open Source. Elle est disponible directement sur le site web de Puppet et est distribuée sous licence Apache 2.0.
  • Puppet EnterpriseUne version commerciale offrant des fonctionnalités telles que la génération de rapports de conformité, l'orchestration, le contrôle d'accès basé sur les rôles, une interface graphique, une API et des outils en ligne de commande pour une gestion efficace des nœuds.

Que peut faire Puppet ?

Par exemple, supposons que vous ayez une infrastructure composée d'une centaine de serveurs. En tant qu'administrateur système, votre rôle est de veiller à ce que tous ces serveurs soient toujours à jour et fonctionnent parfaitement.

Administrateur système travaillant manuellement sur les serveurs
Administrateur système travaillant manuellement sur les serveurs

Pour ce faire, vous pouvez utiliser Puppet, qui vous permet d'écrire du code simple déployable automatiquement sur ces serveurs. Cela réduit l'intervention humaine et rend le processus de développement rapide et efficace.

Puppet automatise la gestion des serveurs
Puppet automatise la gestion des serveurs

Puppet remplit les fonctions suivantes :

  • Puppet vous permet de définir des configurations distinctes pour chaque hôte.
  • Cet outil permet de surveiller en continu les serveurs afin de vérifier que la configuration requise existe et n'a pas été modifiée. En cas de modification de la configuration, Puppet rétablit la configuration prédéfinie sur l'hôte.
  • Il permet également de contrôler chaque système configuré, de sorte qu'une modification centralisée est automatiquement appliquée partout.
  • Il est également utilisé comme outil de déploiement, car il déploie automatiquement des logiciels sur le système. Il implémente L'infrastructure sous forme de code, car les politiques et les configurations sont écrites sous forme de code.

Puppet DSL et paradigmes de programmation

Avant d'apprendre le langage Puppet DSL, comprenons les paradigmes de programmation. Un paradigme de programmation est un style de programmation informatique.

Quatre types de paradigmes sont :

  • Impératif.
  • Déclaratif.
  • Fonctionnel (qui est considéré comme un sous-ensemble du paradigme déclaratif).
  • Orienté objet.

Nous nous concentrerons sur les paradigmes impératif et déclaratif.

Paradigmes impératifs

Ce paradigme de programmation exprime la logique d'un calcul (ce qu'il faut faire) et décrit également son flux de contrôle (comment le faire).

Exemple :

Imaginez que vous vous rendez à votre bureau. Vous réservez un taxi et commencez à donner des instructions précises au chauffeur, étape par étape, jusqu'à votre arrivée. Indiquer quoi faire et comment le faire correspond à un style impératif.

Paradigmes déclaratifs

Ce paradigme de programmation exprime la logique d'un calcul (ce qu'il faut faire) sans décrire son flux de contrôle (comment le faire).

Exemple :

Supposons que vous vous rendiez à votre bureau. Vous réservez un Uber et précisez uniquement la destination finale (le bureau). Indiquer ce qu'il faut faire, sans préciser comment, correspond à un style déclaratif.

Paradigme Que faire Comment faire
Impératif Oui Oui
Déclaratif Oui Non

Puppet utilise un paradigme de programmation déclarative

Puppet utilise une approche de programmation déclarative.

Exemple : Créez un utilisateur sur le système.

Cela peut se faire en utilisant un modèle de programmation impératif avec un script shell. Ici, nous spécifions comment créer l'utilisateur et quelles commandes utiliser sur le système. le système d'exploitation.

Paradigmes déclaratifs

Cependant, il est également possible d'obtenir le même résultat en utilisant un modèle de programmation déclaratif avec seulement quelques lignes de code Puppet et le langage spécifique au domaine (DSL) de Puppet.

Paradigmes déclaratifs

Modèles de déploiement d'outils de gestion de configuration

Il existe deux modèles de déploiement pour outils de gestion de configuration:

  • Modèle de déploiement basé sur le push : initié par un nœud maître.
  • Modèle de déploiement basé sur le pull : initié par les agents.

Modèle de déploiement basé sur le push

Dans ce modèle de déploiement, le serveur maître envoie les configurations et les logiciels aux agents individuels. Après avoir vérifié une connexion sécurisée, le maître exécute des commandes à distance sur les agents. Par exemple, Ansible et pile de sel.

Modèle de déploiement basé sur le principe du pull

Dans ce modèle de déploiement, chaque serveur contacte un serveur maître, vérifie et établit une connexion sécurisée, télécharge sa configuration et ses logiciels, puis se configure en conséquence — par exemple, Puppet et Chef.

Comment fonctionne Puppet ?

Puppet repose sur un modèle de déploiement par extraction, où les nœuds agents se connectent régulièrement, après chaque 1800 En quelques secondes, l'agent communique avec le nœud maître pour vérifier si des mises à jour sont nécessaires. Si c'est le cas, il récupère le code Puppet requis auprès du maître et effectue les actions nécessaires.

Prenons l'exemple d'une configuration maître-agent pour illustrer cela.

Le Maître

Il s'agit d'une machine Linux sur laquelle est installé le logiciel maître Puppet. Ce dernier est chargé de gérer les configurations sous forme de code Puppet. Le nœud maître doit impérativement être sous Linux.

Les agents

Ce sont les machines cibles gérées par Puppet, sur lesquelles le logiciel agent Puppet est installé.

L'agent peut être configuré sur n'importe quel système d'exploitation pris en charge, tel que Linux, Windows, Solarisou Mac OS.

La communication entre le maître et l'agent est établie via des certificats sécurisés.

Communication de l'agent maître des marionnettes
Communication de l'agent maître des marionnettes

Communication entre le maître et l'agent

Étape 1) Une fois la connexion établie entre l'agent et le serveur maître, l'agent Puppet envoie au serveur maître des données relatives à son état. Ces données, appelées « faits », comprennent notamment le nom d'hôte, les détails du noyau, l'adresse IP et les noms de fichiers.

Communication entre le maître et l'agent
L'agent envoie des faits au maître

Étape 2) Le serveur Puppet utilise ces données et compile une liste de la configuration à appliquer à l'agent. Cette liste de configuration à exécuter sur un agent est appelée une configuration de sécurité. catalogueCela peut inclure l'installation, la mise à niveau ou la suppression de paquets, la création de systèmes de fichiers, la création ou la suppression d'utilisateurs, le redémarrage du serveur, les modifications de la configuration IP, etc.

Communication entre le maître et l'agent
Le maître envoie un catalogue à l'agent

Étape 3) L'agent utilise cette liste de configuration pour appliquer toutes les modifications de configuration requises sur le nœud.

S'il n'y a pas de dérive dans la configuration, l'agent n'effectue aucune modification de configuration et laisse le nœud fonctionner avec la même configuration.

Communication entre le maître et l'agent
L'agent applique la configuration

Étape 4) Une fois l'opération terminée, le nœud renvoie un rapport au serveur Puppet maître, indiquant que la configuration a été appliquée et finalisée.

Blocs de marionnettes

Puppet offre la possibilité d'intégrer des rapports avec des outils tiers grâce aux API Puppet.

Les quatre types de blocs de construction pour marionnettes sont :

  1. Ressources
  2. Cours
  3. Manifeste
  4. Modules

Ressources sur les marionnettes

Les ressources Puppet sont les éléments constitutifs de Puppet.

Les ressources sont les fonctions intégrées qui s'exécutent en arrière-plan pour effectuer les opérations requises dans Puppet.

Cours de marionnettes

Différentes ressources peuvent être regroupées en une seule unité appelée classe.

Manifeste de marionnettes

Un manifeste est un répertoire contenant des fichiers DSL Puppet. Ces fichiers ont l'extension .pp, qui signifie « programme Puppet ». Le code Puppet est constitué de définitions ou de déclarations de classes Puppet.

Modules de marionnettes

Les modules sont un ensemble de fichiers et de répertoires, tels que des manifestes et des définitions de classes. Ce sont les unités réutilisables et partageables de Puppet.

Par exemple, MySQL le module installe et configure MySQLainsi que, Jenkins le module gère Jenkins.

Modules de marionnettes
Modules de marionnettes

Types de ressources Puppet

De manière générale, un système se compose de fichiers, d'utilisateurs, de services, de processus, de paquets, etc. Dans Puppet, ces éléments sont appelés ressources et constituent les composants fondamentaux de Puppet.

Toutes les opérations sur les agents Puppet sont réalisées à l'aide des ressources Puppet.

Les ressources Puppet sont des outils prêts à l'emploi permettant d'effectuer diverses tâches et opérations sur toute plateforme prise en charge. On peut utiliser une seule ressource Puppet pour réaliser une tâche spécifique, ou en utiliser plusieurs conjointement pour déployer des configurations d'applications complexes.

Les ressources peuvent avoir différents types. Utilisations des marionnettes Ressources et types de ressources afin de décrire la configuration d'un système.

Il existe trois types de ressources :

  1. Noyau de marionnette ou types de ressources intégrés.
  2. Types de ressources définis par Puppet.
  3. Types de ressources personnalisées Puppet.

Noyau de marionnette ou types de ressources intégrées

Les types de ressources de base ou intégrés sont les types de ressources Puppet préconfigurés et fournis avec le logiciel Puppet. Tous ces types de ressources sont développés et maintenus par l'équipe Puppet.

Types de ressources définis par Puppet

Les types de ressources définis sont des types de ressources légers écrits dans le langage déclaratif Puppet en utilisant une combinaison de types de ressources existants.

Types de ressources personnalisées Puppet

Les types de ressources personnalisés sont des types de ressources entièrement personnalisés écrits en Ruby.

Explorons plus en détail les types de ressources Puppet.

Dans le terminal, saisissez la commande suivante pour afficher la liste des sous-commandes liées à Puppet :

Puppet --help

Types de ressources personnalisées Puppet

Dans notre cas, nous nous intéressons à la sous-commande «ressource« », que nous utiliserons pour trouver des informations sur les types de ressources Puppet intégrés.

Dans le terminal, tapez l'une des commandes suivantes pour afficher une liste de actes associé à la sous-commande Puppet «ressource"

Puppet help resource		
Puppet resource --help		

Types de ressources personnalisées Puppet

Dans ce cas, nous avons ressource comme sous-commande et -les types comme l'action.

Puppet dispose de 49 types de ressources de base intégrés.

Dans le terminal, saisissez la commande suivante pour afficher la liste des types de ressources Puppet intégrés disponibles :

puppet resource –types

Types de ressources personnalisées Puppet

Chaque type prend en charge une liste de attributs. Ces attributs fournissent une description détaillée que Puppet utilise pour gérer la ressource.

Pour connaître tous les attributs associés à un type de ressource Puppet, utilisez la commande suivante :

puppet describe <resource type name>	

Les paramètres listeront tous les attributs disponibles pour ce type de ressource.

paquet de description de marionnette

Types de ressources personnalisées Puppet

Il est difficile pour une nouvelle personne de comprendre et de s'approprier de nombreux fichiers de code Puppet non gérés. C'est là que nous avons besoin d'un groupe.ping L'objectif est de coordonner les opérations entre elles, afin de résoudre un problème unique, comme par exemple la configuration complète du protocole SSH sur un serveur, d'un service NTP, ou encore d'un serveur web ou d'un serveur de base de données.

Que sont les cours de marionnettes ?

Les classes Puppet sont des ensembles de ressources Puppet regroupées en une seule unité.

Puppet a introduit des cours pour rendre la structure réutilisable et organisée.

Tout d'abord, il faut définir une classe en utilisant la syntaxe de définition de classe. Les classes doivent être uniques et ne peuvent être déclarées qu'une seule fois avec le même nom :

class <class-name> {
<Resource declarations>
}

Exemple :

class ntpconfig {
    file {
        "/etc/ntp.conf": 
     ensure=> "present", content=> "server 0.centos.pool.ntp.org iburst\n",
    }
}

Jusqu'à présent, nous avons seulement défini la classe ; nous ne l'avons utilisée nulle part. Cela signifie que le code que nous avons écrit ne sera jamais exécuté à moins que nous ne déclarions cette classe ailleurs.

Déclaration de classe

Pour utiliser une classe définie dans votre code, utilisez la comprennent mot-clé.

class ntpconfig {
    file {
        "/etc/ntp.conf": 
      ensure=> "present", 
      content=> "server 0.centos.pool.ntp.org iburst\n",
    }
}
include ntpconfig

Essayons de comprendre cela à travers un scénario concret.

Démo installer NTP

Vérifiez d'abord que le paquet NTP n'est pas déjà installé sur le serveur. La commande suivante ne renverra rien si le paquet NTP est absent :

rpm -qa | grep -i ntp

Démo Installer NTP

Comme on peut le constater, le paquet NTP est déjà présent sur le serveur. Supprimons le paquet NTP existant :

yum remove ntp

Après avoir supprimé le paquet, assurez-vous que le fichier ntp.conf n'existe plus :

ls -lrt /etc/ntp.conf

Démo Installer NTP

Vérifiez que le service ntp n'existe pas en exécutant la commande suivante :

systemctl status ntp

Démo Installer NTP

Créez un nouveau fichier .pp pour enregistrer le code. Depuis la ligne de commande :

vi demontp.pp

Passez en mode insertion en appuyant sur la touche i du clavier.

Tapez le code suivant pour créer un nouveau fichier :

# Class Definition 
class ntpconfig {
    # Installing NTP Package 
  package {"ntp": 
    ensure=> "present",
    }
    # Configuring NTP configuration file 
  file {"/etc/ntp.conf": 
    ensure=> "present", 
    content=> "server 0.centos.pool.ntp.org iburst\n",
    }
    # Starting NTP services 
  service {"ntpd": 
    ensure=> "running",
    }
}

Une fois la modification terminée, appuyez sur Échap.

Pour enregistrer le fichier, appuyez sur :wq!

L'étape suivante consiste à choisissez si le code contient des erreurs de syntaxe. Exécutez la commande suivante :

puppet parser validate demontp.pp

Assurez-vous d'avoir basculé sur le racine l'utilisateur doit pouvoir terminer le test sans aucune erreur, en exécutant la commande :

su root

Test est la prochaine étape du processus de création de code. Exécutez la commande suivante pour effectuer un test de fumée :

Puppet applies demontp.pp --noop

La dernière étape consiste à courir Puppet en mode réel et vérifiez le résultat.

puppet apply demontp.pp

Puppet n'a rien fait car la classe de démonstration était simplement défini mais pas a déclaré.

Donc, tant que vous n'aurez pas déclaré la classe Puppet, le code ne sera pas appliqué.

Laissez-nous déclarer la classe de démonstration dans le même code en utilisant inclure le nom de la classe à la fin du code :

# Class Definition 
class ntpconfig {
    # Installing NTP Package 
  package {"ntp": 
    ensure=> "present",
    }
    # Configuring NTP configuration file 
  file {"/etc/ntp.conf": 
    ensure=> "present", 
    content=> "server 0.centos.pool.ntp.org iburst\n",
    }
    # Starting NTP services 
  service {"ntpd": 
    ensure=> "running",
    }
}

# Class Declaration 
include ntpconfig

Le prix de choisissez si le code contient des erreurs de syntaxe. Exécutez la commande suivante :

puppet parser validate demontp.pp

Assurez-vous d'avoir basculé sur le racine l'utilisateur doit pouvoir terminer le test sans aucune erreur, en exécutant la commande :

su root

Tests est la prochaine étape du processus de création de code. Exécutez la commande suivante pour effectuer un test de fumée :

Puppet apply demontp.pp --noop

La dernière étape consiste à courir Puppet en mode réel et vérifiez le résultat.

puppet apply demontp.pp

Cette fois-ci, le code est appliqué car la classe a été définie puis déclarée.

Démo Installer NTP

Vérifiez que le fichier ntp.conf existe bien :

ls -lrt /etc/ntp.conf

Vérifiez que le service ntp a bien été démarré en exécutant la commande suivante :

systemctl status ntpd

Démo Installer NTP

FAQ

Puppet est écrit en Ruby. Il utilise son propre langage déclaratif dédié (DSL) permettant aux administrateurs de décrire l'état souhaité du système au lieu de programmer chaque étape. Le DSL de Puppet s'inspire de Ruby, mais la connaissance de ce langage n'est pas nécessaire pour écrire des manifestes.

Puppet utilise un modèle de récupération déclaratif basé sur des agents et son propre DSL, de sorte que les nœuds récupèrent les catalogues auprès d'un maître. Ansible Il ne nécessite aucun agent et exécute des playbooks YAML via SSH. Puppet convient à la gestion d'état à long terme, tandis qu'Ansible est plus simple pour une orchestration rapide et à la demande.

Par défaut, le serveur Puppet (ou maître) écoute sur le port TCP 8140. Les agents Puppet s'y connectent via HTTPS pour soumettre des données et télécharger leurs catalogues compilés. Assurez-vous que le port 8140 est ouvert dans le pare-feu entre les agents et le serveur.

Le serveur Puppet doit fonctionner sous Linux. Les agents Puppet fonctionnent sur de nombreuses plateformes, y compris Linux. Windows, Solariset Mac OS. Cette prise en charge multiplateforme des agents permet à un seul administrateur Puppet de gérer un parc hétérogène de serveurs et de postes de travail depuis un emplacement central.

Puppet Forge est le dépôt public de modules Puppet précompilés, partagés par Puppet et la communauté. Au lieu de rédiger des fichiers manifestes de zéro, vous pouvez télécharger des modules qui installent et configurent des logiciels tels que : MySQL or JenkinsAdaptez-les ensuite à votre environnement.

Oui. Puppet demeure un outil de gestion de configuration et d'infrastructure en tant que code largement utilisé, désormais maintenu par Perforce. Puppet 8 est la version majeure actuelle et prend toujours en charge à la fois Puppet Open Source et la version commerciale. Puppet Enterprise pour la gestion de parcs de serveurs à grande échelle.

Les assistants IA peuvent générer du DSL Puppet à partir d'instructions en langage clair, expliquer les manifestes existants et signaler les erreurs de syntaxe ou de logique avant l'exécution de la validation par l'analyseur Puppet. Des outils tels que ChatGPT Accélérez la création de contenu, mais vérifiez toujours les ressources générées pour vous assurer de l'exactitude des chemins d'accès et de l'idempotence.

Oui. Copilote GitHub Permet de compléter automatiquement les manifestes Puppet, les déclarations de ressources et les définitions de classes à partir d'un court commentaire ou du contexte d'un fichier. RevVérifiez le résultat pour vous assurer de l'exactitude des types de ressources, des noms d'attributs et des dépendances, car le code généré peut faire référence à des modules obsolètes ou à des valeurs par défaut.

Résumez cet article avec :