De meeste gebruikers vinden het nuttig om te begrijpen wat Salt is en hoe Salt werkt voordat ze beginnen met het installatieproces. Salt gebruikt een master-clientmodel waarin een Salt-master commando's uitgeeft aan een client en de client het commando uitvoert.

Opmerking: Als onderdeel van het VMware-initiatief om problematische terminologie te verwijderen, zal de term Salt-master worden vervangen door een betere term in SaltStack Config en gerelateerde producten en documentatie. Het bijwerken van de terminologie kan enkele releasecycli in beslag nemen voordat dit volledig is voltooid.

Wat is Salt?

SaltStack Config werkt op Salt, een op Python gebaseerd opensourceframework voor externe uitvoering dat wordt gebruikt voor:

  • Configuratiebeheer
  • Automatisering
  • Inrichting
  • Orkestratie

Salt is de onderliggende technologie voor de kernfunctionaliteit van SaltStack Config. SaltStack Config verbetert Salt en breidt Salt uit, waardoor aanvullende functionaliteit en functies worden geboden die het gebruiksgemak verbeteren. Zie SaltStack Config-systeemarchitectuur voor een samenvatting van de SaltStack Config-infrastructuur.

In het volgende diagram worden de primaire onderdelen van de basisarchitectuur van Salt weergegeven:


Salt-architectuur

In de volgende gedeelten worden enkele belangrijke onderdelen van de Salt-architectuur beschreven die relevant zijn voor de installatie van SaltStack Config.

Salt-masters en Salt-minions

Salt gebruikt het master-clientmodel waarin een Salt-master commando's uitgeeft aan een client en de client het commando uitvoert. In het Salt-ecosysteem is de Salt-master een server die de Salt-masterservice gebruikt. Deze geeft commando's uit aan een of meer Salt-minions. Dit zijn knooppunten die de minionservice uitvoeren en die zijn geregistreerd bij die specifieke Salt-master.

Een andere manier om Salt te beschrijven is als uitgever-abonneemodel. De Salt-master publiceert opdrachten die moeten worden uitgevoerd en minions abonneren zich op die opdrachten. Als een specifieke opdracht van toepassing is op die minion, wordt de opdracht uitgevoerd.

Als een minion de uitvoering van een opdracht heeft voltooid, stuurt deze opdrachtresultaatgegevens terug naar de Salt-master. Salt heeft twee poorten die standaard worden gebruikt voor de communicatie van de minions met hun Salt-master. Deze poorten werken samen om gegevens te ontvangen en te leveren aan de Message Bus. De Message Bus van Salt is ZeroMQ, waarmee een asynchrone netwerktopologie wordt gemaakt om de snelst mogelijk communicatie te bieden.

Doelen en grains

De Salt-master geeft aan welke minions de opdracht moeten uitvoeren door een doel te definiëren. Een doel is de groep minions, verspreid over een of meer Salt-masters, waarop het Salt-commando van een opdracht van toepassing is.

Opmerking:

Een Salt-master kan ook worden beheerd als een minion en kan een doel zijn als deze de minionservice uitvoert.

Hieronder volgt een voorbeeld van een van de vele soorten commando's die een Salt-master kan uitgeven aan een minion. Dit commando geeft aan dat alle minions de Vim-applicatie moeten installeren:

salt -v '*' pkg.install vim

In dit geval is de glob '*' het doel, wat aangeeft dat alle minions dit commando moeten uitvoeren. Er zijn veel andere doelopties beschikbaar, waaronder het targeten van een specifieke minion op id of het targeten van minions op basis van hun gedeelde eigenschappen of kenmerken (in Salt grains genoemd).

Salt komt met een interface om informatie over het onderliggende systeem af te leiden. Dit wordt de graininterface genoemd, omdat deze Salt voorziet van grains met informatie. Er worden grains verzameld voor het besturingssysteem, de domeinnaam, het IP-adres, de kernel, het type besturingssysteem, het geheugen en vele andere systeemeigenschappen. U kunt ook uw eigen aangepaste graingegevens maken.

Graingegevens zijn vrij statisch. Graingegevens worden echter vernieuwd wanneer systeeminformatie verandert (zoals netwerkinstellingen) of wanneer een nieuwe waarde wordt toegewezen aan een aangepaste grain.

Gebeurtenissysteem (gebeurtenisbus) openen

Het gebeurtenissysteem wordt gebruikt voor inter-procescommunicatie tussen de Salt-master en -minions. In het gebeurtenissysteem:

  • Gebeurtenissen worden gezien door zowel de Salt-master als -minions.
  • Gebeurtenissen kunnen worden bewaakt en geëvalueerd door beide.

De gebeurtenisbus doet het basiswerk voor orkestratie en realtimebewaking.

Alle minions zien opdrachten en resultaten door zich te abonneren op gebeurtenissen die in het gebeurtenissysteem worden gepubliceerd. Salt gebruikt een pluggable gebeurtenissysteem met twee lagen:

  • ZeroMQ (0MQ) - De huidige standaardbibliotheek op socketniveau biedt een flexibele transportlaag.
  • Tornado - Volledig op TCP gebaseerd transportlaaggebeurtenissysteem.

Een van de sterkste punten van Salt is de snelheid van uitvoering. De communicatiebus van het gebeurtenissysteem is efficiënter dan het uitvoeren van een webservice (http) op een hoger niveau. Het externe uitvoeringssysteem is het onderdeel waarop alle onderdelen zijn gebouwd, waardoor gecentraliseerde externe uitvoering mogelijk is om de belasting over resources te verspreiden.

Salt-statussen

Naast de externe uitvoering biedt Salt een andere methode voor het configureren van minions door te declareren welke status een minion moet hebben, waarnaar wordt verwezen als Salt-status. Salt-statussen maken configuratiebeheer mogelijk. U kunt Salt-statussen gebruiken om de infrastructuur te implementeren en te beheren met eenvoudige YAML-bestanden. Met de statussen kunt u recursieve en voorspelbare taken automatiseren door opdrachten in de wachtrij te zetten die Salt implementeert zonder dat er gebruikersinvoer nodig is. U kunt ook meer complexe voorwaardelijke logica aan statusbestanden toevoegen met Jinja.

Ter illustratie van de subtiele verschillen tussen externe uitvoering en configuratiebeheer gebruikt u het commando waarnaar is verwezen in het vorige gedeelte over doelen en grains waarin Salt de applicatie Vim op alle minions heeft geïnstalleerd:

Methodologie

Implementatie

Resultaat

Externe uitvoering

  • salt-v'*'pkg.installvim uitvoeren vanaf de terminal
  • Installeert Vim op afstand op de getargete minions

Configuratiebeheer

  • Schrijf een YAML-statusbestand dat controleert of Vim is geïnstalleerd
  • Dit statusbestand wordt vervolgens toegepast op de getargete minions
  • Zorgt ervoor dat Vim altijd is geïnstalleerd op de getargete minions
  • Salt analyseert het statusbestand en bepaalt welke acties moeten worden ondernomen om ervoor te zorgen dat de minion voldoet aan de statusdeclaraties
  • Als Vim niet is geïnstalleerd, automatiseert de applicatie de processen voor het installeren van Vim op de getargete minions

Het statusbestand dat verifieert of Vim is geïnstalleerd, kan er als volgt uitzien:

# File:/srv/salt/vim_install.sls
install_vim_now:
  pkg.installed:
     -pkgs:
         -vim

Als u deze status wilt toepassen op een minion, gebruikt u de module state.apply, zoals in het volgende voorbeeld:

salt '*' state.apply vim_install

Deze opdracht past de status vim_install toe op alle minions.

Formules zijn verzamelingen van statussen die nauw samenwerken om een minion of applicatie te configureren. Eén status kan bijvoorbeeld een andere status activeren.

Het top-bestand

Het is niet praktisch om elke status afzonderlijk handmatig uit te voeren en telkens specifieke minions te targeten. Sommige omgevingen bevatten honderden statusbestanden die duizenden minions targeten.

Salt biedt twee functies om te helpen bij dit schalingsprobleem:

  • Het bestand top.sls - Wijst Salt-statussen toe aan de betreffende minions.
  • Uitvoering van highstate - Voert in één uitvoering alle Salt-statussen uit die in top.sls zijn beschreven.

Het top-bestand geeft aan welke statussen op verschillende minions in bepaalde omgevingen moeten worden toegepast. Hier volgt een voorbeeld van een eenvoudig top-bestand:

# File: /srv/salt/top.sls
base:
  '*':
    - all_server_setup
  
  '01webserver':
    - web_server_setup

In dit voorbeeld verwijst base naar de Salt-omgeving, wat de standaardwaarde is. U kunt zo nodig meer dan één omgeving opgeven, zoals prod, dev, QA, enz.

Groepen minions worden opgegeven onder de omgeving, en de statussen worden vermeld voor elke set minions. Dit top-bestand geeft aan dat een status met de naam all_server_setup moet worden toegepast op alle minions '*' en dat de status web_server_setup moet worden toegepast op de minion 01webserver.

Om het Salt-commando uit te voeren, gebruikt u de functie state.highstate:

salt \* state.highstate

Met dit commando wordt het top-bestand toegepast op de getargete minions.

Salt-pillar

De pillar-functie van Salt gebruikt gegevens die zijn gedefinieerd op de Salt-master en distribueert deze naar behoefte aan minions. Pillar wordt voornamelijk gebruikt voor het opslaan van geheimen of andere zeer gevoelige gegevens, zoals accountverificatiegegevens, cryptografische sleutels of wachtwoorden. Pillar is ook nuttig om niet-geheime gegevens op te slaan die u niet rechtstreeks in uw statusbestanden wilt plaatsen, zoals configuratiegegevens.

Salt-pillar brengt gegevens in het cluster vanuit de andere richting dan grains. Hoewel grains met gegevens worden gegenereerd vanuit de minion, wordt de pillar met gegevens gegenereerd vanuit de Salt-master.

Pillars worden georganiseerd net als statussen in een pillar-statusstructuur, waarbij top.sls dient om pillar-gegevens te coördineren in omgevingen en minions die bij de gegevens horen. Informatie die met pillar wordt overgebracht, heeft een woordenboek dat is gegenereerd voor de getargete minion en versleuteld met de sleutel van die minion voor veilige gegevensoverdracht. Pillar-gegevens worden per minion versleuteld, wat het handig maakt voor het opslaan van gevoelige gegevens die specifiek zijn voor een bepaalde minion.

Beacons en reactors

Het beacon-systeem is een bewakingstool die naar uiteenlopende systeemprocessen op minions kan luisteren. Beacons kunnen reactors activeren die vervolgens een wijziging helpen implementeren of problemen helpen oplossen. Als bijvoorbeeld een time-out optreedt voor het antwoord van een service, kan het reactorsysteem de service opnieuw starten.

Beacons worden voor uiteenlopende doeleinden gebruikt, waaronder:

  • Geautomatiseerde rapportage
  • Levering van foutenlogboek
  • Microservicebewaking
  • Shell-activiteit van gebruiker
  • Resourcebewaking

Indien gekoppeld aan reactors, kunnen beacons automatisch vooraf geschreven antwoorden maken voor problemen met infrastructuur en applicaties. Reactors breiden Salt uit met geautomatiseerde antwoorden met behulp van vooraf geschreven correctiestatussen.

Reactors kunnen op verschillende scenario's worden toegepast:

  • Infrastructuur schakelen
  • Beheerders op de hoogte stellen
  • Mislukte applicaties opnieuw starten
  • Automatisch terugdraaien

Wanneer zowel beacons als reactors samen worden gebruikt, kunt u unieke statussen creëren die aan uw specifieke behoeften zijn aangepast.

Salt-runners en orkestratie

Salt-runners zijn applicaties voor meer gebruiksgemak die worden uitgevoerd met het commando salt-run. Salt-runners werken op dezelfde manier als de Salt-uitvoeringsmodules. Ze worden echter uitgevoerd op de Salt-master en niet op de minions. Een Salt-runner kan een eenvoudige clientaanroep of een complexe applicatie zijn.

Salt biedt orkestratiemogelijkheden voor systeembeheertaken in de hele onderneming. Orkestratie maakt het mogelijk om de activiteiten van meerdere machines op een centrale plaats te coördineren. Orkestratie biedt bovendien het voordeel dat u de volgorde kunt bepalen voor wanneer bepaalde configuratiegebeurtenissen optreden. Orkestratiestatussen worden op de Salt-master uitgevoerd met behulp van de status-runnermodule.

Wanneer u een installatie met meerdere knooppunten uitvoert, wordt in werkelijkheid een orkestratie uitgevoerd om SaltStack Config te installeren. In het installatiescenario met meerdere knooppunten kunt u een orkestratie-highstate uitvoeren die is ontworpen door VMware. De highstate wordt op uw Salt-master uitgevoerd en stelt de omgeving met meerdere knooppunten in. Deze installeert de SaltStack Config-kernarchitectuur op de drie andere knooppunten die PostgreSQL, Redis en RaaS zullen hosten.