I den forrige blog viste vi dig, hvordan du konfigurerer vores maskine med Puppet og derefter installerer og konfigurerer MongoDB. Da vi skal konfigurere et antal noder eller rettere maskiner, har vi brug for en dukkefører. I vores tilfælde vil vi dog oprette et git-lager, hvor vi vil skubbe vores manifester og anvende dem på vores maskiner.
For at oprette et lokalt git-lager skal du først vælge den sti, du vil bruge, dvs. /opt/. Opret derefter git repository ved at køre $sudo mkdir repository. Få root-brugertilladelse til at ændre indholdet af denne mappe ved at udstede kommandoen $sudo chown vagrant:vagrant repository. For at initialisere denne mappe som et git repository efter at have udstedt kommandoen $ cd repository, skal du køre $ git init --bare --shared, hvis du navigerer til denne mappe, skulle du nu se noget lignende
[email protected]:/vagrant/repository$ ls -l
total 12
-rw-rw-r-- 1 vagrant vagrant 23 Jul 15 07:46 HEAD
drwxr-xr-x 1 vagrant vagrant 64 Jul 15 07:46 branches
-rw-rw-r-- 1 vagrant vagrant 145 Jul 15 07:46 config
-rw-rw-r-- 1 vagrant vagrant 73 Jul 15 07:46 description
drwxr-xr-x 1 vagrant vagrant 352 Jul 15 07:46 hooks
drwxr-xr-x 1 vagrant vagrant 96 Jul 15 07:46 info
drwxr-xr-x 1 vagrant vagrant 128 Jul 15 07:46 objects
drwxr-xr-x 1 vagrant vagrant 128 Jul 15 07:46 refs
-rw-r--r-- 1 vagrant vagrant 0 Jul 1 15:58 test.pp
Dette er den grundlæggende struktur i et git-lager, og mulighederne --bare og --share vil gøre os i stand til at skubbe og trække filer fra mappen.
Vi er nødt til at konfigurere et system, der muliggør kommunikation mellem de involverede maskiner og denne eksterne masterserver. Systemet vil i dette tilfælde blive omtalt som en dæmon. Dæmonen vil acceptere anmodninger fra fjernværter om enten at trække eller skubbe filer til dette lager. For at gøre det skal du udsende kommandoen $git daemon --reuseaddr --base-path=/opt/ --export-all --enable=receive-pack
Den gode praksis vil dog være at oprette en fil, hvorfra vi kan køre denne i baggrunden. Vi skal derfor indstille tjenesten ved at udstede kommandoen sudo vim /etc/systemd/system/gitd. service. I den nye fil udfyldes den med dette indhold
[Unit]
Description=Git Repo Server Daemon
[Service]
ExecStart=/usr/bin/git daemon --reuseaddr --base-path=/opt/ --export-all --enable=receive-pack
[Install]
WantedBy=getty.target
DefaultInstance=ttyl
Gem filen og afslut ved at trykke på
[email protected]:/opt/repository$ systemctl start gitd
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Authentication is required to start 'gitd.service'.
Authenticating as: vagrant,,, (vagrant)
Password:
==== AUTHENTICATION COMPLETE ===
To check if the service is running $ ps -ef | grep git and you will get:
[email protected]:/opt/repository$ ps -ef | grep git
root 1726 1 0 07:48 ? 00:00:00 /usr/bin/git daemon --reuseaddr --base-path=/opt/ --export-all --enable=receive-pack
root 1728 1726 0 07:48 ? 00:00:00 git-daemon --reuseaddr --base-path=/opt/ --export-all --enable=receive-pack
vagrant 1731 1700 0 07:48 pts/0 00:00:00 grep --color=auto git
Nu hvis vi kører $ git clone git://198.168.1.100/repository (husk at ændre IP-adressen med din maskines netværks-IP) i rodmappen, vil du få en nyoprettet repository-mappe . Husk at konfigurere dine legitimationsoplysninger ved at fjerne kommentering af e-mail og adgangskode i konfigurationsfilen. Kør $ git config --global --edit for at få adgang til denne fil.
Dette lager vil fungere som vores centrale server for alle manifester og variabler.
Opsætning af miljøet
Vi skal nu konfigurere det miljø, hvorfra vi vil konfigurere noderne. Skift først til vagrant-mappen og klon det lager, vi lige har oprettet, med den samme kommando som ovenfor.
Fjern manifestmappen i vagrant-mappen ved at køre $rm -r manifest/.
Lav en ny produktionsmappe med $ mkdir-produktion og klon det samme lager, som vi oprettede ovenfor med $ git clone git://198.168.1.100/repository . (glem ikke prikken i slutningen)
Kopiér og indsæt indholdet af puppetlabs produktionsmiljø i denne produktionsmappe ved at udstede cp -pr /etc/puppetlabs/code/environments/production/* . Din produktionsmappe skulle nu se sådan ud
[email protected]:/vagrant/production$ ls -l
total 8
drwxr-xr-x 1 vagrant vagrant 64 Apr 26 18:50 data
-rw-r--r-- 1 vagrant vagrant 865 Apr 26 18:50 environment.conf
-rw-r--r-- 1 vagrant vagrant 518 Apr 26 18:50 hiera.yaml
drwxr-xr-x 1 vagrant vagrant 96 Jul 2 10:45 manifests
drwxr-xr-x 1 vagrant vagrant 64 Apr 26 18:50 modules
-rw-r--r-- 1 vagrant vagrant 0 Jul 1 16:13 test.pp
Vi skal skubbe disse ændringer til rodlageret, så vi kører
$ git add * && git commit -m "adding production default files" && git push
For at teste om git-konfigurationen virker, kan vi slette indholdet i mappen /etc/puppetlabs/code/environments/production/ ved at køre $ sudo rm -r * i denne mappe og derefter trække filerne fra master-depotet som root-bruger, dvs. $ git clone git://198.168.1.100/repository. (glem ikke prikken i slutningen). Kun mapper med indhold trækkes i dette tilfælde, så du kan gå glip af mapperne med manifester og moduler. Disse operationer kan udføres på alle involverede maskiner, enten master-dukke- eller klientmaskine. Så vores opgaver vil være at trække ændringerne fra hovedserveren og anvende ændringerne ved hjælp af manifesterne.
Udførelsesmanifest
Dette er scriptet, vi skal skrive for at hjælpe os med at trække ændringer og anvende dem automatisk på vores andre noder. Du skal ikke kun bruge produktionsmiljøet, du kan tilføje så mange miljøer som muligt og derefter diktere marionetten, hvilken du skal søge fra. I root production/manifests-mappen opretter vi eksekveringsmanifestet som puppet_exec.pp og udfylder det med følgende indhold
file { "This script will be pulling and applying the puppet manifests":
path => '/usr/local/bin/exec-puppet',
content => 'cd /etc/puppetlabs/code/environments/production/ && git pull; /opt/puppetlabs/bin/puppet apply manifests/'
mode => "0755"
}
cron {'exec-puppet':
command => '/usr/local/bin/exec-puppet',
hour => '*',
minute => '*/15'
}
Fil er en ressource, som er blevet beskrevet til at udføre dukkemanifesterne. Tilføj en passende sti til den fil, vi opretter, og udfyld den med de kommandoer, der skal udstedes, når den skal udføres.
Kommandoerne udføres systematisk, det vil sige, at vi først navigerer til produktionsmiljøet, trækker lagerændringerne og anvender dem derefter på maskinen.
Vi leverer manifestmappen til hver node, hvorfra den kan vælge det manifest, der er rettet til den til anvendelse.
Der er også indstillet en varighed, som udførelsesfilen skal køres over. I dette tilfælde for hver time, kør filen 4 gange.
For at anvende dette på vores nuværende maskine, $ cd /vagrant/production. Tilføj alt til git ved at køre $ git add * derefter $ git commit -m “add the cron-konfigurationer” og til sidst $ git push. Naviger nu til $ cd /etc/puppetlabs/code/environments/production/ og $ sudo git pull
Nu hvis vi tjekker manifestmappen i denne mappe, skulle du se puppet_exec.pp oprettet som vi lige havde defineret.
Nu, hvis vi kører $ sudo puppet, skal du anvende manifester/ og kontrollere, om filerne exec-puppet er blevet oprettet $ cat /usr/local/bin/exec-puppet
Indholdet af denne fil skal være
cd /etc/puppetlabs/code/environments/production/ && git pull; /opt/puppetlabs/bin/puppet apply manifests/
På dette tidspunkt har vi set, hvordan vi kan trække og skubbe ændringer til vores mastermaskine, som skal anvendes på alle de andre noder. Hvis vi kører $ sudo crontab -l, fremhæves nogle vigtige advarsler på den oprettede exec-puppet-fil.
# HEADER: This file was autogenerated at 2019-07-02 11:50:56 +0000 by puppet.
# HEADER: While it can still be managed manually, it is definitely not recommended.
# HEADER: Note particularly that the comments starting with 'Puppet Name' should
# HEADER: not be deleted, as doing so could cause duplicate cron jobs.
# Puppet Name: exec-puppet
*/15 * * * * /usr/local/bin/exec-puppet
Konfiguration af maskinerne
Lad os sige, at vores vagrant-fil ser ud
Vagrant.configure("2") do |config|
config.vm.define "puppet" do |puppet|
puppet.vm.box = "bento/ubuntu-16.04"
#puppet.vm.hostname = "puppet"
#puppet.vm.network "private_network", ip: "192.168.1.10"
end
config.vm.define "db" do |db|
db.vm.box = "bento/ubuntu-16.04"
end
end
I dette tilfælde har vi dukkemaskinen, hvor vi har lavet vores konfigurationer, og derefter db-maskinen. Nu skal vi automatisere maskinen sådan, at hver gang db-maskinen startes, har den en marionet allerede installeret og cron-filen allerede tilgængelig til at trække manifesterne og anvende dem i overensstemmelse hermed. Du skal omstrukturere indholdet af db-maskinen til at være som følger
config.vm.define "db" do |db|
db.vm.box = "bento/ubuntu-16.04"
vm.provision "shell", inline: <<-SHELL
cd /temp
wget https://apt.puppetlabs.com/puppet5-release-xenial.deb
dpkg -i puppet5-release-xenial.deb
apt-get update
apt-get install -y puppet-agent
apt-get install -y git
rm -rf /etc/puppetlabs/code/environments/production/*
cd /etc/puppetlabs/code/environments/production/
git clone git://198.168.1.100/repository .
/opt/puppetlabs/bin/puppet apply /etc/puppetlabs/code/environments/production/manifests/puppet_exec.pp
SHELL
End
Op til dette trin bør strukturen af din dukkemappe være noget som denne
Hvis du nu kører db-maskinen med kommandoen $ vagrant up db, vil nogle af ressourcerne blive installeret, og script, vi netop har defineret, kan findes i mappen produktion/manifester. Det er dog tilrådeligt at bruge dukkemesteren, som er begrænset til kun 10 noder til den gratis version, ellers bliver du nødt til at abonnere på en plan. Puppet Master tilbyder flere funktioner og distribution af manifester til flere noder, rapporteringslogfiler og mere kontrol på noderne.
Mongodb Puppet Module
Dette modul bruges i installationen af MongoDB, styring af mongod-serverinstallation, konfiguration af mongod-dæmonen og styring af Ops Manager-opsætningen udover MongoDB-mms-dæmonen.
Konklusion
I den næste blog viser vi dig, hvordan du implementerer et MongoDB Replica Set og Shards ved hjælp af Puppet.