Bij Hendrikx ITC gebruiken wij al meer dan 9 jaar SaltStack voor onze configuration management behoeften. Doordat SaltStack laatst in het nieuws was vanwege een overname door VMWare, kreeg ik het idee om nog eens toe te lichten waarom het nuttig kan zijn om een configuration management systeem, en met name SaltStack, te gebruiken.

Wat Is Configuration Management

Configuration management is een process voor het verkrijgen en behoud van de consistentie tussen de beoogde en daadwerkelijke werking van een systeem gedurende de levensduur. Hierbij is het de bedoeling dat er een eenduidige bron van de configuratie is, welke altijd als leidend wordt beschouwd voor het systeem (Single Source of Truth).

In de IT komt er in de meeste gevallen een grote mate van automatisering bij kijken, omdat dit kosteneffectief is en de foutgevoeligheid omlaag brengt.

Waarom Configuration Management

Configuration management kan als buitenproportioneel worden beschouwd als je bijvoorbeeld maar 1 server hoeft te beheren waar maar een paar mensen van afhankelijk zijn. Zodra het meer servers of systemen worden en er meer mensen van afhankelijk zijn, dan wil je al gauw meer grip op de configuratie van het systeem. Een aantal concrete redenen:

  • De configuratie van een systeem moet reproduceerbaar zijn. Dus als je eenzelfde systeem nogmaals moet opzetten, dan moet eenduidig zijn vastgelegd hoe dat moet.
  • Als je wilt inzien wat de specifieke eigenschappen van een systeem zijn, dan moet dit in een oogopslag te zien zijn. Dit is bijvoorbeeld voor security audits van belang.
  • Voor het opsporen van de oorzaak van storingen is het heel krachtig om het historisch verloop van de configuratie te kunnen bekijken. Dit wordt eenvoudig mogelijk door de configuratie in een versiebeheersysteem vast te leggen en te beheren.

Waarom SaltStack

Voor al onze configuration management werkzaamheden gebruiken wij binnen Hendrikx ITC SaltStack in combinatie met Git voor het versiebeheer. Wij hebben hiervoor gekozen na een aantal jaar CFEngine te hebben gebruikt. De eigenschappen van SaltStack waardoor wij er na 8 jaar nog steeds de voorkeur aan geven:

  • Open Source. Nu zijn veel van de populaire configuration management systemen open source, maar ik vind het toch een belangrijk kenmerk.
  • Snelheid. Onder andere door een efficient messaging protocol tussen de Salt master en zijn zogenaamde minions, is SaltStack zeer snel.
  • Schaalbaarheid. Omdat de Salt minions de bulk van het werk op zich nemen, is het werk verdeeld en daardoor het systeem zeer schaalbaar.
  • Leesbaarheid van de configuratie. Zoals ook met code het geval is, wordt de configuratie van een systeem vaker gelezen dan geschreven. Dan is het dus ook zeer belangrijk dat snel duidelijk is wat het resultaat is van de configuratiebeschrijving. Doordat ze voor SaltStack een op YAML gebaseerde, declaratieve taal hebben gekozen is dit erg prettig te lezen.
  • Templating. Doordat SaltStack een elegante scheiding biedt tussen configuratiebeschrijving en configuratieparameters ontstaat samen met het gebruik van templates een zeer krachtig mechanisme voor het beschrijven van een systeem. Variaties op een configuratiebeschrijving kunnen zo met simpele parameters uitgedrukt worden.

Hoe Werkt SaltStack

Een SaltStack configuratie bestaat normaal gesproken uit een Salt Master en een reeks agents Salt Minions die geinstalleerd zijn op alle systemen die je wil beheren. Nadat een Minion is geregistreerd bij de Master zal de Minion worden opgenomen in het proces van configuratiebeheer. Alle configuratie die van toepassing is op het systeem waar de Minion op geinstalleerd is zal worden toegepast wanneer het `highstate` commando wordt gegeven aan de Minions. Het highstate commando houdt in: Breng de gespecificeerde Minions in de beschreven state. SaltStack zal na het uitvoeren van het commando rapporteren of het succesvol was, en wat de toegepaste aanpassingen zijn.

Zoals eerder genoemd wordt de configuratie bepaald door een combinatie van ‘state’ (configuratiebeschrijving in SaltStack terminologie) en ‘pillar’ data (een soort parameters in SaltStack terminologie) die beiden door de Master aan de Minion worden geleverd.

Middels het Jinja templating mechanisme zijn allerlei constructies te maken binnen de state, gebruik makend van de pillar data. Zo zijn bijvoorbeeld conditionele elementen mogelijk en lussen over lijsten van parameters (bijvoorbeeld gebruikers) uit de pillar data.

Conclusie

Deze blog is niet de plaats om in te gaan op alle details van SaltStack, maar ik hoop dat mensen eerder geneigd zullen zijn om te gaan kijken naar het
gebruik van configuration management systemen zoals SaltStack. Het biedt je namelijk in allerlei situaties een heel helder inzicht in de huidige staat en de history van je systemen.