Wanneer een applicatie niet werkt, wil je het liefst niet horen van collega's: "Het probleem ligt aan jouw kant." Uiteindelijk lijden de gebruikers - en het maakt hen niet uit welk deel van het team verantwoordelijk is voor de storing. De DevOps-cultuur is juist ontstaan om ontwikkeling en ondersteuning te verenigen en hen rondom een gezamenlijke verantwoordelijkheid voor het eindproduct te brengen.
Welke praktijken vallen onder het begrip DevOps en waarom zijn ze nodig? Wat doen DevOps-engineers en wat moeten ze kunnen? Deze en andere vragen worden beantwoord door experts van EPAM: Kirill Sergeev, systeemingenieur en DevOps-evangelist, en Igor Boiko, leading systeemingenieur en coördinator van een van de DevOps-teams binnen het bedrijf.

Waarom is DevOps nodig?
Vroeger was er een barrière tussen ontwikkelaars en ondersteuning (de zogenaamde operations). Het klinkt paradoxaal, maar zij hadden verschillende doelen en KPI's, hoewel ze hetzelfde werk deden. De doelstelling van ontwikkeling was om de zakelijke vereisten zo snel mogelijk te realiseren en deze toe te voegen aan het werkende product. De ondersteuning was verantwoordelijk voor de stabiele werking van de applicatie - en elke wijziging brengt die stabiliteit in gevaar. Hier is sprake van een belangenconflict - DevOps is ontstaan om dit op te lossen.
Wat is DevOps?
De vraag is goed - en controversieel: er is nog geen consensus in de wereld hierover. Bij EPAM geloven ze dat DevOps technologieën, processen en een cultuur van samenwerking binnen een team verenigt. Deze unie is gericht op de continue levering van waarde aan eindgebruikers.
Kirill Sergeev: "Ontwikkelaars schrijven code, testers controleren deze, en beheerders installeren het eindproduct in de productieomgeving. Lang tijd waren deze delen van het team enigszins gescheiden, en toen ontstond het idee om hen te verenigen in een gezamenlijk proces. Zo zijn de DevOps-praktijken ontstaan."
Het is de dag aangebroken waarop ontwikkelaars en systeemingenieurs geïnteresseerd raakten in elkaars werk. De barrière tussen productie en ondersteuning begon te vervagen. Zo is DevOps ontstaan, dat bestaat uit praktijken, cultuur en processen voor samenwerking binnen het team.

Wat is de essentie van de DevOps-cultuur?
De verantwoordelijkheid voor het eindresultaat ligt bij elke deelnemer van het team. Het meest interessante en complexe aan de DevOps-filosofie is het begrijpen dat een specifieke persoon niet alleen verantwoordelijk is voor zijn of haar taak, maar ook voor de werking van het gehele product. Het probleem ligt niet aan iemands kant - het is een gezamenlijk probleem, en elk teamlid helpt mee om het op te lossen.
Een fundamenteel principe van de DevOps-cultuur is om problemen daadwerkelijk op te lossen, in plaats van alleen DevOps-praktijken toe te passen. Bovendien worden deze praktijken niet 'aan iemands kant' geïmplementeerd, maar in het hele product. Een project heeft niet alleen een DevOps-engineer nodig - het heeft een oplossing voor het probleem nodig, en de rol van de DevOps-engineer kan worden verdeeld over verschillende teamleden met verschillende specialisaties.
Wat zijn de verschillende DevOps-praktijken?
DevOps-praktijken dekken alle fasen van de levenscyclus van software.
Igor Boyko: "De ideale situatie is wanneer we DevOps-praktijken vanaf het begin van het project toepassen. Samen met de architecten plannen we het architecturale landschap van de applicatie, waar deze zich zal bevinden en hoe deze zal schalen, en kiezen we het platform. Momenteel is microservices-architectuur populair - voor deze architectuur kiezen we een orchestration-systeem: we moeten in staat zijn om elk element van de applicatie afzonderlijk te beheren en onafhankelijk van elkaar bij te werken. Een andere praktijk is 'infrastructuur als code'. Dit is een aanpak waarbij de infrastructuur van het project wordt opgebouwd en beheerd met behulp van code, in plaats van via directe interactie met de servers.
Daarna gaan we naar de ontwikkelingsfase. Hier is een van de grootste praktijken de bouw van CI/CD: we moeten de ontwikkelaars helpen om wijzigingen snel, in kleine porties, vaker en met minder problemen in het product te integreren. CI/CD dekt zowel de codecontrole als het samenvoegen van de master in de codebasis, en het implementeren van de applicatie in test- en productomgeving.
Tijdens de CI/CD-fasen doorloopt de code quality gates. Hiermee wordt gecontroleerd of de code die van de ontwikkelaar workstation komt voldoet aan de gestelde kwaliteitscriteria. Hier worden unit- en UI-tests aan toegevoegd. Voor een snelle, pijnloze en gerichte implementatie van het product kan het geschikte type deployment worden gekozen.
Er is een rol voor DevOps-praktijken zelfs in de ondersteuning van bestaande producten. Ze worden toegepast voor monitoring, feedback, beveiliging en het doorvoeren van wijzigingen. Voor al deze taken bekijkt DevOps het vanuit het perspectief van continue verbetering. We minimaliseren repetitieve taken en automatiseren ze. Dit omvat ook migraties, applicatie-uitbreidingen en het handhaven van operationele stabiliteit.
Wat zijn de voordelen van DevOps-praktijken?
Als we een handleiding voor moderne DevOps-praktijken zouden schrijven, zouden op de eerste pagina drie punten staan: automatisering, versnelling van releases en snelle feedback van gebruikers.
Kirill Sergeev: "Het eerste is automatisering. We kunnen alle interacties binnen het team automatiseren: code geschreven - uitgerold - gecontroleerd - geïnstalleerd - feedback verzameld - terug naar het begin. Dit alles gebeurt automatisch.
Het tweede is het versnellen van de release en zelfs het vereenvoudigen van de ontwikkeling. Voor de klant is het altijd belangrijk dat het product zo snel mogelijk op de markt komt en eerder voordelen biedt dan concurrenten. Het proces van productlevering kan eindeloos worden verbeterd: tijd verkorten, extra controlepunten toevoegen, monitoring verfijnen.
Het derde is de versnelling van de feedback van de gebruiker. Als zij opmerkingen hebben, kunnen we onmiddellijk aanpassingen maken en de applicatie direct bijwerken.

Hoe verhouden de begrippen "systeemingenieur", "build engineer" en "DevOps engineer" zich tot elkaar?
Ze overlappen elkaar, maar hebben betrekking op iets verschillende gebieden.
Een systeemingenieur bij EPAM is een functie. Ze zijn er in verschillende niveaus: van junior tot chief-specialist.
Een build engineer is eerder een rol die je in een project kunt vervullen. Tegenwoordig verwijst men naar mensen die verantwoordelijk zijn voor CI/CD.
Een DevOps engineer is een specialist die DevOps-praktijken in een project implementeert.
Samengevat komt het ongeveer hierop neer: iemand in de functie van systeemingenieur vervult in een project de rol van build engineer en houdt zich bezig met de implementatie van DevOps-praktijken.
Waar houdt een DevOps engineer zich precies mee bezig?
DevOps-engineers brengen alle onderdelen van een project samen. Ze begrijpen de specifieke werkwijzen van programmeurs, testers en systeembeheerders en helpen hun werk te vereenvoudigen. Ze begrijpen de behoeften en eisen van het bedrijf, de rol ervan in het ontwikkelingsproces, en bouwen het proces met het oog op de belangen van de klant.
We hebben veel gesproken over automatisering - dat is waar DevOps-engineers zich in eerste instantie mee bezighouden. Dit is een zeer belangrijk punt, dat, naast andere zaken, de voorbereiding van de omgeving omvat.
Kirill Sergeev: "Voordat je updates in het product kunt implementeren, moeten ze op een testomgeving worden uitgeprobeerd. DevOps-engineers bereiden deze voor. Zij bevorderen de DevOps-cultuur binnen het project: zij implementeren DevOps-praktijken op alle lagen van hun projecten. Deze drie principes: automatisering, vereenvoudiging, versnelling - brengen zij overal waar ze kunnen reiken in."
Wat moet een DevOps-engineer weten?
In principe moet hij kennis hebben uit verschillende gebieden: programmeren, werken met besturingssystemen, databases, build- en configuratiesystemen. Daarvoor komt het vermogen om met cloudinfrastructuur, orkestratiesystemen en monitoring te werken.
1. Programmeertalen
DevOps-engineers kennen verschillende basis programmeertalen voor automatisering en kunnen bijvoorbeeld tegen een programmeur zeggen: "Laten we ervoor zorgen dat je de code installatie niet handmatig doet, maar met behulp van ons script dat alles automatiseert. We zullen een config-bestand voorbereiden, dat schoon en begrijpelijk zal zijn voor jou en voor ons - en we kunnen het op elk moment aanpassen. Daarnaast zien we wie, wanneer en waarom wijzigingen aanbrengt."
Een DevOps-engineer kan een of meerdere van deze talen leren: Python, Groovy, Bash, Powershell, Ruby, Go. Het is niet nodig om ze op een diep niveau te kennen - basiskennis van de syntax, OOP-principes en de vaardigheid om eenvoudige scripts voor automatisering te schrijven is voldoende.
2. Besturingssystemen
Een DevOps-engineer moet begrijpen op welke server het product zal worden geïnstalleerd, in welke omgeving het zal draaien en met welke services het zal interageren. Men kan zich specialiseren in Windows- of Linux-systemen.
3. Versiebeheersystemen
Zonder kennis van versiebeheersystemen komt een DevOps-engineer nergens. Git is momenteel een van de populairste systemen.
4. Cloudproviders
AWS, Google, Azure - vooral als we het over het Windows-segment hebben.
Kirill Sergeev: «Cloudproviders bieden ons virtuele servers, die perfect zijn voor CI/CD-processen.
De installatie van tien fysieke servers vereist ongeveer honderd handmatige handelingen. Elke server moet handmatig worden opgestart, het juiste besturingssysteem moet worden geïnstalleerd, onze applicatie moet op deze tien servers worden geïnstalleerd, en daarna moet alles tien keer worden gecontroleerd. Cloudservices vervangen deze procedure door tien regels code, en een goede DevOps-engineer moet ermee kunnen werken. Dit bespaart tijd, moeite en geld - zowel voor de klant als voor het bedrijf.»
5. Orkestratiesystemen: Docker en Kubernetes
Kirill Sergeev: «Virtuele servers zijn verdeeld in containers, waarin we onze applicatie kunnen installeren. Wanneer er veel containers zijn, moet je ermee beheren: de een inschakelen, de ander uitschakelen, ergens backups maken. Dit wordt een behoorlijk ingewikkelde taak, waarvoor een orkestratiesysteem nodig is.
Vroeger werd elk applicatie door een aparte server beheerd – elke wijziging in zijn werking kon de werking van de applicatie beïnvloeden. Dankzij containers worden applicaties geïsoleerd en draaien ze afzonderlijk - elk op zijn eigen virtuele machine. Als er een storing optreedt, hoeft er geen tijd besteed te worden aan het zoeken naar de oorzaak. Het is eenvoudiger om de oude container te vernietigen en een nieuwe toe te voegen.»
6. Configuratiesystemen: Chef, Ansible, Puppet
Wanneer je een hele parkeerserver moet onderhouden, moet je veel vergelijkbare handelingen verrichten. Dit is tijdrovend en ingewikkeld, en handmatig werk verhoogt de kans op fouten. Hier komen configuratiesystemen om de hoek kijken. Hiermee wordt een script gemaakt dat zowel door programmeurs, DevOps-engineers als systeembeheerders gemakkelijk te lezen is. Dit script helpt bij het automatisch uitvoeren van dezelfde handelingen op servers. Zo wordt het aantal handmatige handelingen (en dus fouten) verminderd.
Welke carrière kan een DevOps-engineer opbouwen?
Er is zowel horizontale als verticale ontwikkeling mogelijk.
Igor Boyko: «Wat betreft horizontale ontwikkeling hebben DevOps-engineers momenteel de breedste perspectieven. Alles verandert voortdurend, en vaardigheden kunnen in verschillende richtingen worden uitgebreid: van versiebeheersystemen tot monitoring, van configuratiebeheer tot databases.
Je kunt systeemarchitect worden als je geïnteresseerd bent in hoe een applicatie werkt in alle fasen van zijn levenscyclus – van ontwikkeling tot ondersteuning.
Hoe word je een DevOps-engineer?
- Lees de boeken ‘Project Phoenix’ en DevOps Handbook. Dit zijn de ware pijlers van de DevOps-filosofie, en het eerste is een roman.
- Bestudeer de technologieën uit de bovenstaande lijst: zelfstandig of via online cursussen.
- Sluit je aan als DevOps-engineer bij een open-sourceproject.
- Oefen en stel DevOps-praktijken voor in je persoonlijke en professionele projecten.
Bron: habr.com
