Het wat, hoe en waarom van Ansible

Een belangrijk onderdeel van ons werk is het opzetten en uitrollen van serveromgevingen. Vroeger ging dat handmatig, maar door toenemende complexiteit van systemen (multi-server setups bijvoorbeeld) is ook de benodigde inspanning en foutgevoeligheid toegenomen. Gelukkig is er Ansible, dat helpt op een overzichtelijke en gestructureerde manier te werken. Onze engineer Marty vertelt ons over het wat, hoe en waarom van deze tool.

ansible

Ansible is een configuration management tool. Wat is configuration management eigenlijk?

Configuration management is dat je een geautomatiseerde manier hebt om de installatie en configuratie van je serveromgeving te beheren. Dat houdt in dat je scripts gebruikt om serveromgevingen automatisch in te richten en dat als er iets onbedoeld gewijzigd wordt op de server, die wijzigingen dat automatisch weer teruggedraaid worden.

Waarom zou je daar programma’s voor gebruiken en doe je het niet gewoon handmatig?

Voor de consistentie, dat je instellingen die je van tevoren hebt bepaald niet zomaar kan wijzigen. Als je bijvoorbeeld een server toevoegt aan een omgeving waar al meerdere servers op zijn aangesloten wil je dat de nieuwe server precies hetzelfde geconfigureerd wordt als de rest. Als je dat met de hand gaat instellen is er altijd een kans dat je een fout maakt, het blijft immers mensenwerk. Door het gebruik van een configuration management programma heb je een soort ‘blauwdruk’ die ervoor zorgt dat je geen variaties hebt in je instellingen.

Welke voordelen heeft het gebruik van dit soort software?

Voornamelijk consistentie van het opleveren van servers. Daarnaast maakt het het onderhoud een stuk eenvoudiger en overzichtelijker. Plus het automatiseren van het deployment proces zorgt ervoor dat het uitrollen van nieuwe omgevingen een stuk sneller wordt: je begint met een basis image en als dat opgestart is kan je met bijvoorbeeld Ansible de server verder inrichten voor de taak waar de server voor ingezet wordt. Zaken als het aanmaken van gebruikersaccounts, configuratie van de web- of databaseserver software wordt allemaal voor je geregeld.

Marty

"Vroeger duurde het zeker twee dagen om een server helemaal goed klaar te zetten; nu mikken we op een uitrol van twee uur."

Wanneer hebben jullie als engineers besloten om met Ansible te gaan werken?

Ongeveer drie jaar geleden hadden we besloten er iets mee te willen doen, dus toen heeft mijn collega Niels zich drie maanden lang in een kamertje opgesloten om allerlei Ansible scripts te gaan schrijven. Hij heeft toen alle configuraties die we met de hand deden geconverteerd naar Ansible.

Dan moet ik er wel bij zeggen dat wat we nu gebruiken een soort ‘ruwe versie’ van configuratiemanagement is; het zijn nog steeds losse onderdelen die we implementeren: nginx voor de webserver, ProFTPD voor de filediensten, MariaDB voor de database, etcetera. Uiteindelijk gaat het zo worden dan we klantspecifieke omgevingen via configuratiemanagement gaan uitrollen. In plaats van het los configureren van een virtualhost, database en PHP configuratie willen we het abstracter gaan maken. Een klant heeft bijvoorbeeld 3 type hosting configuraties: SHTML, Laravel en WordPress. Elk type heeft zijn eigen configuratieopties. Door in Ansible aan te geven dat we een Laravel hosting willen hebben zorgt Ansible ervoor dat er netjes een virtualhost wordt aangemaakt in Nginx, een database in MariaDB en bepaalde PHP configuraties worden ingesteld. We hoeven dus dat niet meer afzonderlijk in de Ansible configuratie te zetten, daar zorgt een klant specifieke rol dan voor.

En, wanneer zijn we zover?

We zijn er mee bezig en ik verwacht dat we dat begin 2019 kunnen implementeren voor nieuwe opdrachten. Bestaande omgevingen zullen dan ook langzaam aan gemigreerd gaan worden.

Ansible maakt gebruik van zogenoemde ‘playbooks’. Wat betekent die term?

Je hebt binnen Ansible verschillende rollen en die rollen beheren een bepaald component. Bijvoorbeeld een rol voor Nginx, een rol voor PHP of een rol voor MariaDB. Een playbook combineert die rollen tot de manier waarop jij wil dat de uitrol van een server gebeurt. Als je verschillende diensten aanbiedt wil je dus ook verschillende playbooks hebben, ieder toegespitst op het soort omgeving dat je nodig hebt.

Gebruiken we eigenlijk al playbooks op dit moment?

Ja, maar dat is nu nog op serverniveau. De nieuwere dingen die we uitrollen gaan wat meer richting de configuratie van een specifieke dienst zoals een database- of web omgeving al dan niet gecombineerd met b.v. een load-balancer.

Hoe is de manier van werken binnen Rootnet veranderd door het implementeren van Ansible?

Die is in zoverre veranderd dat we zo weinig mogelijk met de hand doen. Als er nieuwe wensen zijn schrijven we hiervoor een Ansible rol uit en rollen dat uit op de betreffende omgeving. Op die manier wordt de installatie en configuratie van een bepaalde dienst gelijk gewaarborgd. De configuratie wordt ook centraal beheerd en staat in versiebeheer. We kunnen dus ook wijzigingen die we maken makkelijk terugdraaien. Het voordeel van versiebeheer is ook dat je makkelijker met meerdere mensen tegelijkertijd aan 1 project kan werken. Dat is handig als je met een team van 20 man zit maar omdat wij met z’n vieren zijn houden we het liever simpel en overzichtelijk en werkt er in de praktijk één engineer tegelijk aan een klankomgeving.

Wat merken klanten hier nu eigenlijk van?

Het opzetten van omgevingen gaat veel sneller, dat is het voornaamste. Vroeger duurde het zeker twee dagen om een server helemaal goed in te richten, nu mikken we op een uitrol binnen twee uur. We werken er aan om dat verder te verkorten, naar ongeveer een uur per omgeving.

Plus we kunnen nu foutlozer werken. Een setup met veel maatwerk is gevoelig voor fouten als je alles handmatig moet gaan installeren. Elke handmatige mutatie brengt nu eenmaal een risico met zich mee, hoe geconcentreerd en systematisch je ook werkt. Met een configuratie management tool haal je die foutgevoeligheid eruit.

Uiteindelijk is ook de bedoeling, zodra we daar goede scripts voor hebben gemaakt, dat klanten qua hostingomgeving bepaalde dingen ook zelf kunnen regelen. Bijvoorbeeld het aanmaken van een nieuwe hostingomgeving via het klantenportaal. Maar dat is eind volgend jaar op zijn vroegst want dan moeten we heel goed rekening houden met beveiligingsaspect en het moet het nog geïntegreerd worden in ons backoffice systeem dus daar komt nog een hoop bij kijken.

Heb je nog tips voor mensen of teams die ook met Ansible aan de slag willen?

Bouw het in lagen op. Kijk eerst in de basis wat je kan automatiseren. Kijk naar de handmatige acties die je nu moet doen en werk dat eerst uit.

En wat vooral belangrijk is: zorg dat je goed nadenkt over hoe je iets wilt gaan neerzetten, met name naamgeving en de structuur van je repository. Ansible gaat er namelijk vanuit dat je alles in één repository hebt staan maar wij hebben die juist per klant ingericht. Dat gaan we nu aanpakken en met de kennis van nu hadden we daar bij de implementatie van Ansible meer rekening mee kunnen houden.