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

Вы просматриваете старую версию данной страницы. Смотрите текущую версию.

Сравнить с текущим просмотр истории страницы

« Предыдущий Версия 15 Следующий »


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

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

Установка

Puppet

Предварительная настройка

Коммуникация между Puppet Server и Puppet Agent осуществляется по имени хоста. Для правильной работы нужно либо настроить DNS-сервер, либо указать адреса хостов в файлах /etc/hosts на всех хостах.
Укажем для каждой машины hostname.

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

sudo hostnamectl set-hostname master.astra.lan
Осуществим настройку каждой машины через /etс/hosts, добавив в конец файла FQDN строку с указанием IP-адреса Puppet Server (10.0.2.120) и его имени хоста (master.astra.lan).
Для этого на сервере и на клиенте выполним команду:
echo -e '10.0.2.120\tmaster.astra.lan' | sudo tee -a /etc/hosts

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

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

locale -a | grep en_US.utf8
Если локали нет, то выполним для её добавления следующие команды
echo "en_US.UTF-8 UTF-8" | sudo tee -a /etc/locale.gen
sudo locale-gen
Или выберем нужные локали, включая en_US.UTF-8 UTF-8 , в интерактивном режиме, выполнив следующие команды:
sudo apt update
sudo dpkg-reconfigure locales

2.1.2 Установка Puppet Server

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

sudo apt update
sudo apt install puppetserver
Для коммуникации Puppet Server использует 8140 порт. Если включен межсетевой экран, то нужно разрешить коммуникации через этот порт. Для сетевого экрана ufw:
sudo ufw allow 8140
Далее разрешим автоматический запуск  Puppet Server и запустим его:
sudo systemctl enable puppetserver
sudo systemctl start puppetserver
Проверим статус сервиса:
sudo systemctl status puppetserver
2.1.3 Установка Puppet Agent на клиентском компьютере

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

sudo apt update
sudo apt-get install puppet-agent
Отредактируем файл /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 запрос на подпись сертификата.

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

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. Подпишем сертификат:

sudo /opt/puppetlabs/bin/puppetserver ca sign --certname agent1.astra.lan

Successfully signed certificate request for agent1.astra.lan
Для проверки работы агента можно на клиентской машине после подписания сертификата выполнить следующие команды:

# Останавливаем службу
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 выполним следующие команды:

sudo apt update
sudo apt install ansible
Отредактируем файл /etc/ansible/hosts, добавив секцию agents, в котрой укажем имя (agent1.astra.lan) и IP-адрес (10.0.2.121) клиентской машины:
echo -e "[agents]\n agent1.astra.lan ansible_ssh_host=10.0.2.121" | sudo tee -a /etc/ansible/hosts
Ansible использует подключение ssh по ключу, поэтому сгенерируем его:
ssh-keygen -t rsa -b 4096
После создания ключа передадим его на нужные узлы:
ssh-copy-id user@10.0.2.121
Проверим работу Ansible, выполнив пинг на группу серверов agents:
ansible -m ping agents
agent1.astra.lan | SUCCESS => {
"changed": false,
"ping": "pong"
}

2.3 Foreman

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

sudo apt update
sudo apt install foreman-installer
Запустим установщик:

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

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


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

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" в английском варианте), где должен появится список доступных узлов:

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

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

sudo mkdir -p /var/lib/foreman-proxy
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
...

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

ansible-playbook cat_hosts.yml -vv
В результате получим следующий вывод:

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 появляется ошибка:

/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 на '*'.

После этого выполнить команду:

sudo systemctl restart postgresql foreman



  • Нет меток