Introductie
Configuratiebeheersystemen zijn ontworpen om het proces van het beheren van grote aantallen servers te stroomlijnen, voor beheerders en operationele teams. Ze stellen u in staat om veel verschillende systemen op geautomatiseerde wijze te beheren vanuit één centrale locatie.
Hoewel er veel populaire configuratiebeheertools beschikbaar zijn voor Linux-systemen, zoals Chef en Puppet, zijn deze vaak complexer dan veel mensen willen of nodig hebben. Ansible is een uitstekend alternatief voor deze opties omdat het een architectuur biedt die geen speciale software vereist die op knooppunten moet worden geïnstalleerd, waarbij SSH wordt gebruikt om de automatiseringstaken uit te voeren en YAML-bestanden om provisioning-details te definiëren.
In deze handleiding zullen we bespreken hoe u Ansible installeert op een Ubuntu 20.04-server en enkele basisprincipes van het gebruik van deze software doornemen. Voor een meer hoog niveau overzicht van Ansible als configuratiebeheertool, raadpleeg Een Inleiding tot Configuratiebeheer met Ansible.
Vereisten
Om deze tutorial te volgen, heeft u nodig:
-
Eén Ansible-besturingsknooppunt: Het Ansible-besturingsknooppunt is de machine die we zullen gebruiken om verbinding te maken met en de Ansible-hosts te beheren via SSH. Uw Ansible-besturingsknooppunt kan uw lokale machine zijn of een server die is toegewijd aan het uitvoeren van Ansible, hoewel deze handleiding ervan uitgaat dat uw besturingsknooppunt een Ubuntu 20.04-systeem is. Zorg ervoor dat het besturingsknooppunt het volgende heeft:
- Een niet-rootgebruiker met sudo-rechten. Om dit in te stellen, kunt u Stappen 2 en 3 volgen van onze Handleiding voor initiële serverinstellingen voor Ubuntu 20.04. Let echter op dat als u een externe server gebruikt als uw Ansible-besturingsknooppunt, u elke stap van deze handleiding moet volgen. Hierdoor wordt een firewall geconfigureerd op de server met
ufw
en wordt externe toegang tot uw niet-rootgebruikersprofiel ingeschakeld, wat beide helpt om de externe server veilig te houden. - Een SSH-sleutelpaar dat is gekoppeld aan deze gebruiker. Om dit in te stellen, kunt u Stap 1 volgen van onze handleiding over Hoe u SSH-sleutels instelt op Ubuntu 20.04.
- Een niet-rootgebruiker met sudo-rechten. Om dit in te stellen, kunt u Stappen 2 en 3 volgen van onze Handleiding voor initiële serverinstellingen voor Ubuntu 20.04. Let echter op dat als u een externe server gebruikt als uw Ansible-besturingsknooppunt, u elke stap van deze handleiding moet volgen. Hierdoor wordt een firewall geconfigureerd op de server met
-
Één of meer Ansible-hosts: Een Ansible-host is elke machine waarop uw Ansible-besturingsknooppunt is geconfigureerd om te automatiseren. Deze handleiding gaat ervan uit dat uw Ansible-hosts externe Ubuntu 20.04-servers zijn. Zorg ervoor dat elke Ansible-host het volgende heeft:
- De openbare SSH-sleutel van het Ansible-besturingsknooppunt toegevoegd aan de
authorized_keys
van een systeemgebruiker. Deze gebruiker kan zowel root zijn als een gewone gebruiker met sudo-rechten. Om dit in te stellen, kunt u Stap 2 volgen van Hoe u SSH-sleutels instelt op Ubuntu 20.04.
- De openbare SSH-sleutel van het Ansible-besturingsknooppunt toegevoegd aan de
Stap 1 – Het installeren van Ansible
Om Ansible te gebruiken als een middel om uw serverinfrastructuur te beheren, moet u de Ansible-software installeren op de machine die zal fungeren als de Ansible-besturingsnode.
Voer vanaf uw besturingsnode het volgende commando uit om het officiële project-PPA (persoonlijk pakketarchief) op te nemen in de lijst met bronnen van uw systeem:
- sudo apt-add-repository ppa:ansible/ansible
Druk op ENTER
wanneer u wordt gevraagd om de PPA-toevoeging te accepteren.
Vernieuw vervolgens de pakketindex van uw systeem zodat deze op de hoogte is van de beschikbare pakketten in de nieuw toegevoegde PPA:
- sudo apt update
Na deze update kunt u de Ansible-software installeren met:
- sudo apt install ansible
Uw Ansible-besturingsnode heeft nu alle benodigde software om uw hosts te beheren. Vervolgens zullen we bespreken hoe u uw hosts kunt toevoegen aan het inventarisbestand van de besturingsnode, zodat het deze kan beheren.
Stap 2 – Het opzetten van het inventarisbestand
Het inventarisbestand bevat informatie over de hosts die je zult beheren met Ansible. Je kunt ergens tussen één en enkele honderden servers opnemen in je inventarisbestand, en hosts kunnen worden georganiseerd in groepen en subgroepen. Het inventarisbestand wordt ook vaak gebruikt om variabelen in te stellen die alleen geldig zijn voor specifieke hosts of groepen, om ze te gebruiken in playbooks en sjablonen. Sommige variabelen kunnen ook van invloed zijn op de manier waarop een playbook wordt uitgevoerd, zoals de ansible_python_interpreter
-variabele die we zo meteen zullen zien.
Om de inhoud van je standaard Ansible-inventaris te bewerken, open je het /etc/ansible/hosts
-bestand met de teksteditor van jouw keuze op je Ansible-besturingsknooppunt:
- sudo nano /etc/ansible/hosts
Opmerking: Hoewel Ansible meestal een standaard inventarisbestand aanmaakt op etc/ansible/hosts
, ben je vrij om inventarisbestanden op elke locatie aan te maken die beter aan jouw behoeften voldoet. In dit geval moet je het pad naar jouw aangepaste inventarisbestand opgeven met de -i
-parameter bij het uitvoeren van Ansible-commando’s en playbooks. Het gebruik van inventarisbestanden per project is een goede praktijk om het risico van het uitvoeren van een playbook op de verkeerde groep servers te minimaliseren.
Het standaard inventarisbestand dat wordt meegeleverd met de Ansible-installatie bevat een aantal voorbeelden die je kunt gebruiken als referentie voor het instellen van jouw inventaris. Het volgende voorbeeld definieert een groep met de naam [servers]
met drie verschillende servers erin, elk geïdentificeerd door een aangepaste alias: server1, server2 en server3. Zorg ervoor dat je de gemarkeerde IP-adressen vervangt door de IP-adressen van jouw Ansible-hosts.
[servers]
server1 ansible_host=203.0.113.111
server2 ansible_host=203.0.113.112
server3 ansible_host=203.0.113.113
[all:vars]
ansible_python_interpreter=/usr/bin/python3
De all:vars
ondergroep stelt de ansible_python_interpreter
host parameter in die geldig zal zijn voor alle hosts die zijn opgenomen in dit inventaris. Deze parameter zorgt ervoor dat de externe server de Python 3-uitvoerbare /usr/bin/python3
gebruikt in plaats van /usr/bin/python
(Python 2.7), die niet aanwezig is in recente Ubuntu-versies.
Wanneer je klaar bent, sla het bestand op en sluit het af door op CTRL+X
te drukken, gevolgd door Y
en ENTER
om je wijzigingen te bevestigen.
Wanneer je je inventaris wilt controleren, kun je het volgende uitvoeren:
- ansible-inventory --list -y
Je ziet dan een output die hierop lijkt, maar met jouw eigen serverinfrastructuur zoals gedefinieerd in je inventarisbestand:
Outputall:
children:
servers:
hosts:
server1:
ansible_host: 203.0.113.111
ansible_python_interpreter: /usr/bin/python3
server2:
ansible_host: 203.0.113.112
ansible_python_interpreter: /usr/bin/python3
server3:
ansible_host: 203.0.113.113
ansible_python_interpreter: /usr/bin/python3
ungrouped: {}
Nu je je inventarisbestand hebt geconfigureerd, heb je alles wat je nodig hebt om de verbinding met je Ansible-hosts te testen.
Stap 3 — Verbinding testen
Nadat je het inventarisbestand hebt ingesteld om je servers op te nemen, is het tijd om te controleren of Ansible in staat is om verbinding te maken met deze servers en opdrachten uit te voeren via SSH.
Voor deze handleiding zullen we de Ubuntu root account gebruiken, omdat dat doorgaans het enige account is dat standaard beschikbaar is op nieuw gemaakte servers. Als je Ansible-hosts al een reguliere sudo-gebruiker hebben, wordt aangeraden om dat account in plaats daarvan te gebruiken.
U kunt de -u
argument gebruiken om de externe systeemgebruiker op te geven. Als dit niet wordt verstrekt, zal Ansible proberen verbinding te maken als uw huidige systeemgebruiker op de besturingsknoop.
Vanaf uw lokale machine of Ansible-besturingsknoop voert u het volgende uit:
- ansible all -m ping -u root
Deze opdracht zal de ingebouwde ping
module van Ansible gebruiken om een connectiviteitstest uit te voeren op alle knooppunten in uw standaardinventaris, waarbij verbinding wordt gemaakt als root. De ping
module zal testen:
- of knooppunten toegankelijk zijn;
- of u geldige SSH referenties heeft;
- of knooppunten in staat zijn om Ansible modules uit te voeren met behulp van Python.
U zou output moeten krijgen die lijkt op dit:
Outputserver1 | SUCCESS => {
"changed": false,
"ping": "pong"
}
server2 | SUCCESS => {
"changed": false,
"ping": "pong"
}
server3 | SUCCESS => {
"changed": false,
"ping": "pong"
}
Als dit de eerste keer is dat u via SSH verbinding maakt met deze servers, wordt u gevraagd om de authenticiteit van de knooppunten die u via Ansible verbindt te bevestigen. Wanneer daarom wordt gevraagd, typt u yes
en drukt u vervolgens op ENTER
om te bevestigen.
Zodra u een "pong"
reactie terugkrijgt van een knooppunt, betekent dit dat u gereed bent om Ansible commando’s en playbooks op die server uit te voeren.
Opmerking: Als u geen succesvolle reactie terugkrijgt van uw servers, controleer dan onze Ansible Cheat Sheet Gids voor meer informatie over het uitvoeren van Ansible commando’s met verschillende verbindingsmogelijkheden.
Stap 4 — Uitvoeren van Ad-Hoc Opdrachten (Optioneel)
Na bevestiging dat je Ansible-besturingsknooppunt kan communiceren met je hosts, kun je beginnen met het uitvoeren van ad-hoc opdrachten en playbooks op je servers.
Elke opdracht die je normaal gesproken op een externe server via SSH zou uitvoeren, kan worden uitgevoerd met Ansible op de servers die zijn gespecificeerd in je inventarisbestand. Als voorbeeld kun je de schijfgebruik controleren op alle servers met:
- ansible all -a "df -h" -u root
Output
server1 | CHANGED | rc=0 >>
Filesystem Size Used Avail Use% Mounted on
udev 3.9G 0 3.9G 0% /dev
tmpfs 798M 624K 798M 1% /run
/dev/vda1 155G 2.3G 153G 2% /
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/vda15 105M 3.6M 101M 4% /boot/efi
tmpfs 798M 0 798M 0% /run/user/0
server2 | CHANGED | rc=0 >>
Filesystem Size Used Avail Use% Mounted on
udev 2.0G 0 2.0G 0% /dev
tmpfs 395M 608K 394M 1% /run
/dev/vda1 78G 2.2G 76G 3% /
tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
/dev/vda15 105M 3.6M 101M 4% /boot/efi
tmpfs 395M 0 395M 0% /run/user/0
...
De gemarkeerde opdracht df -h
kan worden vervangen door elke gewenste opdracht.
Je kunt ook Ansible-modules uitvoeren via ad-hoc opdrachten, vergelijkbaar met wat we eerder hebben gedaan met de ping
-module voor het testen van de verbinding. Bijvoorbeeld, zo kun je de apt
-module gebruiken om de nieuwste versie van vim
op alle servers in je inventaris te installeren:
- ansible all -m apt -a "name=vim state=latest" -u root
Je kunt ook individuele hosts, evenals groepen en subgroepen, targeten bij het uitvoeren van Ansible-opdrachten. Zo controleer je bijvoorbeeld de uptime
van elke host in de servers
-groep:
- ansible servers -a "uptime" -u root
We kunnen meerdere hosts specificeren door ze te scheiden met dubbele punten:
- ansible server1:server2 -m ping -u root
Voor meer informatie over het gebruik van Ansible, inclusief hoe je playbooks kunt uitvoeren om de serverconfiguratie te automatiseren, kun je onze Ansible Referentiegids raadplegen.
Conclusie
In deze handleiding heb je Ansible geïnstalleerd en een inventarisbestand opgezet om ad-hoc commando’s uit te voeren vanaf een Ansible-besturingsknooppunt.
Zodra je hebt bevestigd dat je in staat bent om verbinding te maken en je infrastructuur te beheren vanaf een centrale Ansible-besturingsmachine, kun je elk gewenst commando of playbook uitvoeren op die hosts.
Voor meer informatie over het gebruik van Ansible, bekijk onze Ansible Cheat Sheet Gids.