GNU/Linux >> Tutoriels Linux >  >> Linux

Configuration automatisée d'Ansible Lab avec Vagrant et Virtualbox sous Linux

Ansible est une plateforme d'automatisation utilisée dans le domaine de l'orchestration, de la gestion de la configuration, des déploiements, de l'approvisionnement, etc. . Configurer manuellement un laboratoire à domicile est une tâche qui prend du temps. Il existe quelques solutions automatisées comme Docker , Vagabond , Solutions cloud pouvant être utilisées pour créer le laboratoire ansible. Dans ce guide, nous allons apprendre un moyen automatisé de configurer Ansible lab avec Vagrant et VirtualBox sous Linux.

Vagrant est un excellent outil pour configurer rapidement votre environnement de développement. Si vous êtes nouveau sur le vagabond, je vous suggère de jeter un coup d'œil à notre guide d'introduction au vagabond.

  • Tutoriel Vagrant – Premiers pas avec Vagrant sous Linux

Pour les besoins de ce guide, nous utiliserons Vagrant avec VirtualBox comme fournisseur pour créer notre laboratoire ansible. Vous pouvez également utiliser KVM au lieu de VirtualBox. Si vous souhaitez utiliser KVM comme fournisseur, reportez-vous à l'article ci-dessous sur l'utilisation de vagrant avec KVM.

  • Comment utiliser Vagrant avec le fournisseur KVM Libvirt

Configuration d'Ansible Lab

Comme condition préalable, vous devez avoir installé Vagrant et Virtualbox sur votre machine Linux. Si vous n'avez pas encore installé Vagrant, veuillez vous référer au guide suivant pour installer Vagrant sur différentes distributions Linux.

  • Comment installer Vagrant sur Linux

Nous allons créer une configuration de laboratoire ansible à trois nœuds. Un nœud agira en tant que nœud maître/contrôleur et deux nœuds agiront en tant que nœuds gérés. À des fins de démonstration, j'utilise ubuntu/focal64 boîte vagabonde.

Voici les détails de la configuration de mon laboratoire Ansible.

TYPE DE NŒUD NOM DU NŒUD ADRESSE IP SAVEUR DU SE
Nœud de contrôle controller.anslab.com 192.168.10.3 ubuntu/focal64
Nœud géré managed1.anslab.com 192.168.10.4 ubuntu/focal64
Nœud géré managed2.anslab.com 192.168.10.5 ubuntu/focal64

Ici, je ne configure que trois nœuds pour mon laboratoire, mais vous pouvez ajouter autant de nœuds gérés que vous le souhaitez lors de la configuration de votre propre laboratoire.

Cloner le dépôt du projet

J'ai hébergé tous les fichiers requis pour configurer le laboratoire Ansible dans mon référentiel GitHub. Exécutez la commande suivante pour cloner le référentiel localement.

$ git clone --recursive https://github.com/KarthickSudhakar/Ansible_lab_vagrant_virtualbox.git

Naviguons dans le répertoire du projet pour voir quels fichiers sont présents.

Permettez-moi de vous présenter brièvement chaque fichier.

1. Fichier vagabond

Toutes les configurations liées à la VM sont stockées dans ce fichier. Voici le contenu de ce fichier.

# -*- mode :ruby ​​-*-# vi :set ft=ruby :Vagrant.configure("2") do |config| config.vm.provider "virtualbox" faire |rs| rs.memory =2048 rs.cpus =2 end # Ne vérifiera pas les mises à jour de la boîte à chaque démarrage. config.vm.box_check_update =false # Nœud maître où ansible sera installé config.vm.define "controller" do |controller| controller.vm.box ="ubuntu/focal64" controller.vm.hostname ="controller.anslab.com" controller.vm.network "private_network", ip:"192.168.10.3" controller.vm.provision "shell", chemin :"bootstrap.sh" controller.vm.provision "file", source :"key_gen.sh", destination :"/home/vagrant/" end # Nœud géré 1. config.vm.define "m1" do |m1| m1.vm.box ="ubuntu/focal64" m1.vm.hostname ="managed1.anslab.com" m1.vm.network "private_network", ip :"192.168.10.4" m1.vm.provision "shell", chemin :"bootstrap.sh" end # Nœud géré 2. config.vm.define "m2" do |m2| m2.vm.box ="ubuntu/focal64" m2.vm.hostname ="managed2.anslab.com" m2.vm.network "private_network", ip :"192.168.10.5" m2.vm.provision "shell", chemin :"bootstrap.sh" endend

2. bootstrap.sh

Il s'agit d'un script shell responsable de la configuration d'ansible dans le nœud du contrôleur, de l'installation des packages et de la modification des configurations système.

Le contenu de ce fichier est donné ci-dessous :

#!/usr/bin/env bash# vagrant crée par défaut sa propre paire de clés pour toutes les machines. L'authentification basée sur le mot de passe sera désactivée par défaut et l'activera pour que l'authentification basée sur le mot de passe puisse être effectuée. au vagrant box.touch /home/vagrant/.hushlogin# Mise à jour du fichier hosts pour les 3 nœuds avec l'adresse IP donnée dans vagrantfile# 192.168.10.3 controller.ansible.com controller# 192.168.10.4 managed1.ansible.com managed1# 192.168.10.5 managé2.ansible.com managé2echo -e "192.168.10.3 contrôleur.anslab.com contrôleur\n192.168.10.4 managé1.anslab.com managé1\n192.168.10.5 managé2.anslab.com managé2">> /etc /hosts# Installation des packages nécessaires sudo apt update &&sudo apt -y install curl wget net-tools iputils-ping python3-pip sshpass# Installez ansible en utilisant pip uniquement dans le contrôleur nodeif [[ $(hostname) ="controller"]] ; puis sudo pip3 install ansiblefi

3. key_gen.sh

Ce script doit être déclenché manuellement une fois la construction des trois VM terminée. Ce script se chargera de générer une paire de clés ssh, en la distribuant sur les trois nœuds. Il exécutera également un exemple de commande ansible ad hoc pour validation.

Le contenu de ce fichier est donné ci-dessous :

#!/usr/bin/env bash# CE SCRIPT CRÉERA UNE PAIRE DE CLÉS SSH ET LA DISTRIBUERA SUR TOUS LES NŒUDSssh-keygen -b 2048 -t rsa -f /home/vagrant/.ssh/id_rsa -q -N ""# BOUCLE ET DISTRIBUTION DE LA CLÉ pour val dans le contrôleur managé1 managé2 ; do echo "-------------------- COPIE DE LA CLE AU NŒUD ${val^^} ----------------- -------------" sshpass -p 'vagrant' ssh-copy-id -o "StrictHostKeyChecking=no" [email protected]$val done# CRÉER L'INVENTAIRE FILEPROJECT_DIRECTORY="/home/vagrant /ansible_project/"mkdir -p $PROJECT_DIRECTORYcd $PROJECT_DIRECTORY# Création du fichier d'inventaire pour les 3 nœuds afin d'exécuter une commande ad hoc.echo -e "controller\n\n[ubuntu1]\nmanaged1\n\n[ubuntu2]\nmanaged2"> inventaireecho -e "[valeurs par défaut]\ninventaire =inventaire"> ansible.cfgecho -e "-------------------- EXÉCUTION DE LA COMMANDE ADHOC ANSBILE - UPTIME ---- --------------------------"echo# exécutant la commande ad hoc pour voir si tout est correct tous -i inventaire -m "shell" -a " disponibilité"écho

Tous ces trois fichiers sont hébergés dans mon référentiel GitHub. N'hésitez pas à contribuer et à l'améliorer.

Comprendre la configuration de Vagrantfile

Avant de créer le laboratoire Ansible, vous devez comprendre les configurations à l'intérieur des scripts Vagrantfile et shell.

1. Allocation de mémoire et de Vcore

Pour les trois boîtes vagabondes, nous devons configurer la valeur de la mémoire et du processeur. Ici, la mémoire est définie sur 2 Go et le processeur est réglé sur 2 . Si vous souhaitez augmenter ou diminuer la limite, ajustez simplement les paramètres en surbrillance dans le Vagrantfile.

2. Version du système d'exploitation

Les trois nœuds (contrôleur et géré) utilisent l'image Ubuntu 20.04 LTS. Ainsi, lorsque vous exécutez le "vagrant up " La commande vagrant recherchera le paramètre suivant et essaiera d'extraire l'image si elle n'est pas disponible localement.

3. Paramètres réseau

Par défaut, vagrant utilise NAT sur la première interface (adapter1). Vagrant utilise la redirection de port sur NAT pour se connecter à la machine virtuelle. Ici, nous définissons le nom d'hôte et les adresses IP statiques pour les trois VM sur le réseau privé.

Une interface distincte (Adapter2) sera créée et l'adresse IP statique lui sera attribuée. Les VM qui font partie du réseau privé peuvent communiquer entre elles.

Dans l'environnement multi-vm, le vagabond corrigera automatiquement la collision de ports.

==> m2 :Collision de port fixe pour 22 => 2222. Maintenant sur le port 2201.  ==> m2 :Effacer toutes les interfaces réseau précédemment définies...==> m2 :Préparer les interfaces réseau en fonction de configuration... m2 :Adaptateur 1 :nat m2 :Adaptateur 2 :hôte uniquement  ==> m2 :Ports de transfert... m2 :22 (invité) => 2201 (hôte) (adaptateur 1)==> m2 :Exécution des personnalisations de la VM "pré-démarrage"...==> m2 :Démarrage de la VM. ..==> m2 :En attente de démarrage de la machine. Cela peut prendre quelques minutes... m2 :Adresse SSH :127.0.0.1:2201

4. Nom d'utilisateur et communication SSH

Il existe un utilisateur par défaut appelé "vagrant" avec le mot de passe "vagrant". L'utilisateur vagabond a le privilège sudo sans mot de passe configuré dans la machine virtuelle par défaut.

Par défaut, l'authentification par mot de passe est désactivée pour la machine virtuelle. Vagrant créera une paire de clés ssh et utilisera la clé privée pour se connecter à la machine virtuelle lorsque vous exécuterez le "vagrant ssh " commande.

$ contrôleur ssh vagabond 
$ vagabond ssh m1
$ vagabond ssh m2

L'authentification par mot de passe est activée via bootstrap.sh afin que vous puissiez vous connecter au nœud à l'aide de l'adresse IP et de l'authentification par mot de passe au lieu de l'authentification par clé.

5. Script d'amorçage

Le script bootstrap.sh est responsable de

  • Activation de l'authentification par mot de passe.
  • Créer un .huhlogin fichier pour supprimer le message de bannière par défaut.
  • Ajoutez les entrées d'hôte dans /etc/hosts fichier pour les trois nœuds.
  • Installation des packages requis.
  • Installation d'ansible via le gestionnaire de packages python (pip) uniquement sur le nœud du contrôleur.

J'utilise un fournisseur de shell, où le bootstrap.sh sera copié dans le /tmp/ emplacement dans les trois VM et le script s'exécutera avec le privilège root.

Attention : Si vous créez un laboratoire basé sur RHEL, vous devez modifier la commande d'installation du package à partir de bootstrap.sh fichier selon dnf ou rpm . Le reste sera similaire dans toutes les distributions.

6. Générer une paire de clés

Ansible utilise la paire de clés SSH pour communiquer avec les nœuds gérés et exécuter la tâche. De nouvelles clés doivent être générées à partir du nœud de contrôleur et partagées avec tous les nœuds gérés afin qu'ansible puisse communiquer avec les nœuds gérés sans demander de mot de passe à chaque fois.

Le script key_gen.sh se chargera de créer des clés ssh et de distribuer les clés à tous les nœuds. Le script créera également un répertoire de projet avec ansible.cfg dossier et dossier d'inventaire. Le ad hoc La commande sera déclenchée dans le cadre du script pour valider la connectivité.

Attention : Ce script doit être déclenché manuellement à partir du nœud de contrôleur une fois que les trois VM sont provisionnées.

Créer la configuration du laboratoire Ansible

Allez dans le répertoire du projet et exécutez la commande "vagrant up" et le reste sera pris en charge par le script vagrant et bootstrap.

$ cd Ansible_lab_vagrant_virtualbox
$ vagabond en hausse

Exemple de résultat :

Apporter le "contrôleur" de la machine avec le fournisseur de "virtualbox"… 
Mise en place de la machine 'm1' avec le fournisseur 'virtualbox'…
Mise en place de la machine 'm2' avec le fournisseur 'virtualbox'…
………

Script de post-installation

Une fois les trois machines virtuelles provisionnées, connectez-vous au nœud du contrôleur pour exécuter le /home/vagrant/key_gen.sh pour créer des paires de clés ssh et valider en exécutant une commande ansible ad-hoc.

$ contrôleur ssh vagabond 
$ cd /maison/vagabond/
$ bash key_gen.sh

Commandes vagabondes pour gérer la VM

Les commandes suivantes vous aideront à maintenir le cycle de vie des machines vagabondes.

Pour commencer à construire les machines virtuelles, exécutez la commande suivante à partir du répertoire où se trouve le vagrantfile.

$ vagabond en hausse

Si vous souhaitez mettre en place un seul nœud, vous pouvez ajouter le nom d'hôte au "vagrant up " commande.

Contrôleur $ vagrant up

Pour vérifier l'état de la machine, exécutez la commande suivante.

$ vagrant statusÉtats actuels de la machine :contrôleur en cours d'exécution (virtualbox)m1 en cours d'exécution (virtualbox)m2 en cours d'exécution (virtualbox)

Vous pouvez également utiliser la commande suivante qui vous donnera plus d'informations sur la VM.

$ vagrant global-status --prunename répertoire d'état du fournisseur ------------------------------------ -------------------------------------------------- -------------------------------6095cc7 contrôleur virtualbox exécutant /home/karthick/Karthick_Root/Work/Vagrant/Lab/Ansible_lab_vagrant_virtualbox cf2e302 m1 virtualbox exécutant /home/karthick/Karthick_Root/Work/Vagrant/Lab/Ansible_lab_vagrant_virtualbox af10f7d m2 virtualbox exécutant /home/karthick/Karthick_Root/Work/Vagrant/Lab/Ansible_lab_vagrant_virtualbox 

Pour vous connecter à la machine virtuelle, vous pouvez exécuter "vagrant ssh ". Vous devez passer le nom de la machine virtuelle sinon l'erreur suivante sera renvoyée.

$ vagabond ssh 
Cette commande nécessite un nom de VM spécifique à cibler dans un environnement multi-VM.

Pour ssh dans m1 VM, la commande serait :

$ vagabond ssh m1

Ou,

$ vagabond ssh cf2e302

Vous pouvez également vous connecter en utilisant le nom d'utilisateur et le mot de passe si l'authentification par mot de passe est activée.

$ ssh [protégé par e-mail] 
Mot de passe de [email protected] :
[e-mail protégé] :~$

Pour arrêter une machine virtuelle particulière, exécutez la commande halt avec le nom vm.

$ vagrant halt controller

Pour arrêter toutes les machines virtuelles, exécutez la commande suivante.

$ halte vagabonde 
==> m2 :Tentative d'arrêt progressif de la VM…
==> m1 :Tentative d'arrêt progressif de la VM…
==> contrôleur :Tentative d'arrêt progressif de la VM…

Pour détruire toutes les machines virtuelles, y compris son disque, exécutez la commande suivante.

$ vagabond détruire -f 
==> m2 :Destruction de la VM et des disques associés…
==> m1 :Destruction de la VM et des disques associés…
==> contrôleur :destruction de la VM et des lecteurs associés…

Conclusion

Dans cet article, j'ai montré la manière automatisée de configurer un laboratoire ansible à l'aide de Vagrant et de VirtualBox. Le laboratoire est créé avec une pile Ubuntu 20.04 LTS.

Si vous envisagez de passer la certification ansible et que vous souhaitez qu'un laboratoire pratique, je vous suggère de modifier le fichier vagrantfile pointant le nom de la boîte vers la saveur RHEL et de remplacer le apt commande pour s'approprier dnf /yum commande dans le bootstrap.sh fichier.

Lire la suite :

  • Fichiers d'inventaire et de configuration Ansible

Linux
  1. Modifier du texte sous Linux avec KWrite et Kate

  2. Comment j'utilise Vagrant avec libvirt

  3. Comment installer et tester Ansible sur Linux

  4. Enregistrez Red Hat Enterprise Linux et attachez un abonnement avec Ansible

  5. Erreur sur Vagrant Up sous Linux

Installer et configurer Ansible sous Linux

Comment créer une machine virtuelle avec Vagrant et VirtualBox

Premiers pas avec Vagrant et VirtualBox - Partie 1

Comment travailler avec Ansible Provisioner dans Vagrant

Configurer l'équilibrage de charge avec HAProxy, Nginx et Keepalived sous Linux

Installer Windows 10 sur Linux avec VirtualBox