Дерево страниц

Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.

Оглавление


Информация

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

  • ОС ОН Орёл 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 на сервере и на клиенте.

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


Установка Puppet

Настройка сервера

Имя и адрес сервера

Коммуникация между Puppet Server и Puppet Agent осуществляется по имени хоста. Для правильной работы нужно либо настроить DNS-сервер, либо указать адреса хостов в файлах /etc/hosts на всех хостах.
Для сервера используем имя master.astra.lan, и команда назначения имени будет иметь следующий вид (коменда выполняется на сервере):

Command

sudo hostnamectl set-hostname master.astra.lan

Имя клиента может быть произвольным, для примера далее используется agent1.astra.lan.

Осуществить настройку каждой машины через файл /etс/hosts, джля чего внести в файлы указание IP-адреса Puppet Server (10.0.2.120) и его имени хоста (master.astra.lan и master и pupet). В итоге файлы /etc/hosts на сервере и на клиенте должны выглядеть примерно так:

Блок кода
127.0.0.1 localhost
10.0.2.120 master.astra.lan master puppet
10.0.2.121 agent1.astra.lan agent1
# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Подразумевается, что серверу назначен статический IP-адрес 10.0.2.120, а клиенту - 10.0.2.121.

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

Проверить наличие локали 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
sudo locale-gen

Или можно выбрать нужные локали, включая локаль en_US.UTF-8 UTF-8 , в интерактивном режиме, выполнив следующие команды:

Command
sudo apt update
sudo dpkg-reconfigure locales

Установка Puppet Server

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

Command

sudo apt update
sudo apt install puppetserver python3-psutil python3-requests

Для коммуникации 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

Установка 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
sudo apt install puppet-agent ssh

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

Блок кода
server = master.astra.lan
show_diff = true

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

Command
sudo systemctl enable puppet
sudo systemctl start puppet

Настройка доступа по ssh

На клиентской машине задать пароль root и разрешить root-доступ по ssh (команды выполняются на клиентской машине):

Command

sudo passwd root
sudo sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
sudo systemctl restart sshd


Скопировать ключ для работы с ansible для каждого клиента с сервера (команда выполняется на сервере):

Command
sudo ssh-copy-id -i ~foreman-proxy/.ssh/id_rsa_foreman_proxy.pub root@agent1.astra.lan


Подписание сертификатов клиента

При первом запуске служба Puppet Agent отправит на Puppet Server запрос на подпись сертификата.

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

Command
Titlesudo /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
Titlesudo /opt/puppetlabs/bin/puppetserver ca sign --certname agent1.astra.lan
Successfully signed certificate request for agent1.astra.lan

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

  1. Остановить службу

    Command

    sudo systemctl stop puppet


  2. Выполнить тестирование работы службы, в процессе которого служба запросит и получит сертификат:

    Command
    Titlesudo /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



  3. Повторно запустить службу:

    Command
    sudo systemctl start puppet


Установка пакетов Ansible и Foreman

Установить пакеты Ansible и Foreman, выполнив на сервере следующие действия:

Загрузить архив с исправленными версиями пакетов Ansible и Foreman по ссылке: https://nas01.astralinux.ru:5001/sharing/VtRvTRsrn

Распаковать полученный архив:

Command
tar xf ansible-and-foreman.tar

Установить пакеты:

Command
sudo apt install ./*.deb

Настройка /etc/ansible/hosts

Отредактировать файл /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

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

Предупреждение

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

Command
sudo foreman-rake permissions:reset username=admin password=<новый_пароль>



Command
Titlesudo 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


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


Проверить работоспособность foreman-proxy:

Command
Titlesudo curl -k -X GET -H Accept:application/json https://master.astra.lan:8443/features --tlsv1

["httpboot","logs","puppet","puppetca","tftp"]

Настройка

Foreman + 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.

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


Проверить работу связки можно запустив Ansible playbook. Запустить Ansible playbook можно несколькими способами:

  1. Через список узлов (хостов):
    1. открыть страницу "Узлы" ("Узлы" -> "All Hosts");
    2. выбрать необходимые узлы;
    3. нажать "Действия" -> "Scheduled Remote Job";
  2. Через страницу узла:
    1. открыть страницу "Узлы" ("Узлы" -> "All Hosts");
    2. перейти на страницу нужного узла и нажать "Scheduled Remote Job" -> "Run Ansible roles";
  3. Через список заданий:
    1. открыть страницу "Шаблоны заданий"
    2. напротив нужного шаблона нажать "Выполнить"

Ansible-роли могут быть импортированы из смарт-прокси. Для этого необходимо:

  1. перейти на страницу "Ansible roles" ("Настройки" -> "Роли")
  2. выбрать источник импорта из выпадающего меню справа.

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

При запуске сервиса 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