Configuratiebeheer
Hoe configuratiebeheer engineeringteams helpt om robuuste en stabiele systemen te bouwen
Ian Buchanan
Principal Solutions Engineer
In de jaren vijftig ontwikkelde het Amerikaanse ministerie van Defensie een discipline voor technisch management om veranderingen in de ontwikkeling van complexe systemen te volgen. Het ministerie gaf dit systeem en verschillende iteraties zeer technische namen, totdat het in 2001 een geconsolideerde gids publiceerde waarin het technisch beheersysteem werd opgezet dat nu configuratiemanagement heet. Tegenwoordig wordt configuratiebeheer niet alleen gebruikt door het ministerie van Defensie, maar ook bij softwareontwikkeling, IT-servicebeheer, civiele techniek, industriële techniek en meer.
Compass gratis uitproberen
Verbeter je ontwikkelaarservaring, catalogiseer alle services en verbeter de gezondheid van je software.
Wat is configuratiebeheer?
Configuratiebeheer is een systeemtechnisch proces om de consistentie van de eigenschappen van een product gedurende de hele levensduur vast te stellen. In de technologiewereld is configuratiebeheer een IT-beheerproces dat individuele configuratie-items van een IT-systeem bijhoudt. IT-systemen bestaan uit IT-assets die variëren in granulariteit. Een IT-asset kan een stukje software, een server of een cluster van servers zijn. Het volgende is gericht op configuratiebeheer, aangezien dat rechtstreeks van toepassing is op IT-software-assets en software-asset CI/CD.
Softwareconfiguratiebeheer is een systeemtechnisch proces dat de metadata van de configuratie van softwaresystemen volgt en controleert en wijzigingen eraan bijhoudt. Bij softwareontwikkeling wordt configuratiebeheer vaak gebruikt in combinatie met versiebeheer en CI/CD-infrastructuur. Dit artikel richt zich op de moderne toepassing en het gebruik ervan in agile CI/CD-softwareomgevingen.
Waarom is configuratiebeheer belangrijk?
gerelateerd materiaal
Microservices vs. monolithische architectuur
Oplossing bekijken
Verbeter je DevEx met Compass
Configuratiebeheer helpt engineeringsteams om krachtige en stabiele systemen te bouwen met behulp van tools die automatisch updates naar configuratiegegevens beheren en controleren. Complexe softwaresystemen bestaan uit componenten die verschillen in granulariteit van omvang en complexiteit. Overweeg als concreter voorbeeld een microservice-architectuur. Elke service in een microservice-architectuur gebruikt configuratiemetadata om zichzelf te registreren en te initialiseren. Enkele voorbeelden van metadata van softwareconfiguratie zijn:
- Specificaties van de toewijzingen van computing hardwarebronnen voor CPU, RAM, enz.
- Eindpunten die externe verbindingen met andere services, databases of domeinen specificeren
- Geheimen zoals wachtwoorden en coderingssleutels
Deze configuratiewaarden kunnen gemakkelijk een bijzaak worden, waardoor de configuratie ongeorganiseerd en verspreid raakt. Stel je voor dat er op kantoor talloze post-it-briefjes met wachtwoorden en URL's rondwaaien. Configuratiebeheer lost deze uitdaging op door een "bron van waarheid” te creëren met een centrale locatie voor configuratie.
Git is een fantastisch platform voor het beheren van configuratiegegevens. Door configuratiegegevens naar een Git-repository te verplaatsen, kunnen versiebeheer en de repository fungeren als een bron van waarheid. Versiebeheer lost ook nog een ander configuratieprobleem op: onverwachte ingrijpende wijzigingen. Door onverwachte wijzigingen te beheren door middel van codecontrole en versiebeheer, wordt de downtime tot een minimum beperkt.
Configuratiewaarden worden vaak toegevoegd, verwijderd of gewijzigd. Zonder versiebeheer kan dit problemen veroorzaken. Eén teamlid kan een waarde voor de hardwaretoewijzing aanpassen zodat de software efficiënter werkt op zijn persoonlijke laptop. Wanneer de software later in een productieomgeving wordt geïmplementeerd, heeft deze nieuwe configuratie mogelijk een suboptimaal effect of kan deze defect raken.
Versiebeheer en configuratiebeheer lossen dit probleem op door configuratiewijzigingen beter zichtbaar te maken. Wanneer er een wijziging wordt aangebracht in de configuratiegegevens, houdt het versiebeheersysteem deze bij, waardoor teamleden een auditspoor van wijzigingen kunnen bekijken.
Dankzij versiebeheer van de configuratie is het mogelijk om functionaliteit naar de configuratie terug te draaien of 'ongedaan te maken', waardoor onverwachte defecten kunnen worden voorkomen. Versiebeheer toegepast op de configuratie kan snel teruggezet worden naar de laatst bekende stabiele toestand.
Hoe configuratiebeheer bij DevOps, CI/CD en agile past
Configuratiegegevens waren van oudsher moeilijk in bedwang te houden en kunnen gemakkelijk een bijzaak worden. Het is niet echt code, dus het wordt niet meteen in versiebeheer geplaatst. Ook zijn het geen eersteklas gegevens, dus het wordt niet opgeslagen in een primaire database. Traditioneel en kleinschalig systeembeheer wordt meestal gedaan met een verzameling scripts en ad hoc-processen. Configuratiegegevens kunnen soms over het hoofd gezien worden, maar zijn wel essentieel voor de werking van het systeem.
De opkomst van cloudinfrastructuren heeft geleid tot de ontwikkeling en invoering van nieuwe patronen voor infrastructuurbeheer. Complexe, cloudgebaseerde systeemarchitecturen worden beheerd en geïmplementeerd door het gebruik van configuratiegegevensbestanden. Op deze nieuwe cloudplatforms kunnen teams aangeven welke hardwarebronnen en netwerkverbindingen geregistreerd moeten worden via menselijke en machineleesbare gegevensbestanden zoals YAML. De gegevensbestanden worden vervolgens gelezen en de infrastructuur wordt in de cloud geregistreerd. Dit patroon wordt infrastructure-as-code (IaC) genoemd.
Configuratiebeheer van DevOps
In de beginjaren van de ontwikkeling van internettoepassingen werden de hardwarebronnen en het systeembeheer voornamelijk handmatig uitgevoerd. Systeembeheerders hebben configuratiegegevens bijeengebracht terwijl ze handmatig hardwarebronnen registreerden en beheerden op basis van configuratiegegevens.
Configuratiebeheer is een belangrijk onderdeel van een DevOps-levenscyclus. DevOps-configuratie is de ontwikkeling en automatisering van de rol van systeembeheerder, waarbij het beheer en de implementatie van infrastructuur worden geautomatiseerd.
DevOps-configuratie brengt ook de verantwoordelijkheid voor systeembeheer onder het overkoepelende software-engineering. Bedrijven gebruiken het tegenwoordig zodat software-engineers de benodigde resources op aanvraag aan kunnen vragen en kunnen registreren. Dit neemt een potentieel knelpunt in de organisatorische afhankelijkheid weg van een softwareontwikkelingsteam dat wacht op middelen van een apart systeembeheerteam.
CI/CD-configuratiebeheer
Het CI/CD-configuratiebeheer maakt gebruik van op pull request gebaseerde codebeoordelingsworkflows om de implementatie van codewijzigingen in een live softwaresysteem te automatiseren. Dezelfde stroom kan toegepast worden op configuratiewijzigingen. CI/CD kan zo worden ingesteld dat goedgekeurde aanvragen voor configuratiewijzigingen onmiddellijk geïmplementeerd kunnen worden op een actief systeem. Een perfect voorbeeld van dit proces is een GitOps-workflow.
Agile configuratiebeheer
Configuratiebeheer stelt agile teams in staat om configuratiewerk duidelijk te sorteren en te prioriteren. Voorbeelden van configuratiewerk zijn klusjes en taken zoals:
- SSL-certificaten voor productie bijwerken
- Een nieuw database-eindpunt toevoegen
- Het wachtwoord wijzigen voor e-mailservices voor ontwikkelaars, stagen en productie.
- API-sleutels toevoegen voor een nieuwe integratie met derden
Zodra er een platform voor configuratiebeheer is, hebben teams inzicht in het werk dat nodig is voor configuratietaken. Configuratiebeheer kan geïdentificeerd worden als afhankelijkheden voor ander werk en kan op de juiste manier worden aangepakt als onderdeel van agile sprints.
Configuratiebeheertools
Git
Git is het toonaangevende versiebeheersysteem om codewijzigingen bij te houden. Door configuratiemanagementgegevens naast code toe te voegen aan een Git-repository, krijg je een holistisch versiebeheeroverzicht van een heel project. Git is een fundamenteel hulpmiddel voor configuratiebeheer op een hoger niveau. De volgende lijst met andere tools voor configuratiebeheer is ontworpen voor opslag in een Git-repository en om het volgen van Git-versiebeheer te gebruiken.
Docker
Docker introduceerde containerisatie, een geavanceerde vorm van configuratiebeheer, zoals een configuratie-lockdown. Docker is gebaseerd op configuratiebestanden genaamd Dockerfiles, die een lijst met opdrachten bevatten die worden geëvalueerd om de verwachte momentopname van de status van het besturingssysteem te reconstrueren. Docker maakt containers van deze Docker-bestanden die momentopnamen zijn van een vooraf geconfigureerde applicatie. Dockerfiles zijn vastgelegd in een Git-repository voor versiebeheer en hebben aanvullend configuratiebeheer nodig om ze in de infrastructuur te kunnen implementeren.
Terraform
Terraform is een open source configuratiebeheerplatform van HasiCorp. Terraform gebruikt IaC om clusters, cloudinfrastructuur of diensten aan te bieden en te beheren. Amazon Web Services (AWS), Microsoft Azure en andere cloudplatforms worden door Terraform ondersteund. Elk cloudplatform heeft zijn eigen v vertegenwoordiging en interface voor gemeenschappelijke infrastructuurcomponenten zoals servers, databases en wachtrijen. Terraform bouwde een abstractielaag met configuratietools voor cloudplatforms waarmee teams bestanden kunnen schrijven die reproduceerbare definities van hun infrastructuur zijn.
Ansible, Salt Stack, Chef, Puppet
Ansible, Salt Stack, Chef en Puppet zijn frameworks voor IT-automatisering. Deze frameworks automatiseren de processen van veel traditionele systeembeheerders. Elk framework gebruikt een reeks configuratiegegevensbestanden — meestal YAML of XML — die worden geëvalueerd door een uitvoerbaar bestand.
De bestanden met configuratiegegevens geven een reeks acties aan die uitgevoerd moeten worden om een systeem te configureren. De acties worden vervolgens uitgevoerd door het uitvoerbare bestand. Het uitvoerbare bestand verschilt in de verschillende systemen in taal: Ansible en Salt Stack zijn gebaseerd op Python en Chef op Ruby. Deze workflow lijkt op het uitvoeren van ad hoc-shellscripts, maar biedt een gestructureerdere en fijnere ervaring via de ecosystemen van de respectieve platforms. Deze tools maken de automatisering mogelijk die nodig is om CI/CD te bereiken.
Configuratiebeheer implementeren
Identificatie
De eerste actie op het gebied van configuratiebeheer is het verzamelen van informatie. De configuratiegegevens moeten geaggregeerd en samengesteld worden uit verschillende applicatieomgevingen, ontwikkeling, stagen en productie voor alle componenten en services die in gebruik zijn. Alle geheime gegevens, zoals wachtwoorden en sleutels, moeten geïdentificeerd worden en veilig versleuteld en opgeslagen worden. Op dit moment moeten de configuratiegegevens geordend worden in gegevensbestanden die aangeduid kunnen worden als een centrale bron van waarheid.
Basis
Nadat de configuratiegegevens zijn geaggregeerd en georganiseerd, kan er een basislijn worden vastgesteld. Een basislijnconfiguratie is een bekende configuratiestatus die de afhankelijke software zonder fouten zal laten werken. Deze basislijn wordt meestal gemaakt door de configuratie van een werkende productieomgeving te bekijken en die configuratie-instellingen vast te leggen.
Versiebeheer
Je ontwikkelingsproject moet een versiebeheersysteem gebruiken. Als dat niet het geval is, installeer dan Git, initialiseer een repository voor het project en voeg de bestanden met configuratiegegevens toe aan de repository. Een waarschuwing voordat je configuratiegegevens aan een repository toevoegt: zorg ervoor dat geheime gegevens, zoals wachtwoorden of sleutels, versleuteld zijn met een externe sleutel. Geheime gegevens die per ongeluk in een repository zijn geplaatst, vormen een enorm risico. Deze moeten uit de geschiedenis van de repository's verwijderd worden, anders lopen ze het risico te worden uitgebuit.
auditeren
Het ordenen en toevoegen van configuratiegegevens aan een repository maakt samenwerking en inzicht in de systeemconfiguratie mogelijk. De populaire workflow voor pull-aanvragen die softwareteams gebruikt om code te controleren en te bewerken, kan vervolgens worden toegepast op configuratiegegevensbestanden. Dit helpt bij het opstellen van een audit- en boekhoudsysteem. Alle wijzigingen die in de configuratie worden toegepast, moeten door het team worden beoordeeld en geaccepteerd. Dit zorgt voor meer verantwoording en meer inzicht in configuratiewijzigingen.
IT Ops en CMDB
Tot nu toe hebben we het gehad over configuratiebeheer zoals dat van toepassing is op software-assets in agile en CI/CD-omgevingen. IT Ops-teams beheren ook actief de configuratie en doen dat in een configuratiebeheerdatabase, of CMBD. Een CMDB slaat informatie op over hardware, software en netwerkcomponenten en de relaties daartussen. De IT Ops-teams houden zich bezig met onderlinge afhankelijkheden, licenties, contracten en de services en het budget die nodig zijn om alles draaiende te houden. Nu IT Ops de onderlinge afhankelijkheden beheert en softwareteams de configuratie als code beheren, kunnen organisaties profiteren van stabiele systemen en uitzonderlijke uptime.
Conclusie...
Configuratiebeheer is een noodzakelijk hulpmiddel voor het beheer van complexe softwaresystemen. Gebrek aan configuratiebeheer kan ernstige problemen veroorzaken met de betrouwbaarheid, uptime en de mogelijkheid om een systeem op te schalen. Veel huidige tools voor softwareontwikkeling hebben ingebouwde functies voor configuratiebeheer. Bitbucket biedt een krachtig systeem voor configuratiebeheer dat is opgebouwd rond Git workflows voor pull-aanvragen en CI/CD-pipelines.
Deel dit artikel
Volgend onderwerp
Aanbevolen artikelen
Bookmark deze resources voor meer informatie over soorten DevOps-teams of voor voortdurende updates over DevOps bij Atlassian.