В предишния блог ви показахме как да настроите нашата машина с Puppet и след това да инсталирате и конфигурирате MongoDB. Тъй като ще конфигурираме редица възли или по-скоро машини, се нуждаем от кукловод. В нашия случай обаче ще създадем git хранилище, където ще избутаме нашите манифести и ще ги приложим към нашите машини.
За да създадете локално git хранилище, първо изберете пътя, който искате да използвате, т.е. /opt/. След това създайте git хранилище, като стартирате $sudo mkdir хранилище. Получете разрешение на root потребител за промяна на съдържанието на тази директория, като издадете командата $sudo chown vagrant:vagrant repository. За да инициализирате тази директория като git хранилище след издаване на командата $ cd repository, изпълнете $ git init --bare --shared, ако отидете до тази директория, сега трябва да видите нещо като
[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
Това е основната структура на git хранилище и опциите --bare и --share ще ни позволят да натискаме и изтегляме файлове от директорията.
Трябва да настроим система, която ще позволи комуникация между участващите машини и този отдалечен главен сървър. Системата в този случай ще се нарича демон. Демонът ще приема заявки от отдалечени хостове за изтегляне или пускане на файлове в това хранилище. За да направите това, издайте командата $git daemon --reuseaddr --base-path=/opt/ --export-all --enable=receive-pack
Въпреки това добрата практика ще бъде да създадем файл, от който можем да стартираме това във фонов режим. Следователно трябва да настроим услугата, като издадем командата sudo vim /etc/systemd/system/gitd. обслужване. В новия файл го попълнете с това съдържание
[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
Запазете файла и излезте, като натиснете
[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
Сега, ако стартираме $ git clone git://198.168.1.100/repository (не забравяйте да промените IP адреса с мрежовия IP на вашата машина) в основната директория, ще получите новосъздадена папка на хранилището . Не забравяйте да конфигурирате вашите идентификационни данни, като декомментирате имейла и паролата в конфигурационния файл. Изпълнете $ git config --global --edit за достъп до този файл.
Това хранилище ще действа като наш централен сървър за всички манифести и променливи.
Настройка на средата
Сега трябва да настроим средата, от която ще конфигурираме възлите. Първо, превключете към директорията vagrant и клонирайте хранилището, което току-що създадохме, със същата команда, както по-горе.
Премахнете директорията на манифеста в папката vagrant, като изпълните $rm -r manifest/.
Направете нова производствена папка с $ mkdir production и клонирайте същото хранилище, което създадохме по-горе, с $ git clone git://198.168.1.100/repository . (не забравяйте точката в края)
Копирайте и поставете съдържанието на производствената среда puppetlabs в тази производствена папка, като издадете cp -pr /etc/puppetlabs/code/environments/production/*. Вашата производствена директория вече трябва да изглежда така
[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
Трябва да изпратим тези промени в основното хранилище, за да стартираме
$ git add * && git commit -m "adding production default files" && git push
За да тестваме дали конфигурацията на git работи, можем да изтрием съдържанието в директорията /etc/puppetlabs/code/environments/production/, като изпълним $ sudo rm -r * в тази директория и след това издърпаме файловете от главното хранилище като root потребител, т.е. $ git clone git://198.168.1.100/repository . (не забравяйте точката в края). В този случай се изтеглят само директории със съдържание, така че може да пропуснете папките с манифести и модули. Тези операции могат да се извършват на всички участващи машини или главна кукла или клиентска машина. Така че нашите задачи ще бъдат изтегляне на промените от главния сървър и прилагане на промените с помощта на манифестите.
Манифест за изпълнение
Това е скриптът, който ще напишем, за да ни помогне да изтегляме промените и да ги прилагаме автоматично към другите ни възли. Не само трябва да използвате производствената среда, можете да добавите възможно най-много среди, след което да диктувате марионетка от коя да търсите. В основната директория production/manifests ще създадем манифеста за изпълнение като puppet_exec.pp и ще го попълним със следното съдържание
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'
}
Файлът е ресурс, който е описан за изпълнение на манифестите на марионетките. Добавете подходящ път за файла, който създаваме, и го попълнете с командите, които трябва да бъдат издадени, когато ще бъде изпълнен.
Командите се изпълняват систематично, тоест първо се придвижваме до производствената среда, изтегляме промените в хранилището и след това ги прилагаме към машината.
Ние доставяме директорията на манифестите на всеки възел, от който той може да избере манифеста, насочен към него за приложение.
Задава се и продължителност, през която трябва да се изпълнява изпълнителният файл. В този случай за всеки час изпълнявайте файла 4 пъти.
За да приложите това към нашата текуща машина, $ cd /vagrant/production. Добавете всичко към git, като изпълните $ git add *, след това $ git commit -m „добавете конфигурациите на cron“ и накрая $ git push. Сега отидете до $ cd /etc/puppetlabs/code/environments/production/ и $ sudo git pull
Сега, ако проверим папката с манифести в тази директория, трябва да видите puppet_exec.pp, създаден, както току-що дефинирахме.
Сега, ако стартираме $ sudo puppet apply manifests/ и проверете дали файловете exec-puppet са създадени $ cat /usr/local/bin/exec-puppet
Съдържанието на този файл трябва да бъде
cd /etc/puppetlabs/code/environments/production/ && git pull; /opt/puppetlabs/bin/puppet apply manifests/
На този етап видяхме как можем да изтегляме и натискаме промени в нашата главна машина, които трябва да бъдат приложени към всички останали възли. Ако изпълним $ sudo crontab -l, някои важни предупреждения се подчертават в създадения файл 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
Конфигуриране на машините
Да кажем, че нашият скитнически файл изглежда така
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
В този случай имаме куклената машина, където сме правили нашите конфигурации и след това db машината. Сега трябва да автоматизираме машината така, че когато се стартира db машината, тя вече има инсталиран марионетка и cron файлът вече е наличен, за да изтеглите манифестите и да ги приложите съответно. Ще трябва да преструктурирате съдържанието на db машината, за да бъде както следва
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
До този етап структурата на вашата марионетна директория трябва да бъде нещо подобно
Ако сега стартирате db машината с команда $ vagrant up db, някои от ресурсите ще бъдат инсталирани и скриптът, който току-що дефинирахме, може да бъде намерен в директорията production/manifests. Въпреки това е препоръчително да използвате кукловода, който е ограничен само до 10 възела за безплатната версия, в противен случай ще трябва да се абонирате за план. Puppet master предлага повече функции и разпространение на манифести към множество възли, отчетни регистрационни файлове и повече контрол върху възлите.
Куклен модул Mongodb
Този модул се използва при инсталирането на MongoDB, управлението на инсталацията на mongod сървъра, конфигурирането на демона mongod и управлението на настройката на Ops Manager освен демона MongoDB-mms.
Заключение
В следващия блог ще ви покажем как да разположите MongoDB Replica Set и Shards с помощта на Puppet.