Содержание

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

Commandecho -e '

В итоге файл /etc/hosts должен выглядеть примерно так:


Code Block
127.0.0.1 localhost
10.0.2.120
\tmaster
 master.astra.lan master
puppet' | 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
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 на клиентском компьютере

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

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

Настроить статический IP-адрес сервера (далее - 10.0.2.121)

Настроить разрешение имён сервера и клиента с помощью файла /etc/hosts. Файл /etc/hosts на клиентском компьютере должен иметь примерно такой вид:


Code Block
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 -get install puppet-agent

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

Infocode
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
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
# Останавливаем службу
  1. sudo systemctl stop puppet


# Тестируем службу

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


    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

#


  1. Повторно

запускаем
  1. запустить службу:

    Command
    sudo systemctl start puppet
2.2

Ansible

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

Command

sudo apt update
sudo apt install ansible

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


Foreman

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

Command

sudo apt update
sudo apt install foreman-installer

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

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


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


Warning
В строке "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"]

3.

Настройка

3.1

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.

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

Infocode
-

    -

    - hosts:
all
     
 all
      become:
true
      tasks:
      - name: cat
 true
      tasks:
      - name: cat /etc/hosts

       

        command: cat /etc/hosts

       

        register: cat_all_hosts


...

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

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