Ordina DevOps: puppetmaster configuratie in GIT

Inleiding
In deze tutorial leg ik uit hoe grote bedrijven hun puppet omgeving hebben ingericht. De puppetmaster configuratie wordt opgeslagen in een GIT repository, zodat wijzigingen op een centrale plaats kunnen worden gedaan. De ingebruikzijnde puppet modules worden ook centraal beheerd. Deze uitleg is gebaseerd op een puppettraining. Het is een globale uitleg van de werking, en geen stap voor stap handleiding.
Vereiste software
vagrant                                  (configuratie van VM’s in code)
virtualbox                             (hypervisor)
puppet (open source versie)                                (puppet server en client)
r10k                                         (om de puppetmaster configuratie uit een git repository te pullen)
git repository: github, gitlab, gitbucket, …   (om de puppetmaster configuratie op te slaan, en eventueel eigen puppet modules)
Configuratiebestanden
Globale stappen
1. vagrant twee VM’s laten opspinnen: 1. puppetmaster 2. puppetclient (+ installatie)
2. ssh-keygen
3. control-repo aanmaken
4. vagrant vm’s opspinnen
5. r10k configureren
1. Vagrant
Pak de bestanden in puppet_r10k.tar.gz uit.  In de Vagrantfile staat de configuratie van de Virtual Box VM’s. In deze file wordt ook een deel van de puppetmaster configuratie gedaan. Pas de locatie van de boxfile aan (dit is het CentOS 7 baseimage).
2. SSH-keys
Genereer een public en private key pair met ssh-keygen. Google is your friend.
Plaats beiden bestanden (id_rsa en id_rsa.pub) in de map keys. Deze keys zullen door vagrant worden gekopieërd naar /root/.ssh/
3. Maak een git repo aan
Genaamd ‘control-repo’. Voeg onder deployment keys de public key (id_rsa.pub) toe. Hierdoor kan r10k de configuratie in dit repository binnenhalen op de puppetmaster.
Plaats de control-repo configuratiebestanden in dit repo. Meer uitleg: control-repo.
4. vagrant vm’s opspinnen
Ga in een terminalvenster naar de map met de Vagrantfile, en draai vagrant up. Als Vagrant een error geeft omdat deze VM’s al bestaan, dan kunnen ze verwijderd worden met vagrant destroy -f. De VM’s worden nu opgespint, dit kan even duren.
5. r10k configureren
We hebben nu twee VM’s: een puppetmaster en een puppetclient. Op de puppetmaster staat puppet open source geïnstalleerd. De machines zijn bereikbaar via ssh, via ssh root@localhost -p 2200 of -p 2222. Doe een git clone van het control-repo in /etc/puppet/environments/development. Het is handig om vooraf het control-repo te clonen op de locatie machine, en de default branch (waarop wordt gecommit) in te stellen op development: git checkout -b development
De volgende bestanden dienen aangepast te worden om te verwijzen naar het control-repo:
– /etc/puppet/puppet.conf
hiera_config path wijzigen in development
– /etc/puppet/r10k/r10k.yaml
wijzig remote: ‘git@gitlab.com:Eimert/control-repo.git’ in je eigen GIT repo, en zorg dat de public key als deployment key is ingesteld (eerder uitgelegd).
–  /etc/puppet/environments/production/manifests/site.pp
Om een module te classificeren voor installatie wordt hiera gebruikt. Uncomment, en zorg dat site.pp een hiera_include(‘classes’) bevat:
node default
{
  # classes for all nodes:
  hiera_include(‘classes’)
}
‘classes’ wordt gebruikt in de .yaml bestanden onder /etc/puppet/environments/production/hieradata/. Voorbeeld volgt onder ‘een eigen module installeren’.
Nu kun je de eerste r10k run starten: /usr/local/bin/r10k deploy environment -pv -c /etc/puppet/r10k/r10k.yaml
De puppet configuratie uit het control-repo wordt nu binnengehaald. De puppetconfiguratie kan nu op een centrale plaats (het git repo) gewijzigd worden, en automatisch (cron) binnengehaald worden door r10k. Ook regelt r10k het toevoegen en verwijderen van modules, uitleg hieronder. Je bent nu klaar met je eigen r10k puppetmaster server!
puppet

Een eigen module toevoegen
1. Schrijf je eigen puppet module of kopieër een puppet module van de puppet forge.
2. Maak een GIT repo aan voor deze module, en push de code.
3. Zorg dat er een deployment key is ingesteld voor het repository met deze puppet module. De puppetmaster moet over de private key beschikken (/root/.ssh/id_rsa).
4. Bewerk de Puppetfile in het control-repo (opgeslagen in de puppetmaster onder /etc/puppet/environments/development/Puppetfile). Voeg een regel toe met je eigen module, bijvoorbeeld:
mod ‘vim’, :git => ‘git@gitlab.com:Eimert/puppet-vim-customized.git’
5. r10k zal in een volgende run de Puppetfile binnenhalen, opmerken dat er een module is toegevoegd, en deze module ook binnenhalen en beschikbaar maken. /usr/local/bin/r10k deploy environment -pv -c /etc/puppet/r10k/r10k.yaml
Een (eigen) module installeren
1. Voer een puppet run uit op de puppetclient om te controleren of de machine is geregistreerd bij de puppetmaster. puppet agent -tv
2. Er moet nu ingesteld worden dat de module wordt geïnstalleerd op de client. Met hiera (hierarchy of values) kan een zeer nauwkeurige configuratie gemaakt worden. Voor dit voorbeeld gebruik ik een eenvoudige configuratie: dit is mijn hiera.yaml bestand:
hiera.yaml:

:backends:
  – yaml
:yaml:
  :datadir: /etc/puppet/environments/production/hieradata
:hierarchy:
  – “node/%{::hostname}”
  – common
Om te kijken welke modules een machine zou moeten hebben, wordt eerst gekeken naar nodes/hostname. Als er geen .yaml bestand bestaat van de puppetclient, wordt verder gezocht in common.yaml. Dit is mijn common.yaml:
# available modules are in the Puppetfile
# site.pp does a hiera_include(‘classes’) which refer to this:

classes:
  – ntp
  – vim
ntp::restrict:
  –
ntp::autoupdate: false
ntp::enable: true
ntp::servers:
  – 0.eu.pool.ntp.org iburst
  – 1.eu.pool.ntp.org iburst
  – 2.eu.pool.ntp.org iburst
  – 3.eu.pool.ntp.org iburstvim::background: light
Uitleg over de syntax: — classes: hier wordt naar verwezen door site.pp. Hieronder staan de namen van de modules die geïnstalleerd worden, zoals ntp en vim (namen van modules worden definieert in de Puppetfile). Om de ‘servers’ parameter van de ntp module een waarde mee te geven bij de installatie wordt ntp::servers: (plus waarden) gebruikt, zie bovenstaand voorbeeld).
3. Voer op de puppet client puppet agent -tv om een run te starten
4. Controleer of de gewenste wijzigingen zijn doorgevoerd.


Conclusie
We hebben een puppetmaster en client gecreëerd en geconfigureerd. Onze puppetmaster configuratie en puppet module configuratie is flexibel en staat op een centrale plaats (het GIT repo). Met hiera is een scheiding gemaakt tussen configuratiespecifieke data en data van de module. Dit maakt onze modules flexibel inzetbaar omdat ze diverse configuraties aankunnen, zonder aanpassingen aan de modulecode. Hiera maakt het ook mogelijk om nodes een specifieke configuratie mee te geven op basis van hun kenmerken. De ‘AIX’ nodes kunnen bijvoorbeeld voorzien worden van ‘ksh’ als shell, en de ‘RHEL’ nodes van ‘bash’.

Roles and profiles
Kan optioneel toegevoegd worden. Creëert combinaties van modules. Bijvoorbeeld een rol ‘appserver’ en een profiel ‘tomcat’ of ‘jboss’ of ‘websphere’. Zie slideshare voor meer informatie.

Opmerking: bij de Ordina Devops groep is terraform gebruikt, in deze tutorial is vagrant gebruikt.

Advertisements

Geef een reactie

Vul je gegevens in of klik op een icoon om in te loggen.

WordPress.com logo

Je reageert onder je WordPress.com account. Log uit / Bijwerken )

Twitter-afbeelding

Je reageert onder je Twitter account. Log uit / Bijwerken )

Facebook foto

Je reageert onder je Facebook account. Log uit / Bijwerken )

Google+ photo

Je reageert onder je Google+ account. Log uit / Bijwerken )

Verbinden met %s