Введение
Для управления конфигурациями серверов, их обслуживания на всём жизненном цикле имеет актуальное значение связка работы трёх компонентов: foreman, puppet, ansible.
- Foreman - инструмент, предназначенный для помощи системным администраторам в управлении серверами, обеспечивающий простой способ взаимодействия с системами управления конфигурациями (Ansible, Puppet и др.) для автоматизации задач администрирования и развертывания приложений. Foreman поддерживает WEB-интерфейс, API и CLI, которые можно использовать для предоставления, настройки и мониторинга серверов. Подходит для инфраструктур любых размеров.
- Puppet - инструмент управления конфигурацией, который помогает системным администраторам автоматизировать предоставление, настройку и управление серверной инфраструктурой.
- Ansible - система управления конфигурациями, использующаяся для автоматизации настройки и развертывания программного обеспечения. Позволяет автоматизировать сложные задачи, например, непрерывное развертывание или непрерывное обновление без простоев.
Описание стенда
Сервер: 10.0.2.120 master.astra.lan
Клиент: 10.2.121 agent1.astra.lan
На стенде отсутствует настроенный DNS-сервер, поэтому для разрешения IP-адресов используются файлы /etc/host на сервере и клиенте.
Установка
Puppet
Предварительная настройка
Коммуникация между Puppet Server и Puppet Agent осуществляется по имени хоста. Для правильной работы нужно либо настроить DNS-сервер, либо указать адреса хостов в файлах /etc/hosts на всех хостах.
Укажем для каждой машины hostname.
Для сервера команда будет иметь следующий вид:
Command |
---|
sudo hostnamectl set-hostname master.astra.lan |
Осуществим настройку каждой машины через /etс/hosts, добавив в конец файла FQDN строку с указанием IP-адреса Puppet Server (10.0.2.120) и его имени хоста (master.astra.lan).
Для этого на сервере и на клиенте выполним команду:
Command |
---|
echo -e '10.0.2.120\tmaster.astra.lan' | sudo tee -a /etc/hosts |
Настройка локалей на сервере.
Проверим наличие локали en_US.utf8 выполнив команду:
Command |
---|
locale -a | grep en_US.utf8locale -a | grep en_US.utf8 |
Если локали нет, то выполним для её добавления следующие команды
Информация |
---|
echo "en_US.UTF-8 UTF-8" | sudo tee -a /etc/locale.gen |
Или выберем нужные локали, включая en_US.UTF-8 UTF-8 , в интерактивном режиме:
Command |
---|
sudo apt update sudo dpkg-reconfigure locales |
2.1.2 Установка Puppet Server
Для установки выполнить на сервере следующие команды:
Command |
---|
sudo apt update |
Для коммуникации Puppet Server использует 8140 порт. Если включен межсетевой экран, то нужно разрешить коммуникации через этот порт. Для сетевого экрана ufw:
Command |
---|
sudo ufw allow 8140 |
Далее разрешим автоматический запуск Puppet Server и запустим его:
Command |
---|
sudo systemctl enable puppetserver |
Проверим статус сервиса:
Command |
---|
sudo systemctl status puppetserver |
2.1.3 Установка Puppet Agent на клиентском компьютере
Для установки агента на клиентском компьютере выполним на компьютере-агенте следующие команды:
Command |
---|
sudo apt update |
Отредактируем файл /etc/puppetlabs/puppet/puppet.conf, добавив/заменив в секции main параметры:
Информация |
---|
server = master.astra.lan show_diff = true |
Запустим службу Puppet Agent и добавим её в автозагрузку:
Информация |
---|
sudo systemctl enable puppet sudo systemctl start puppet |
2.1.4 Подписание сертификатов
При первом запуске служба Puppet Agent отправляет на Puppet Server запрос на подпись сертификата.
Для просмотра списка запросов на подпись сертификата выполним на сервере следующую команду:
Command |
---|
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 |
В примере выше сервер сообщает, что у него имеется один запрос на подпись сертификата от клиента agent1.astra.lan.
Подпишем сертификат:
Command |
---|
sudo /opt/puppetlabs/bin/puppetserver ca sign --certname agent1.astra.lan Successfully signed certificate request for agent1.astra.lan |
Для проверки работы агента можно на клиентской машине после подписания сертификата выполнить jcnfyjdbnm cthdbc b следующие команды:
Command |
---|
# Останавливаем службу Info: csr_attributes file loading from /etc/puppetlabs/puppet/csr_attributes.yaml # Посторно запускаем службу |
2.2 Ansible
Для установки Ansible выполним следующие команды:
Command |
---|
sudo apt update |
Отредактируем файл /etc/ansible/hosts, добавив секцию agents, в котрой укажем имя (agent1.astra.lan) и IP-адрес (10.0.2.121) клиентской машины:
Command |
---|
echo -e "[agents]\n agent1.astra.lan ansible_ssh_host=10.0.2.121" | sudo tee -a /etc/ansible/hosts |
Ansible использует подключение ssh по ключу, поэтому сгенерируем его:
Command |
---|
ssh-keygen -t rsa -b 4096 |
После создания ключа передадим его на нужные узлы:
Command |
---|
ssh-copy-id user@10.0.2.121 |
Проверим работу Ansible, выполнив пинг на группу серверов agents:
Command |
---|
ansible -m ping agents agent1.astra.lan | SUCCESS => { "changed": false, "ping": "pong" } |
2.3 Foreman
Для установки пакета Foreman выполним следующие команды:
Command |
---|
sudo apt update |
Запустим установщик:
Command |
---|
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 8140 The full log is at /var/log/foreman-installer/foreman.log |
Проверим работоспособность foreman-proxy:
Command |
---|
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
Command |
---|
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 ... |
Выполним команду:
Command |
---|
ansible-playbook cat_file.yml -vv |
В результате получим следующий вывод:
Информация |
---|
PLAY [all] ********************************************************************* TASK [setup] ******************************************************************* TASK [cat /etc/hosts] ********************************************************** PLAY RECAP ********************************************************************* |
Возможные проблемы
При запуске сервиса 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 на '*'.
После этого выполнить команду:
Command |
---|
sudo systemctl restart postgresql foreman |