V předchozím blogu jsme vám ukázali, jak nastavit náš stroj pomocí Puppet a poté nainstalovat a nakonfigurovat MongoDB. Protože budeme konfigurovat řadu uzlů nebo spíše strojů, potřebujeme loutkáře. V našem případě však vytvoříme repozitář git, kam vložíme naše manifesty a aplikujeme je na naše počítače.
Chcete-li vytvořit místní úložiště git, nejprve vyberte cestu, kterou chcete použít, tj. /opt/. Poté vytvořte úložiště git spuštěním repozitáře $sudo mkdir. Získejte oprávnění uživatele root ke změně obsahu tohoto adresáře vydáním příkazu $sudo chown vagrant:vagrant repository. Chcete-li tento adresář inicializovat jako úložiště git po zadání příkazu $ cd repository, spusťte $ git init --bare --shared, pokud přejdete do tohoto adresáře, měli byste nyní vidět něco jako
[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
Toto je základní struktura git repozitáře a volby --bare a --share nám umožní vkládat a stahovat soubory z adresáře.
Musíme nastavit systém, který umožní komunikaci mezi zapojenými stroji a tímto vzdáleným hlavním serverem. Systém v tomto případě bude označován jako démon. Démon bude přijímat požadavky od vzdálených hostitelů na stahování nebo odesílání souborů do tohoto úložiště. Chcete-li to provést, zadejte příkaz $git daemon --reuseaddr --base-path=/opt/ --export-all --enable=receive-pack
Dobrým postupem však bude vytvořit soubor, ze kterého to budeme moci spouštět na pozadí. Službu tedy musíme nastavit zadáním příkazu sudo vim /etc/systemd/system/gitd. servis. V novém souboru jej naplňte tímto obsahem
[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
Uložte soubor a ukončete jej stisknutím
[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
Pokud nyní v kořenovém adresáři spustíme $ git clone git://198.168.1.100/repository (nezapomeňte změnit IP adresu podle síťové IP vašeho počítače), získáte nově vytvořenou složku úložiště . Nezapomeňte nakonfigurovat své přihlašovací údaje zrušením komentáře e-mailu a hesla v konfiguračním souboru. Spusťte $ git config --global --edit pro přístup k tomuto souboru.
Toto úložiště bude fungovat jako náš centrální server pro všechny manifesty a proměnné.
Nastavení prostředí
Nyní musíme nastavit prostředí, ze kterého budeme konfigurovat uzly. Nejprve se přepněte do adresáře vagrant a naklonujte úložiště, které jsme právě vytvořili, pomocí stejného příkazu jako výše.
Odstraňte adresář manifestu ve složce vagrant spuštěním $rm -r manifest/.
Vytvořte novou produkční složku pomocí $ mkdir production a naklonujte stejné úložiště, které jsme vytvořili výše, pomocí $ git clone git://198.168.1.100/repository . (nezapomeňte na tečku na konci)
Zkopírujte a vložte obsah produkčního prostředí puppetlabs do této produkční složky zadáním cp -pr /etc/puppetlabs/code/environments/production/* . Váš produkční adresář by nyní měl vypadat takto
[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
Tyto změny musíme odeslat do kořenového úložiště, abychom spustili
$ git add * && git commit -m "adding production default files" && git push
Chceme-li otestovat, zda konfigurace git funguje, můžeme smazat obsah v adresáři /etc/puppetlabs/code/environments/production/ spuštěním $ sudo rm -r * v tomto adresáři a poté vytáhnout soubory z hlavního úložiště jako uživatel root, tj. $ git clone git://198.168.1.100/repository . (nezapomeňte na tečku na konci). V tomto případě se stahují pouze adresáře s obsahem, takže můžete přehlédnout složky manifestů a modulů. Tyto operace lze provádět na všech zařízeních, ať už jde o hlavní loutkové nebo klientské zařízení. Naším úkolem tedy bude stáhnout změny z hlavního serveru a aplikovat změny pomocí manifestů.
Manifest provedení
Toto je skript, který se chystáme napsat, aby nám pomohl stáhnout změny a automaticky je aplikovat na naše ostatní uzly. Nejen, že musíte používat produkční prostředí, můžete přidat co nejvíce prostředí a poté diktovat loutce, ze které chcete hledat. V kořenovém adresáři production/manifests vytvoříme prováděcí manifest jako puppet_exec.pp a naplníme jej následujícím obsahem
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'
}
Soubor je prostředek, který byl popsán pro spouštění loutkových manifestů. Přidejte vhodnou cestu k souboru, který vytváříme, a naplňte jej příkazy, které mají být vydány při jeho spuštění.
Příkazy jsou prováděny systematicky, to znamená, že nejprve přejdeme do produkčního prostředí, vytáhneme změny z úložiště a poté je aplikujeme na stroj.
Každému uzlu dodáváme adresář manifestů, ze kterého si může vybrat manifest, který je na něj směrován pro aplikaci.
Je také nastavena doba, po kterou má být spouštěcí soubor spuštěn. V tomto případě pro každou hodinu spusťte soubor 4krát.
Chcete-li to použít na náš aktuální stroj, $ cd /vagrant/production. Přidejte vše do git spuštěním $ git add *, poté $ git commit -m „přidejte konfigurace cronu“ a nakonec $ git push. Nyní přejděte na $ cd /etc/puppetlabs/code/environments/production/ a $ sudo git pull
Pokud nyní zkontrolujeme složku manifestů v tomto adresáři, měli byste vidět soubor puppet_exec.pp vytvořený tak, jak jsme právě definovali.
Pokud nyní spustíme $ sudo puppet aplikujte manifesty/ a zkontrolujeme, zda byly vytvořeny soubory exec-puppet $ cat /usr/local/bin/exec-puppet
Obsah tohoto souboru by měl být
cd /etc/puppetlabs/code/environments/production/ && git pull; /opt/puppetlabs/bin/puppet apply manifests/
V tuto chvíli jsme viděli, jak můžeme stáhnout a odeslat změny do našeho hlavního počítače, které by měly být aplikovány na všechny ostatní uzly. Pokud spustíme $ sudo crontab -l, některá důležitá varování se zvýrazní ve vytvořeném souboru exec-puppet.
# 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
Konfigurace počítačů
Řekněme, že náš soubor tuláků vypadá takto
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
V tomto případě máme loutkový stroj, kde jsme prováděli naše konfigurace, a poté db stroj. Nyní musíme automatizovat stroj tak, aby při každém spuštění db stroj měl již nainstalovanou loutku a soubor cron již dostupný pro stažení manifestů a jejich odpovídající použití. Budete muset restrukturalizovat obsah db stroje, aby vypadal následovně
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
Až do této fáze by struktura vašeho adresáře loutek měla vypadat nějak takto
Pokud nyní spustíte db stroj příkazem $ vagrant up db, nainstalují se některé prostředky a skript, který jsme právě definovali, lze nalézt v adresáři production/manifests. Je však vhodné použít loutkového mistra, který je omezen na pouze 10 uzlů pro bezplatnou verzi, jinak si budete muset předplatit plán. Puppet master nabízí více funkcí a distribuci manifestů do více uzlů, protokoly hlášení a větší kontrolu nad uzly.
Mongodb loutkový modul
Tento modul se používá při instalaci MongoDB, správě instalace serveru mongod, konfiguraci démona mongod a správě nastavení Ops Manager kromě démona MongoDB-mms.
Závěr
V příštím blogu vám ukážeme, jak nasadit MongoDB Replica Set a Shards pomocí Puppet.