Введение
Для управления конфигурациями серверов, их обслуживания на всём жизненном цикле имеет актуальное значение связка работы трёх компонентов: foreman, puppet, ansible.
- Foreman - инструмент, предназначенный для помощи системным администраторам в управлении серверами, обеспечивающий простой способ взаимодействия с системами управления конфигурациями (Ansible, Puppet и др.) для автоматизации задач администрирования и развертывания приложений. Foreman поддерживает WEB-интерфейс, API и CLI, которые можно использовать для предоставления, настройки и мониторинга серверов. Подходит для инфраструктур любых размеров.
- Puppet - инструмент управления конфигурацией, который помогает системным администраторам автоматизировать предоставление, настройку и управление серверной инфраструктурой.
- Ansible - система управления конфигурациями, использующаяся для автоматизации настройки и развертывания программного обеспечения. Позволяет автоматизировать сложные задачи, например, непрерывное развертывание или непрерывное обновление без простоев.
Установка
Puppet
Предварительная настройка
Коммуникация между Puppet Server и Puppet Agent осуществляется по имени хоста. Для правильной работы нужно либо настроить DNS-сервер, либо указать адреса хостов в файлах /etc/hosts на всех хостах.
Укажем для каждой машины hostname. Например, для Puppet Server команда будет иметь следующий вид:
sudo hostnamectl set-hostname master.astra.lan
Осуществим настройку каждой машины через /etс/hosts, добавив в конец файла FQDN строку с указанием IP-адреса Puppet Server (puppet_ip) и его имени хоста (puppet).
sudo echo -e 'puppet_ip\tmaster.astra.lan' >>
/etc/hosts
Произведем настройку локалей.
Проверим наличие локали en_US.utf8 выполнив команду
locale -a
При ее отсутствии выполним следующие действия: sudo apt update
sudo apt
install debconf
dpkg-reconfigure locales
Выбираем из списка локаль en_US.UTF-8, после установки выполняем перезагрузку.
2.1.2 Установка Puppet Server
Для установки выполним следующие команды:
sudo apt update
sudo apt
install puppetserver
Для коммуникации Puppet Server использует 8140 порт. Откроем его:
sudo ufw allow 8140
Запустим Puppet Server:
sudo systemctl start puppetserver
Проверим статус сервиса:
sudo systemctl status puppetserver
● puppetserver.service - puppetserver Service Loaded: loaded (/lib/systemd/system/puppetserver.service; disabled; vendor preset: enabled) Active: active (running) since Thu 2019-09-10 12:35:29 MSK; 49s ago Process: 1968 ExecStart=/opt/puppetlabs/server/apps/puppetserver/bin/puppetserver start (code=exited, status=0/SUCCESS) Main PID: 1975 (java) Tasks: 48 (limit: 4915) CGroup: /system.slice/puppetserver.service └─1975 /usr/bin/java -Xms2g -Xmx2g -Djruby.logger.class=com.puppetlabs.jruby_utils.jruby.Slf4jLogger -Djava.security.egd=file:/dev/urandom -XX:OnOutOfMemoryError=kill -9 %p -cp /
сен 10 12:35:07 puppet systemd[1]: Starting puppetserver Service...
сен 10 12:35:29 puppet systemd[1]: Started puppetserver Service.
При необходимости добавим его в автозагрузку:
sudo systemctl enable puppetserver
2.1.3 Установка Puppet Agent на клиентском компьютере
При установке сервера puppet клиент на компьютере-сервере устанавливается на этом компьютере автоматически.
Для установки агента на клиентском компьютере выполним на компьютере-агенте следующие команды:
sudo apt update
sudo apt-get
install puppet-agent
Запустим Puppet Agent и добавим в автозагрузку:
sudo systemctl start puppet
Отредактируем файл /etc/puppetlabs/puppet/puppet.conf, добавив/заменив в секции main параметры:
server = master.astra.lan
show_diff = true
sudo
/opt/puppetlabs/bin/puppet agent --test
Info: Downloaded certificate for ca from puppet
Info: Downloaded certificate revocation list for ca from puppet
Info: Creating a new RSA SSL key for agent1.astra.lan
Info: csr_attributes file loading from /etc/puppetlabs/puppet/csr_attributes.yaml
Info: Creating a new SSL certificate request for agent1.astra.lan
Info: Certificate Request fingerprint (SHA256): F7:D5:E5:AB:AA:86:7F:EF:19:3D:D9:B9:E3:E9:63:DC:AE:31:17:57:67:3D:2B:D7:A5:1C:71:E3:46:E0:A7:1E
Info: Certificate for agent1.astra.lan has not been signed yet
Couldn't fetch certificate from CA server; you might still need to sign this agent's certificate (agent1.astra.lan).
Exiting now because the waitforcert setting is set to 0.
2.1.4 Подписание сертификатов
При первом запуске Puppet Agent отправляет на Puppet Server запрос на подпись сертификата.
Для просмотра списка запросов на подпись сертификата выполним следующую команду:
sudo /opt/puppetlabs/bin/puppetserver ca list
Requested Certificates:
agent1.astra.lan (SHA256) F7:D5:E5:AB:AA:86:7F:EF:19:3D:D9:B9:E3:E9:63:DC:AE:31:17:57:67:3D:2B:D7:A5:1C:71:E3:46:E0:A7:1E
Подпишем сертификат:
sudo /opt/puppetlabs/bin/puppetserver ca sign
--certname agent1.astra.lan
Successfully signed certificate request for agent1.astra.lan
Проверим работу Puppet Agent после подписания сертификата:
sudo /opt/puppetlabs/bin/puppet agent --test
Info: csr_attributes file loading from /etc/puppetlabs/puppet/csr_attributes.yaml
Info: Creating a new SSL certificate request for agent1.astra.lan
Info: Certificate Request fingerprint (SHA256): F7:D5:E5:AB:AA:86:7F:EF:19:3D:D9:B9:E3:E9:63:DC:AE:31:17:57:67:3D:2B:D7:A5:1C:71:E3:46:E0:A7:1E
Info: Downloaded certificate for agent1.astra.lan from puppet
Info: Using configured environment 'production'
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Retrieving locales
Info: Caching catalog for agent1.astra.lan
Info: Applying configuration version '1568370748'
Info: Creating state file /opt/puppetlabs/puppet/cache/state/state.yaml
Notice: Applied catalog in 0.02 seconds
2.2 Ansible
Для установки выполним следующие команды:
sudo apt update
sudo apt
install ansible
Отредактируем файл /etc/ansible/hosts, добавив секцию agents
[agents]
agent1.astra.lan ansible_ssh_host=agent1_server_ip
Ansible использует подключение ssh по ключу, поэтому сгенерируем его:
ssh-keygen -t rsa -b 4096
После создания ключа передадим его на нужные узлы:
ssh-copy-id user@agent1_server_ip
Проверим работу Ansible, выполнив пинг на группу серверов agents:
ansible -m ping agents
agent1.astra.lan | SUCCESS => {
"changed": false,
"ping": "pong"
}
2.3 Foreman
Для установки выполним следующие команды:
sudo apt update
sudo apt
install foreman-installer
Запустим установщик:
sudo foreman-installer
Preparing installation Done
*
Foreman is running at https://master.astra.lan
Initial credentials are admin / NRLJth9ufmAkTsF5*
Foreman Proxy is running at https://master.astra.lan:8443*
Puppetmaster is running at port 8140The full log is at /var/log/foreman-installer/foreman.log
Проверим работоспособность foreman-proxy:
sudo curl -k -X GET -H Accept:application/json
https://master.astra.lan:8443/features --tlsv1
["httpboot","logs","puppet","puppetca","tftp"]
3. Настройка
3.1 Foreman + Puppet
Откроем в браузере ссылку https://master.astra.lan
В качестве логина и пароля используем initial credentials, которые получили после выполнения установщика.
Перейдем в Infrastructure -> HTTP Proxies и добавим наш прокси:
Нажмем на кнопку Submit.
Теперь перейдем в Hosts -> All Hosts, где должен появится список доступных узлов:
Если узлы отсутствуют, то достаточно на нужных узлах выполнить команду sudo
/opt/puppetlabs/bin/puppet agent --test
и обновить данную страницу.
3.2 Foreman + Ansible
Установим необходимые плагины:
для работы с Ansible: foreman-plugin-ansible, foreman-proxy-plugin-ansible;
для запуска Ansible playbooks как запланированные задачи: foreman-plugin-remote-execution, foreman-proxy-plugin-remote-execution-ssh
sudo foreman-installer
--enable-foreman-plugin-ansible \
--enable-foreman-proxy-plugin-ansible \
--enable-foreman-plugin-remote-execution \
--enable-foreman-proxy-plugin-remote-execution-ssh
Проверим работу связки. Создадим файл cat_hosts.yml со следующим содержимым:
---
- hosts: all
become: true
tasks:
- name: cat /etc/hosts
command: cat /etc/hosts
register: cat_all_hosts
...
Выполним команду:ansible-playbook
cat_file.yml -vv
В результате получим следующий вывод:
Using /etc/ansible/ansible.cfg as config file
PLAYBOOK: cat_file.yml *********************************************************
1 plays in cat_file.yml
PLAY [all] *********************************************************************
TASK [setup] *******************************************************************
ok: [agent1.astra.lan]
TASK [cat /etc/hosts] **********************************************************
task path: /home/user/cat_file.yml:6
changed: [agent1.astra.lan] => {"changed": true, "cmd": ["cat", "/etc/hosts"], "delta": "0:00:00.002691", "end": "2019-09-16 12:25:29.241611", "rc": 0, "start": "2019-09-16 12:25:29.238920", "stderr": "", "stdout": "127.0.0.1\tlocalhost\n127.0.1.1\tastra-orel\n\n172.16.119.182 master.astra.lan\n172.16.119.183 agent1.astra.lan\n\n# The following lines are desirable for IPv6 capable hosts\n::1 localhost ip6-localhost ip6-loopback\nff02::1 ip6-allnodes\nff02::2 ip6-allrouters", "stdout_lines": ["127.0.0.1\tlocalhost", "127.0.1.1\tastra-orel", "", "172.16.119.182 master.astra.lan", "172.16.119.183 agent1.astra.lan", "", "# The following lines are desirable for IPv6 capable hosts", "::1 localhost ip6-localhost ip6-loopback", "ff02::1 ip6-allnodes", "ff02::2 ip6-allrouters"], "warnings": []}
PLAY RECAP *********************************************************************
agent1.astra.lan : ok=2 changed=1 unreachable=0 failed=0
Возможные проблемы
При запуске сервиса foreman появляется ошибка:
/usr/share/foreman/vendor/ruby/2.3.0/gems/pg-1.1.4/lib/pg.rb:56:in `initialize': could not connect to server: No such file or directory (PG::ConnectionBad)
Решение
Отредактировать файл /etc/postgresql/9.6/main/postgresql.conf, изменив значение параметра listen_addresses на '*'.
После этого выполнить команды:
sudo systemctl restart postgresql
sudo systemctl restart foreman