Ansible is een veelgebruikte tool voor configuratiebeheer, geschreven in de taal Python, die helpt bij het configureren van enkele of meerdere machines tegelijk. Ansible kan worden gebruikt om de volgende taken uit te voeren
- Configuratie vanaf nul van enkele of meerdere nodes
- Deployments
- Configuratiewijzigingen
- Patching
- Service management
- en nog veel meer
Ansible wordt veel gebruikt vanwege zijn eenvoud. Ansible code is ook geschreven in YAML taal, het heeft geen agent nodig die geïnstalleerd moet worden op een machine op afstand. Ansible gebruikt poort 22 (SSH) om verbinding te maken met een machine op afstand en de nodige wijzigingen aan te brengen.
Elke machine die verbinding kan maken met de machine op 22 poort kan een controlerende node worden. Een controlerende node is waar u Ansible kunt installeren en een beheerde node wordt beheerd door controlerende nodes.
Laten we eens kijken naar de installatie van Ansible op de controlling node.
- Installeer Ansible op CentOS 7:
- Installeer Ansible op CentOS 8:
- Installeer Ansible op Ubuntu:
- Installeer Ansible met Python PIP op CentOS, Debian en Ubuntu:
- Hosts van de Ansible Controller configureren:
- Controleer de verbinding van de beheerde node:
- host3 | SUCCESS => {“changed”: false, “ping”: “pong”}
- Conclusie:
Installeer Ansible op CentOS 7:
Aangezien Python de enige vereiste is om Ansible te installeren, laten we Python installeren door het onderstaande commando uit te voeren.
$sudo yum install python3 -y
Om Ansible op CentOS 7 te installeren, moet u er eerst voor zorgen dat de CentOS 7 EPEL repository is geïnstalleerd. Voer het onderstaande commando uit om de epel repository te installeren.
$sudo yum install epel-release
Update de systeem package index door het uitvoeren van de onderstaande update commando.
$sudo yum update -y
Als de repository is geïnstalleerd, installeer Ansible met yum package manager. Voer het onderstaande commando uit om Ansible te installeren.
$sudo yum install ansible -y
Controleer of Ansible goed is geïnstalleerd en wat de versie is.
$ansible -v
Installeer Ansible op CentOS 8:
Laten we eens kijken naar de installatie stappen voor CentOS 8. Laten we python installeren op CentOS 8.
$sudo dnf install python3
Zodra python is geïnstalleerd, laten we EPEL repo installeren door het onderstaande commando uit te voeren.
$sudo dnf install epel-release -y
Update de systeem package index door het onderstaande update commando uit te voeren.
$sudo dnf update -y
We zijn nu klaar om Ansible te installeren. Voer het onderstaande commando uit om Ansible te installeren.
$sudo dnf install ansible -y
Controleer of Ansible goed is geïnstalleerd en wat de versie ervan is.
$ansible -v
Installeer Ansible op Ubuntu:
Python is tegenwoordig een standaard pakket in de meeste Linux distributies. Als je python niet geïnstalleerd hebt, voer dan het onderstaande commando uit om het python pakket te installeren.
$sudo apt-get install python3
Om Ansible in Ubuntu te installeren, laten we eerst de repository installeren door het onderstaande commando uit te voeren.
$sudo apt-add-repository ppa:ansible/ansible
Update het systeem pakket index door het uitvoeren van de onderstaande update commando.
$sudo apt-get update -y
Nu, installeer Ansible.
$sudo apt-get install -y ansible
Verifieer of Ansible goed is geïnstalleerd en de versie is.
$ansible -v
Installeer Ansible met Python PIP op CentOS, Debian en Ubuntu:
Of welk besturingssysteem u ook gebruikt, u kunt Ansible installeren met de python package installer. Laten we het onderstaande commando uitvoeren om python3-pip te installeren.
Voor CentOS 7 en lager:
$sudo yum install python3 python3-pip -y
Voor CentOS 8:
$sudo dnf install python3 python3-pip -y
Voor Ubuntu en Debian:
$sudo apt-get install python3 python3-pip
Zoals we python en pip geïnstalleerd hebben, laten we het onderstaande commando op elk besturingssysteem uitvoeren om Ansible te installeren.
$sudo pip3 install ansible
Verifieer of Ansible goed is geïnstalleerd en wat de versie is.
$ansible -v
Hosts van de Ansible Controller configureren:
We moeten eerst het “hosts” bestand instellen voordat we kunnen beginnen met onze andere nodes te communiceren. Dit bestand zal alle IP of hostnamen van de beheerde nodes bevatten.
Note: Het is niet altijd nodig om een hosts bestand te gebruiken om verbinding te maken met beheerde nodes. Maar dan moeten we elke keer het IP of de hostnaam van de managed nodeserver gebruiken tijdens het uitvoeren van elk commando.
Maak het bestand aan (als het er nog niet is) met root-privileges door het onderstaande commando uit te voeren:
$sudo touch /etc/ansible/hosts
Voordat we naar het bestand schrijven, laten we eens kijken en een voorbeeld van het hosts-bestand begrijpen:
alias ansible_ssh_host=your_node_server_ip
Een hosts-bestand moet de bovenstaande syntaxis volgen. Laten we eens kijken naar elke parameter.
: Deze parameter zal een groep aanmaken. Alle beheerde node IP adressen of hostnamen onder de group_name parameter zullen in dezelfde groep vallen. Als we bijvoorbeeld meerdere webservers in onze infrastructuur hebben, kunnen we alle IP-adressen of de hostnamen van de beheerde node hier toevoegen.
alias: Deze parameter wordt gebruikt om de beheerde node server een alias te geven om de beheerde node server te identificeren. Bijvoorbeeld, als we meerdere webservers in onze infrastructuur hebben, kunnen we host1, host2, host3 als alias opgeven. Het grote voordeel van het geven van een alias is dat wanneer we het Ansible commando uitvoeren om de configuratie van een enkele server te wijzigen, we een alias kunnen gebruiken om de vereiste taak op de server te identificeren en uit te voeren.
ansible_ssh_host=jouw_node_server_ip: Deze parameter zal de alias naar een beheerd knooppunt IP-adres of hostnaam wijzen.
We zullen CentOS 8 gebruiken als een beheerd knooppunt met Ansible. Zoals hierboven vermeld, gebruikt Ansible poort 22 van de remote host om verbinding te maken.
We zullen aannemen dat de IP-adressen van onze CentOS managed node server 192.168.0.2, 192.168.0.3 en 192.168.0.4 zijn.
Om de Ansible controller node te laten communiceren met de managed nodes, moeten we bevestigen dat de managed nodes toegankelijk zijn op poort 22, wat een SSH poort is. Voer het onderstaande commando uit om de connectiviteit één voor één te bevestigen op alle drie beheerde nodes vanaf de controller.
$ssh [email protected]
$ssh [email protected]
$ssh [email protected]
U zult gevraagd worden om het wachtwoord van de root gebruiker van alle nodes. Ansible werkt heel soepel als u wachtwoordloze authenticatie hebt geconfigureerd tussen de Ansible controller en de beheerde nodes. Met verschillende parameters in het Ansible commando, kan wachtwoord authenticatie ook werken.
Nadat we de ssh connectiviteit tussen de Ansible controller en de beheerde nodes hebben geconfigureerd, laten we nu het hosts bestand configureren om verbinding te maken met alle beheerde nodes. Zoals eerder vermeld, kunnen we meerdere node server aliassen toevoegen in een enkele groep. In dit geval, voegen we alle drie nodes toe en wijzen we een alias toe als respectievelijk host1, host2, en host3. Ons hosts bestand zou er als volgt uit moeten zien na het toevoegen van alle managed node details. Voer het onderstaande commando uit om het hosts-bestand dat we eerder hebben aangemaakt te bewerken.
Open het bestand met root-rechten door het onderstaande commando uit te voeren:
$sudo vi /etc/ansible/hosts
Laten we de onderstaande configuratie toevoegen aan het hosts-bestand.
host1 ansible_ssh_host=192.168.0.2
host2 ansible_ssh_host=192.168.0.3
host3 ansible_ssh_host=192.168.0.4
Hier hebben we alle beheerde node IP’s en aliassen toegevoegd in een groep genaamd node_servers.
Laten we nu proberen verbinding te maken met beheerde nodes vanuit de Ansible controller.
$ansible -m ping node_servers
Het bovenstaande commando maakt gebruik van een module ping om verbinding te maken met de “node_servers” groep die we hierboven in het hosts bestand hebben gedefinieerd.
U kunt om verschillende redenen fouten tegenkomen.
- Ansible zal standaard proberen verbinding te maken met het beheerde knooppunt door uw huidige gebruikersnaam te gebruiken als u er geen hebt opgegeven. Als die gebruiker niet bestaat op de node server, krijgt u de onderstaande foutmelding.
- Als ssh poort 22 niet open is voor verbinding op de beheerde nodes. (Zoals eerder vermeld, Ansible maakt verbinding op ssh poort)
- Als het IP in de hosts file niet correct is.
Als een van de bovenstaande voorwaarden faalt, krijgt u de onderstaande foutmelding.
host1 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh.",
"unreachable": true
}
host2 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh.",
"unreachable": true
}
host3 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh.",
"unreachable": true
}
Laten we Ansible specifiek vertellen dat het verbinding moet maken met beheerde nodes in de “node_servers” groep met de james gebruiker. Maak group_vars directory zoals hieronder vermeld.
$sudo mkdir /etc/ansible/group_vars
De bestanden in deze directory worden specifiek gebruikt om variabelen te configureren die we kunnen gebruiken in onze Ansible playbooks.
Laten we een variabelenbestand maken voor onze set-up door het onderstaande commando uit te voeren:
$sudo vim /etc/ansible/group_vars/node_servers.yml
Voeg onderstaande code toe aan het bestand:
---
ansible_ssh_user: james
YML-bestand begint altijd met “—” in de eerste regel. Sla dit bestand op en sluit het als u klaar bent. Nu zal Ansible altijd de gebruiker james gebruiken voor de node_servers groep, ongeacht de huidige gebruiker die je gebruikt om een commando uit te voeren.
Controleer de verbinding van de beheerde node:
Nu we onze hosts hebben ingesteld en genoeg configuratiedetails hebben om met succes verbinding te kunnen maken met onze beheerde nodes, kunnen we hetzelfde commando uitproberen dat we eerder hebben uitgevoerd.
$ansible -m ping servers
Ansible zal uitvoer als deze teruggeven:
host1 | SUCCESS => {
"changed": false,
"ping": "pong"
}
host2 | SUCCESS => {
"changed": false,
"ping": "pong"
}
host3 | SUCCESS => {“changed”: false, “ping”: “pong”}
Dit is een basis test om er zeker van te zijn dat Ansible een verbinding heeft met zijn beheerde nodes.
Conclusie:
Het is niet nodig om CentOS besturingssysteem te gebruiken voor de beheerde nodes. U kunt dezelfde test configuratie gebruiken die we hierboven hebben gebruikt voor CentOS, RedHat, Ubuntu, en elke andere Linux distributies.