Содержание

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents


Info

Данная статья применима к:

  • ОС ОН Орёл 2.12 (начиная с версии 2.12.17)


Введение

Для управления конфигурациями серверов, их обслуживания на всём жизненном цикле имеет актуальное значение связка работы трёх компонентов: 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 на сервере и на клиенте.

Info
На серевере сервере должно быть установлено не менее 2ГБ оперативной памяти.


Установка

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).
Для этого на сервере и на клиенте выполним команду:

Command

echo -e '10.0.2.120\tmaster.astra.lan master' | sudo tee -a /etc/hosts

Настройка локалей на сервере.

Проверим наличие локали en_US.utf8 выполнив команду:

Command
locale -a | grep en_US.utf8

Если локали нет, то выполним для её добавления следующие команды

Command

echo "en_US.UTF-8 UTF-8" | sudo tee -a /etc/locale.gen
sudo 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
sudo apt install puppetserver

Для коммуникации Puppet Server использует 8140 порт. Если включен межсетевой экран, то нужно разрешить коммуникации через этот порт. Для сетевого экрана ufw:

Command
sudo ufw allow 8140

Далее разрешим автоматический запуск  Puppet Server и запустим его:

Command

sudo systemctl enable puppetserver
sudo systemctl start puppetserver

Проверим статус сервиса:

Command
sudo systemctl status puppetserver

2.1.3 Установка Puppet Agent на клиентском компьютере

Для установки агента на клиентском компьютере выполним на компьютере-агенте следующие команды:

Command

sudo apt update
sudo apt-get install puppet-agent

Отредактируем файл /etc/puppetlabs/puppet/puppet.conf, добавив/заменив в секции main параметры:

Info
server = master.astra.lan
show_diff = true

Запустим службу Puppet Agent и добавим её в автозагрузку:

Command
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

Для проверки работы агента можно на клиентской машине после подписания сертификата выполнить следующие команды:

Command

# Останавливаем службу
sudo systemctl stop puppet

# Тестируем службу
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

# Повторно запускаем службу
sudo systemctl start puppet


2.2 Ansible

Для установки Ansible выполним следующие команды:

Command

sudo apt update
sudo apt install ansible

Отредактируем файл /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
sudo apt install foreman-installer

Запустим установщик:

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


Warning
В строке "Initial credentials are admin / ...." указан логин admin и указан автоматически созданный пароль для входа в WEB-интерфейс, его желательно запомнить.


Проверим работоспособность 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

В качестве логина и пароля используем имя admin и автоматически созданный пароль, которые получили после выполнения установщика.


Теперь перейдем в "Узлы" - "All hosts" ("Hosts" -> "All Hosts" в английском варианте), где должен появится список доступных узлов:

Если узлы отсутствуют, то подождать, пока информация обновится, или на нужных узлах выполнить команду:

Command
sudo systemctl restart puppet

После чего обновить страницу WEB-интерфейса.

Необязательные шаги для завершения настройки
  • Перейти в "Администратор" - "Местоположения" ("Administer" - "Locations");
    • Выбрать Default location;
    • Нажать кнопку "Устранить несоответствия" ("Fix mismatches");
    • Нажать кнопку "Применить" ("Submit");
  • Аналогично "Администратор" - "Организации" ("Administer" - "Organizations");
    • Выбрать Default organization;
    • Нажать кнопку "Устранить несоответствия" ("Fix mismatches");
  • Нажать кнопку "Применить" ("Submit");

После выполнения этих шагов в  "Инфраструктура" - "Капсулы" ( в английском варианте "Infrastructure" -> "Smart Proxies") появится отображение созданного по умолчанию proxy.

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 со следующим содержимым:

Info
-
    - hosts: all
      become: true
      tasks:
      - name: cat /etc/hosts
        command: cat /etc/hosts
        register: cat_all_hosts
...

Выполним команду:

Command

ansible-playbook cat_hosts.yml -vv

В результате получим следующий вывод:

Info

PLAY [all] *********************************************************************


TASK [setup] *******************************************************************
ok: [agent1.astra.lan]


TASK [cat /etc/hosts] **********************************************************
changed: [agent1.astra.lan]


PLAY RECAP *********************************************************************
agent1.astra.lan : ok=2 changed=1 unreachable=0 failed=0


Возможные проблемы

При запуске сервиса foreman появляется ошибка:

Info
/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