Ansible est un outil de gestion de configuration gratuit, et il prend en charge la gestion des configurations des systèmes de type Unix et Microsoft Windows. Ansible gère les nœuds via SSH ou PowerShell et python à installer dessus.
Ansible vous aide à effectuer la configuration, la gestion et le déploiement de logiciels sur des centaines de nœuds à l'aide de SSH, l'ensemble de l'opération peut être exécuté par une seule commande ansible
. Mais, dans certains cas, vous devrez peut-être exécuter plusieurs commandes pour le déploiement.
Ce guide vous aidera à installer Ansible sur CentOS 7 / Ubuntu 18.04 / Ubuntu 16.04 / Debian 9 .
Architecture
Si vous utilisez d'autres outils de gestion de la configuration tels que puppet, chef et CFEngine, le logiciel serveur est installé sur une machine et les machines clientes sont gérées via l'agent. Dans Ansible, les nœuds sont gérés en contrôlant la machine (serveur Ansible) via SSH, de sorte qu'aucun agent ne s'exécute sur les machines de nœud.
Ansible déploie des modules sur des nœuds via SSH, et ces modules sont temporairement stockés dans les nœuds et communiquent avec le serveur Ansible via un protocole JSON. Les modules ne sont rien d'autre qu'un script écrit en Python, Perl, Ruby , bash, etc.
Configuration requise
Contrôle de la machine
Vous pouvez exécuter Ansible sur n'importe quelle machine sur laquelle Python 2.6 ou 2.7 est installé (Windows n'est pas pris en charge pour la machine de contrôle).
Prend en charge Red Hat, Debian, CentOS, OS X, l'un des BSD.
Nœuds clients
Les machines clientes doivent au moins avoir Python 2 (version 2.6 ou ultérieure) ou Python 3 (version 3.5 ou ultérieure)
Si vous avez activé SELinux sur des nœuds distants, vous devrez installer libselinux-python
package sur les nœuds avant d'utiliser des fonctions liées à la copie/fichier/modèle dans Ansible
Environnement
Nom d'hôte | Adresse IP | SE | Objectif |
---|---|---|---|
server.itzgeek.local | 192.168.1.10 | CentOS 7 / Ubuntu 18.04 / Debian 9 | Contrôle de la machine |
node1.itzgeek.local | 192.168.1.20 | CentOS 7 | Nœud géré 1 |
node2.itzgeek.local | 192.168.1.30 | Ubuntu 18.04 | Nœud géré 2 |
Installez Ansible sur CentOS 7 / RHEL 7 / Ubuntu 18.04 / 16.04 &Debian 9
Configurer la machine de contrôle
Pour installer Ansible, nous devrons Activer le référentiel EPEL sur CentOS 7 / RHEL 7 .
### CentOS 7 ### yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm ### RHEL 7 ### subscription-manager repos --enable rhel-7-server-ansible-2.6-rpms ### Ubuntu 18.04 / Ubuntu 16.04 ### sudo apt-get update sudo apt-get install software-properties-common sudo apt-add-repository ppa:ansible/ansible sudo apt-get update ### Debian 9 ### sudo apt-get install dirmngr sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367 echo "deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main" | sudo tee -a /etc/apt/sources.list.d/ansible.list sudo apt-get update
Installez Ansible.
### CentOS 7 / RHEL 7 & Fedora 28 ### yum install -y ansible ### Ubuntu 18.04 / 16.04 & Debian 9 ### sudo apt-get install -y ansible
Une fois Ansible installé, vérifiez la version d'Ansible en exécutant la commande ci-dessous.
ansible --version
Sortie :
ansible 2.6.3 config file = /etc/ansible/ansible.cfg configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules'] ansible python module location = /usr/lib/python2.7/site-packages/ansible executable location = /usr/bin/ansible python version = 2.7.5 (default, Jul 13 2018, 13:06:57) [GCC 4.8.5 20150623 (Red Hat 4.8.5-28)]
Configurer les nœuds gérés
Les machines clientes doivent au moins avoir Python 2 (version 2.6 ou ultérieure) ou Python 3 (version 3.5 ou ultérieure).
### CentOS 7 / RHEL 7 & Fedora ### yum install -y python ### Ubuntu 18.04 / 16.04 & Debian 9 ### sudo apt-get install -y python
SELinux (CentOS / RHEL / Fedora)
Si SELinux est activé sur les nœuds gérés, vous devrez installer le package ci-dessous sur les nœuds avant d'utiliser les fonctions liées à la copie/fichier/modèle dans Ansible.
yum install -y libselinux-python
Authentification SSH
Comme indiqué précédemment, Ansible utilise OpenSSH natif pour la communication à distance. Ansible prend en charge à la fois sans mot de passe et mot de passe authentification pour exécuter des commandes sur des nœuds gérés.
Authentification par clé SSH (Authentification sans mot de passe)
En ce qui concerne l'authentification ssh, par défaut, il utilise des clés ssh (authentification sans mot de passe) pour s'authentifier auprès de la machine distante.
LIRE :Comment configurer la connexion sans mot de passe SSH sur CentOS 7 / RHEL 7
Bien que le lien ci-dessus concerne CentOS, les étapes de celui-ci fonctionneront également pour Ubuntu / Debian.Une fois que vous avez configuré la communication sans mot de passe, vérifiez-la.
ssh [email protected] ssh [email protected]
Vous devriez maintenant pouvoir vous connecter à la machine distante sans le mot de passe.
Authentification par mot de passe
L'authentification par mot de passe peut également être utilisée si nécessaire en fournissant l'option --ask-pass
. Cette option nécessite sshpass à la machine de contrôle.
### CentOS 7 / RHEL 7 & Fedora ### yum install -y sshpass ### Ubuntu 18.04 / 16.04 & Debian 9 ### sudo apt-get update sudo apt-get install -y sshpassIci, pour cette démo, j'ai utilisé une communication sans mot de passe entre le nœud de contrôle ansible et les nœuds gérés.
Nom d'utilisateur du serveur Ansible =root
Nom d'utilisateur du nœud géré =raj
Créer un inventaire Ansible
Modifiez (ou créez) /etc/ansible/hosts fichier. Ce fichier contient l'inventaire des hôtes distants auxquels Ansible se connectera via SSH pour les gérer.
### CentOS 7 / RHEL 7 & Fedora ### vi /etc/ansible/hosts ### Ubuntu 18.04 / 16.04 & Debian 9 ### sudo nano /etc/ansible/hosts
Mettez un ou plusieurs systèmes distants et regroupez-le. Ici, j'ai ajouté les deux machines au groupe demo-servers.
Les groupes sont utilisés pour classer les systèmes à usage particulier. Si vous ne spécifiez aucun groupe, ils agiront comme des hôtes non groupés.
[demo-servers] 192.168.1.20 192.168.1.30
Première commande
Il est maintenant temps de vérifier tous nos nœuds en faisant simplement un ping depuis la machine de contrôle, pour ce faire, nous allons utiliser la commande ansible avec les options -m (module de chargement) et tous (tous les serveurs).
# all servers - Works when both server's and client's user name are same (Passwordless) ansible all -m ping # all servers - "raj" is managed node's user (Passwordless) ansible all -u raj -m ping OR # Only demo-servers group - "raj" is managed node's user (Passwordless) ansible demo-servers -u raj -m ping OR # If you use password authendication ansible -m ping all -u raj --ask-pass
Sortie :
192.168.1.20 | SUCCESS => { "changed": false, "ping": "pong" } 192.168.1.30 | SUCCESS => { "changed": false, "ping": "pong" }
Dans l'exemple ci-dessus, nous avons utilisé le module ping avec ansible commande pour envoyer un ping à tous ou à un groupe d'hôtes distants.
De la même manière, nous pouvons utiliser différents modules avec ansible commande, vous pouvez trouver les modules disponibles ici .
Ici, pour cette démo, j'ai utilisé une communication sans mot de passe entre le nœud de contrôle ansible et les nœuds gérés.Nom d'utilisateur du serveur Ansible =root
Nom d'utilisateur du nœud géré =raj
Ainsi, toutes mes commandes ansible auront
-u raj
Exécution de commandes à distance
Cette fois, nous allons utiliser la commande module avec ansible commande pour obtenir des informations sur la machine distante.
Par exemple, nous exécuterons hostname commande avec commande module pour obtenir le nom d'hôte des hôtes distants en une seule fois.
ansible -m command -a "hostname" -u raj demo-servers
Sortie :
192.168.1.30 | SUCCESS | rc=0 >> node2.itzgeek.local 192.168.1.20 | SUCCESS | rc=0 >> node1.itzgeek.local
Nous obtiendrons les détails de la partition avec la commande ci-dessous.
ansible -m command -a "df -hT" -u raj demo-servers
Sortie :
192.168.1.30 | SUCCESS | rc=0 >> Filesystem Type Size Used Avail Use% Mounted on udev devtmpfs 1.9G 0 1.9G 0% /dev tmpfs tmpfs 395M 1.5M 393M 1% /run /dev/sda4 ext4 94G 4.9G 84G 6% / tmpfs tmpfs 2.0G 0 2.0G 0% /dev/shm tmpfs tmpfs 5.0M 4.0K 5.0M 1% /run/lock tmpfs tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup /dev/loop0 squashfs 87M 87M 0 100% /snap/core/4486 /dev/loop3 squashfs 3.4M 3.4M 0 100% /snap/gnome-system-monitor/36 /dev/loop1 squashfs 1.7M 1.7M 0 100% /snap/gnome-calculator/154 /dev/loop2 squashfs 141M 141M 0 100% /snap/gnome-3-26-1604/59 /dev/loop4 squashfs 21M 21M 0 100% /snap/gnome-logs/25 /dev/loop5 squashfs 88M 88M 0 100% /snap/core/5328 /dev/loop6 squashfs 13M 13M 0 100% /snap/gnome-characters/69 /dev/sda1 vfat 93M 4.6M 88M 5% /boot/efi tmpfs tmpfs 395M 28K 395M 1% /run/user/120 tmpfs tmpfs 395M 36K 395M 1% /run/user/1000 /dev/loop7 squashfs 15M 15M 0 100% /snap/gnome-logs/40 192.168.1.20 | SUCCESS | rc=0 >> Filesystem Type Size Used Avail Use% Mounted on /dev/mapper/centos-root xfs 50G 1.1G 49G 3% / devtmpfs devtmpfs 1.4G 0 1.4G 0% /dev tmpfs tmpfs 1.5G 0 1.5G 0% /dev/shm tmpfs tmpfs 1.5G 8.5M 1.4G 1% /run tmpfs tmpfs 1.5G 0 1.5G 0% /sys/fs/cgroup /dev/sda1 xfs 1014M 188M 827M 19% /boot /dev/mapper/centos-home xfs 46G 33M 46G 1% /home tmpfs tmpfs 287M 0 287M 0% /run/user/1000 tmpfs tmpfs 287M 0 287M 0% /run/user/0
Pour vérifier la disponibilité et les détails de charge sur les deux nœuds.
ansible -m command -a "uptime" -u raj demo-servers
Sortie :
192.168.1.30 | SUCCESS | rc=0 >> 16:36:45 up 56 min, 3 users, load average: 0.00, 0.00, 0.00 192.168.1.20 | SUCCESS | rc=0 >> 16:36:45 up 1:09, 2 users, load average: 0.05, 0.04, 0.05
Vous pouvez également vérifier le contenu du fichier particulier.
ansible -m command -a "cat /etc/resolv.conf" -u raj demo-servers
Sortie :
192.168.1.30 | SUCCESS | rc=0 >> # This file is managed by man:systemd-resolved(8). Do not edit. # # This is a dynamic resolv.conf file for connecting local clients to the # internal DNS stub resolver of systemd-resolved. This file lists all # configured search domains. # # Run "systemd-resolve --status" to see details about the uplink DNS servers # currently in use. # # Third party programs must not access this file directly, but only through the # symlink at /etc/resolv.conf. To manage man:resolv.conf(5) in a different way, # replace this symlink by a static file or a different symlink. # # See man:systemd-resolved.service(8) for details about the supported modes of # operation for /etc/resolv.conf. nameserver 127.0.0.53 192.168.1.20 | SUCCESS | rc=0 >> # Generated by NetworkManager search itzgeek.local nameserver 8.8.8.8 nameserver 192.168.1.1
Vous pouvez également enregistrer la sortie dans n'importe quel fichier en redirigeant comme ci-dessous.
ansible -m command -a "cat /etc/resolv.conf" -u raj demo-servers > /tmp/ouput_file cat /tmp/ouput_file
De cette manière, vous pouvez exécuter de nombreuses commandes shell à l'aide d'ansible.
Vous avez maintenant installé avec succès Ansible sur CentOS 7 / Ubuntu 18.04 / Ubuntu 16.04 / Debian 9 .
EN SAVOIR PLUS :Comment créer des playbooks Ansible pour l'automatisation informatique
C'est tout.