I den tidigare bloggen visade vi hur du ställer in vår maskin med Puppet och sedan installerar och konfigurerar MongoDB. Eftersom vi ska konfigurera ett antal noder eller snarare maskiner behöver vi en marionettmästare. I vårt fall kommer vi dock att skapa ett git-arkiv där vi kommer att pusha våra manifest och tillämpa dem på våra maskiner.
För att skapa ett lokalt git-förråd, välj först sökvägen du vill använda, dvs /opt/. Skapa sedan git-repository genom att köra $sudo mkdir-repository. Få root-användartillstånd att ändra innehållet i den här katalogen genom att utfärda kommandot $sudo chown vagrant:vagrant repository. För att initiera den här katalogen som ett git-förråd efter att ha utfärdat kommandot $ cd-repository, kör $ git init --bare --shared om du navigerar till den här katalogen bör du nu se något liknande
[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
Detta är den grundläggande strukturen för ett git-förråd och alternativen --bare och --share kommer att göra det möjligt för oss att pusha och dra filer från katalogen.
Vi behöver konfigurera ett system som möjliggör kommunikation mellan de inblandade maskinerna och denna fjärrstyrda huvudserver. Systemet kommer i detta fall att kallas en demon. Demonen kommer att acceptera förfrågningar från fjärrvärdar att antingen dra eller pusha filer till detta förråd. För att göra det, utfärda kommandot $git daemon --reuseaddr --base-path=/opt/ --export-all --enable=receive-pack
Men det är bra att skapa en fil från vilken vi kan köra detta i bakgrunden. Vi måste därför ställa in tjänsten genom att utfärda kommandot sudo vim /etc/systemd/system/gitd. service. I den nya filen fyller du i den med detta innehåll
[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
Spara filen och avsluta genom att trycka 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
Om vi nu kör $ git clone git://198.168.1.100/repository (kom ihåg att ändra IP-adressen med din maskins nätverks-IP) i rotkatalogen, får du en nyskapad repository-mapp . Kom ihåg att konfigurera dina referenser genom att avkommentera e-postadressen och lösenordet i konfigurationsfilen. Kör $ git config --global --edit för att komma åt den här filen.
Det här arkivet kommer att fungera som vår centrala server för alla manifest och variabler.
Ställa in miljön
Vi behöver nu ställa in miljön från vilken vi ska konfigurera noderna. Byt först till vagrantkatalogen och klona arkivet vi just skapade med samma kommando som ovan.
Ta bort manifestkatalogen i vagrantmappen genom att köra $rm -r manifest/.
Skapa en ny produktionsmapp med $ mkdir-produktion och klona samma arkiv som vi skapade ovan med $ git clone git://198.168.1.100/repository . (glöm inte pricken i slutet)
Kopiera och klistra in innehållet i Puppetlabs produktionsmiljö i den här produktionsmappen genom att utfärda cp -pr /etc/puppetlabs/code/environments/production/* . Din produktionskatalog bör nu se ut så här
[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 måste driva dessa ändringar till rotförrådet så att vi kör
$ git add * && git commit -m "adding production default files" && git push
För att testa om git-konfigurationen fungerar kan vi ta bort innehållet i katalogen /etc/puppetlabs/code/environments/production/ genom att köra $ sudo rm -r * i den här katalogen och sedan dra filerna från huvudförvaret som root-användare, dvs $ git clone git://198.168.1.100/repository. (glöm inte pricken i slutet). Endast kataloger med innehåll dras i det här fallet så du kan missa manifest- och modulmapparna. Dessa operationer kan utföras på alla involverade maskiner, antingen mästerdocka eller klientdator. Så våra uppgifter kommer att vara att hämta ändringarna från huvudservern och tillämpa ändringarna med hjälp av manifesten.
Exekutionsmanifest
Detta är skriptet vi kommer att skriva för att hjälpa oss dra ändringar och tillämpa dem automatiskt på våra andra noder. Du måste inte bara använda produktionsmiljön, du kan lägga till så många miljöer som möjligt och sedan bestämma dockan från vilken du ska söka. I rotkatalogen production/manifests skapar vi exekveringsmanifestet som puppet_exec.pp och fyller i det med följande innehåll
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 är en resurs som har beskrivits för att exekvera marionettmanifesterna. Lägg till en lämplig sökväg för filen vi skapar och fyll i den med de kommandon som ska utfärdas när den ska köras.
Kommandona exekveras systematiskt, det vill säga vi navigerar först till produktionsmiljön, drar arkivändringarna och applicerar dem sedan på maskinen.
Vi tillhandahåller manifestkatalogen till varje nod från vilken den kan välja manifestet som riktas till den för tillämpning.
En varaktighet under vilken exekveringsfilen ska köras är också inställd. I det här fallet för varje timme, kör filen 4 gånger.
För att tillämpa detta på vår nuvarande maskin, $ cd /vagrant/production. Lägg till allt till git genom att köra $ git add * sedan $ git commit -m "lägg till cron-konfigurationerna" och slutligen $ git push. Navigera nu till $ cd /etc/puppetlabs/code/environments/production/ och $ sudo git pull
Om vi nu kontrollerar manifestmappen i den här katalogen, bör du se puppet_exec.pp skapad som vi precis hade definierat.
Om vi nu kör $ sudo puppet tillämpa manifests/ och kontrollera om filerna exec-puppet har skapats $ cat /usr/local/bin/exec-puppet
Innehållet i den här filen bör vara
cd /etc/puppetlabs/code/environments/production/ && git pull; /opt/puppetlabs/bin/puppet apply manifests/
Vid det här laget har vi sett hur vi kan dra och driva ändringar i vår huvudmaskin som bör tillämpas på alla andra noder. Om vi kör $ sudo crontab -l, markeras några viktiga varningar på exec-puppet-filen som skapats.
# 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
Konfigurera maskinerna
Låt oss säga att vår lösdrivarfil ser ut som
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 det här fallet har vi dockmaskinen där vi har gjort våra konfigurationer och sedan db-maskinen. Nu ska vi automatisera maskinen så att närhelst db-maskinen startas, har den marionett redan installerad och cron-filen redan tillgänglig för att dra manifesten och applicera dem därefter. Du måste strukturera om innehållet i db-maskinen så att det blir som följer
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
Fram till detta skede bör strukturen för din dockkatalog vara ungefär så här
Om du nu kör db-maskinen med kommandot $ vagrant up db, kommer några av resurserna att installeras och skriptet vi just definierade kan hittas i katalogen produktion/manifest. Det är dock tillrådligt att använda marionettmästaren som är begränsad till endast 10 noder för gratisversionen, annars måste du prenumerera på en plan. Puppet master erbjuder fler funktioner och distribuerar manifest till flera noder, rapporteringsloggar och mer kontroll på noderna.
Mongodb Puppet Module
Denna modul används i installationen av MongoDB, hantering av mongod-serverinstallation, konfiguration av mongod-demonen och hantering av Ops Manager-installationer förutom MongoDB-mms-demonen.
Slutsats
I nästa blogg kommer vi att visa dig hur du distribuerar en MongoDB Replica Set och Shards med Puppet.