Ansible-architectuur
Dus, over dat Ansible-gedoe…
Ansible is een veelgebruikte open-sourcetool die taken kan automatiseren, zoals het implementeren van software, het wijzigen van systeemconfiguraties of het beheren van systemen. Ansible wordt ook vaak gezien als een configuratiebeheertool. Het heeft de mogelijkheid om verschillende taken uit te voeren op doelsystemen om ervoor te zorgen dat de configuratie altijd hetzelfde is. We noemen dit beleidshandhaving. Een ander voordeel is dat het pakketversies kan afdwingen, zoals ervoor zorgen dat op alle doelsystemen dezelfde versie van Apache is geïnstalleerd.
Ansible is een push-gebaseerd systeem. Dit betekent dat Ansible de verbinding met uw servers of switches initieert en taken daarop uitvoert (waarvoor u Ansible Modules en Playbooks gebruikt). Het kan worden gebruikt om een breed scala aan taken te automatiseren, waaronder het installeren van software, het wijzigen van configuratiebestanden en meer.
Een van de belangrijkste voordelen van Ansible is dat het eenvoudig te gebruiken is en geen speciale programmeervaardigheden vereist. Het gebruikt een eenvoudige taal genaamd “YAML” om de taken te beschrijven die u wilt dat Ansible uitvoert, en het kan worden gebruikt om taken op één server of op honderden servers tegelijk te automatiseren.
Ansible wordt voornamelijk gebruikt door systeembeheerders, netwerk- en beveiligingsbeheerders en DevOps-engineers om de implementatie en het beheer van applicaties en systemen te automatiseren, maar het kan worden gebruikt door iedereen die taken op één of meer servers moet automatiseren.
Ansible blijft open-source, maar is ook overgenomen door Red Hat. Red Hat heeft Ansible ook opgenomen in hun serviceaanbod en biedt ondersteuning voor zakelijke klanten.
Red Hat heeft een zakelijke versie van Ansible, genaamd het Ansible Automation Platform (voorheen Ansible Tower). Naast toegevoegde functionaliteit, zoals de ansible-navigator, beschikt het ook over een grafische gebruikersinterface.
Ansible-usecases
Ansible is een krachtige tool voor het automatiseren van de configuratie en het beheer van servers en andere infrastructuur. Enkele veelvoorkomende use cases voor Ansible zijn:
- Provisioning en configuratiebeheer: Ansible kan worden gebruikt om het proces van het instellen en configureren van servers te automatiseren, inclusief het installeren van software en het configureren van services.
- Orchestrator: Ansible kan worden gebruikt om taken op meerdere systemen tegelijk uit te voeren, in een specifieke volgorde die door een beheerder wordt ingesteld. Een voorbeeld hiervan is dat NGINX op een systeem wordt geïnstalleerd en de nieuwe server daarna wordt toegevoegd aan een bestaande load balancer.
- Implementatie van applicaties: Ansible kan worden gebruikt om het proces van het implementeren en schalen van applicaties op meerdere servers te automatiseren.
- Cloud provisioning: Ansible kan worden gebruikt om resources op cloudplatforms zoals AWS en GCP te provisioneren en beheren.
- Netwerkautomatisering: Ansible kan worden gebruikt om de configuratie en het beheer van netwerkapparaten zoals routers en switches te automatiseren.
- Beveiligingsautomatisering: Ansible kan worden gebruikt om taken met betrekking tot beveiliging te automatiseren, zoals het instellen van firewalls en het implementeren van nalevingsbeleid.
- Continue integratie/Continue implementatie: Ansible kan worden gebruikt als een tool om het proces van het bouwen, testen en implementeren van software te automatiseren.
Simpel gezegd.. schrijf het script één keer, profiteer voor altijd!
Ansible-architectuur
Agentloos
Een van de belangrijkste voordelen van Ansible is dat het agentloos is. Dit maakt het ook eenvoudig om het in te stellen en te gebruiken binnen een organisatie. Ansible vereist geen speciale agents of software die geïnstalleerd moeten worden op de servers die het beheert.
Dit betekent dat Ansible gebruikt kan worden op een breed scala aan tools en systemen. Naast servers kunnen ze ook gebruikt worden om acties te automatiseren naar netwerkapparatuur zoals switches, routers en firewalls! Andere tools die werken met agents zouden geen netwerkapparaten kunnen configureren, omdat een agent niet op deze systemen geïnstalleerd kan worden.
Daarentegen vereisen veel andere automatiseringstools (bijv. Chef & Puppet) dat agents geïnstalleerd worden op de servers die beheerd worden, wat tijdrovend en complex kan zijn.
Met Ansible hoef je de software alleen te installeren op één machine, de zogenaamde “control machine”, en dan kun je het gebruiken om al je servers te beheren.
Een ander voordeel van Ansible dat agentloos is, is dat het minder resource-intensief is. Omdat het niet nodig is om agents te installeren op de servers die beheerd worden, verbruikt het geen extra resources zoals CPU en geheugen. Dit kan vooral belangrijk zijn in omgevingen waar resources beperkt zijn.
Over het algemeen maakt het feit dat Ansible agentloos is het een eenvoudige, lichtgewicht en effectieve tool voor het automatiseren van taken in verschillende omgevingen
Ansible samengevat:
- Taal en ontwerp: Ansible-playbooks zijn geschreven in YAML, een voor mensen leesbare dataserialisatiestandaard. Dit maakt het makkelijker voor mensen die niet bekend zijn met programmeren om Ansible-configuraties te begrijpen en te schrijven.
- Agentloos: Ansible vereist geen agent op de beheerde knooppunten. Het gebruikt doorgaans SSH (of WinRM voor Windows-hosts) voor communicatie, wat betekent dat er geen extra software vereist is op de knooppunten die het beheert.
- Push-gebaseerd: Ansible gebruikt een push-gebaseerd mechanisme waarbij de besturingsmachine de configuratie naar de knooppunten pusht.
- Statusbeheer: Ansible kan worden gebruikt voor zowel configuratiebeheer (om de gewenste systeemstatus te behouden) als ad-hoc taakuitvoering. Meer hierover in idempotentie!
Idempotentie
Als je zegt dat Ansible idempotent is, betekent dit dat je hetzelfde playbook of dezelfde taak meerdere keren op hetzelfde systeem kunt uitvoeren en dat na de eerste succesvolle uitvoering, volgende uitvoeringen geen wijzigingen zullen aanbrengen, tenzij er iets op het systeem is gewijzigd ten opzichte van de gewenste staat. Ansible zorgt ervoor dat het systeem in de opgegeven staat blijft zonder onnodig acties te herhalen.
Waarom is idempotentie belangrijk?
- Consistentie: zorgt ervoor dat configuraties consistent zijn, zelfs als playbooks meerdere keren worden uitgevoerd.
- Efficiëntie: vermijdt redundante bewerkingen. Als een taak een systeem al in de gewenste staat heeft gebracht, is het niet nodig om de taak opnieuw uit te voeren.
- Veiligheid: vermindert het risico op onbedoelde bijwerkingen die kunnen optreden door opdrachten meerdere keren uit te voeren.
- Voorspelbaarheid: systeembeheerders en ontwikkelaars kunnen erop vertrouwen dat het uitvoeren van een playbook geen onverwachte resultaten zal hebben als het systeem zich al in de gewenste staat bevindt.
Voorbeelden
- Bestandscreatie: Als u een taak in Ansible hebt die het bestaan van een bestand verzekert, kan Ansible het bestand de eerste keer dat u de taak uitvoert, maken. Bij volgende uitvoeringen herkent Ansible echter dat het bestand al bestaat en probeert het niet opnieuw te maken, tenzij sommige kenmerken van het bestand (zoals machtigingen of inhoud) afwijken van de gewenste status.
- Pakketinstallatie: Als u een taak hebt om een softwarepakket te installeren, installeert Ansible het pakket de eerste keer dat u het uitvoert. Bij volgende uitvoeringen ziet Ansible dat het pakket al is geïnstalleerd en slaat de installatiestap over, tenzij er een behoefte is om de versie te wijzigen of het pakket te verwijderen.