Введение
Для управления конфигурациями серверов, их обслуживания на всём жизненном цикле имеет актуальное значение связка работы трёх компонентов: foreman, puppet, ansible.
- Foreman - инструмент, предназначенный для помощи системным администраторам в управлении серверами, обеспечивающий простой способ взаимодействия с системами управления конфигурациями (Ansible, Puppet и др.) для автоматизации задач администрирования и развертывания приложений. Foreman поддерживает WEB-интерфейс, API и CLI, которые можно использовать для предоставления, настройки и мониторинга серверов. Подходит для инфраструктур любых размеров.
- Puppet - инструмент управления конфигурацией, который помогает системным администраторам автоматизировать предоставление, настройку и управление серверной инфраструктурой.
- Ansible - система управления конфигурациями, использующаяся для автоматизации настройки и развертывания программного обеспечения. Позволяет автоматизировать сложные задачи, например, непрерывное развертывание или непрерывное обновление без простоев.
Описание стенда
Сервер: 10.0.2.120 master.astra.lan
Клиент: 10.0.2.121 agent1.astra.lan
На стенде отсутствует настроенный DNS-сервер, поэтому для разрешения IP-адресов используются файлы /etc/hosts на сервере и на клиенте.
Информация |
---|
На сервере должно быть установлено не менее 3ГБ оперативной памяти. |
Установка
Puppet
Предварительная настройкаНастройка сервера
Имя и адрес сервера
Коммуникация между Puppet Server и Puppet Agent осуществляется по имени хоста. Для правильной работы нужно либо настроить DNS-сервер, либо указать адреса хостов в файлах /etc/hosts на всех хостах.
Укажем для каждой машины hostname.
Для сервера используем имя master.astra.lan, и команда назначения имени будет иметь следующий вид:
Command |
---|
sudo hostnamectl set-hostname master.astra.lan |
Имя клиента может быть произвольным.
Осуществим настройку каждой машины через /etс/hosts, добавив в конец файла FQDN строку с указанием указание IP-адреса Puppet Server (10.0.2.120) и его имени хоста (master.astra.lan и master и pupet).
Для этого на сервере и на клиенте выполним команду:В итоге файл /etc/hosts должен выглядеть примерно так:
Блок кода |
---|
127.0.0.1 localhost
|
Command |
echo -e '10.0.2.120 \tmastermaster.astra.lan masterpuppet' | sudo tee -a /etc/hosts puppet
# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
|
Подразумевается, что серверу назначен статический адрес 10.0.2.120
Настройка локалей на сервере.
Проверим Проверить наличие локали en_US.utf8 выполнив команду:
Command |
---|
locale -a | grep en_US.utf8 |
Если локали en_US.utf8 нет, то выполним для добавить её добавления , выполнив следующие команды
Command |
---|
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 |
Установка 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 на клиентском компьютере
Установка Puppet Agent на клиентском компьютере
Настроить статический IP-адрес сервера (далее - 10.0.2.121)
Настроить разрешение имён сервера и клиента с помощью файла /etc/hosts. Файл /etc/hosts на клиентском компьютере должен иметь примерно такой вид:
Блок кода |
---|
127.0.0.1 localhost
10.0.2.121 agent1.astra.lan agent1
10.0.2.120 puppet
# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
|
Для установки агента выполнить на компьютереДля установки агента на клиентском компьютере выполним на компьютере-агенте следующие команды:
Command |
---|
sudo apt update |
Отредактируем Отредактировать файл /etc/puppetlabs/puppet/puppet.conf, добавив/заменив в секции main параметры:
Информацияcode |
---|
server = master.astra.lan show_diff = true |
Запустим Добавить службу Puppet Agent в автозагрузку и добавим запустить её в автозагрузку:
Command |
---|
sudo systemctl enable puppet sudo systemctl start puppet |
Подписание сертификатов клиента
При первом запуске служба Puppet Agent отправляет отправит на Puppet Server запрос на подпись сертификата.
Для просмотра списка запросов на подпись сертификата выполним выполнить на сервере следующую команду:
Command | ||
---|---|---|
| ||
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 | ||
---|---|---|
| ||
Successfully signed certificate request for agent1.astra.lan |
Для проверки правильности работы агента можно на клиентской машине после подписания сертификата выполнить следующие команды:
Остановить службу
Command
sudo systemctl stop puppet
# Тестируем службу
- Выполнить тестирование работы, в процессе котрого служба получит сертификат:
Command Title 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
Повторно
запустить службу:
Command sudo systemctl start puppet
Ansible
Для установки Ansible выполним Установить Ansible, выполнив на сервере следующие команды:
Command |
---|
sudo apt update |
Отредактируем Отредактировать файл /etc/ansible/hosts, добавив в файл секцию [agents, в котрой укажем имя (] (т.е. добавив группу серверов, с названием этой группы 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" } |
Foreman
Для установки пакета Foreman выполним выполнить следующие команды:
Command |
---|
sudo apt update |
Запустим Запустить установщик:
Предупреждение |
---|
После установки в строке "Initial credentials are admin / ...." будет указан логин admin и указан автоматически созданный пароль для входа в WEB-интерфейс, его необходимо запомнить чтобы использовать для входа в WEB-интерфейс. |
Command | ||
---|---|---|
| ||
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 |
Предупреждение |
---|
В строке "Initial credentials are admin / ...." указан логин admin и указан автоматически созданный пароль для входа в WEB-интерфейс, его желательно запомнитьнеобходимо запомнить чтобы использовать для входа в WEB-интерфейс. |
Проверим Проверить работоспособность foreman-proxy:
Command | ||
---|---|---|
| ||
["httpboot","logs","puppet","puppetca","tftp"] |
Настройка
3.1Foreman + Puppet
Откроем Открыть в браузере ссылку ссылку https://master.astra.lan (подтвердить согласие на подключение)
В качестве логина и пароля используем использовать имя admin и автоматически созданный пароль, которые получили полученный после выполнения установщика.
Теперь перейдемПерейти в "Узлы" - "All hosts" ("Hosts" -> "All Hosts" в английском варианте), где должен появится список доступных узлов:
Если узлы отсутствуют, то подождать, пока информация обновится, или на нужных узлах (на клиенте) выполнить команду:
Command |
---|
sudo systemctl restart puppet |
После чего обновить страницу WEB-интерфейса.
Необязательные шаги для завершения настройкиУбедиться, что в "Инфраструктура" - "Капсулы" ( в английском варианте "Infrastructure" -> "Smart Proxies") имеется отображение созданного по умолчанию proxy. Если proxy не создан, то:
- Перейти в "Администратор" - "Местоположения" ("Administer" - "Locations");
- Выбрать Default location;
- Нажать кнопку "Устранить несоответствия" ("Fix mismatches");
- Нажать кнопку "Применить" ("Submit");
- Аналогично "Администратор" - "Организации" ("Administer" - "Organizations");
- Выбрать Default organization;
- Нажать кнопку "Устранить несоответствия" ("Fix mismatches");
- Нажать кнопку "Применить" ("Submit");
После выполнения этих шагов в "Инфраструктура" - "Капсулы" ( в английском варианте "Infrastructure" -> "Smart Proxies") появится отображение созданного по умолчанию proxy.
3.2Foreman + 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 со следующим содержимым:
Информацияcode |
---|
- - - hosts:all all become:true tasks: - name: cat true tasks: - name: cat /etc/hosts command: cat /etc/hosts register: cat_all_hosts ... |
Выполним Выполнить команду:
Command | ||
---|---|---|
|
В результате получим следующий вывод:
Информация |
---|
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 |