Оглавление |
---|
Информация | ||
---|---|---|
|
ОС ОН Орёл 2.12 (начиная с версии 2.12.17)
|
Предупреждение |
---|
Развертывание службы Foreman следует выполнять на отдельном сервере, без работающих служб, использующих web-сервер apache2. В частности, не следует применять настоящую инструкция на контроллерах домена FreeIPA (см. Контроллер ЕПП FreeIPA в Astra Linux). |
Введение
Для управления конфигурациями серверов, их обслуживания на всём жизненном цикле имеет актуальное значение связка работы трёх компонентов: 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
Далее подразумевается, что на сервере и клиенте используются одинаковые имена пользователей. Если имена пользователей разные то нужно соответствующим образом изменить команды передачи ключей SSH.
На стенде отсутствует настроенный DNS-сервер, поэтому для разрешения IP-адресов используются
Введение
Для управления конфигурациями серверов, их обслуживания на всём жизненном цикле имеет актуальное значение связка работы трёх компонентов: 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 |
.
Информация |
---|
На сервере должно быть установлено не менее 3ГБ оперативной памяти. |
Установка Puppet
Настройка сервера
Имя и адрес сервера
Коммуникация между Puppet Server и Puppet Agent осуществляется по имени хоста. Для правильной работы нужно либо настроить DNS-сервер, либо указать адреса хостов в файлах /etc/hosts на всех хостах.
Для сервера используем имя master.astra.lan, и команда назначения имени будет иметь следующий вид (команда выполняется на сервере):
Command |
---|
sudo hostnamectl set-hostname master.astra.lan |
Осуществить настройку каждой машины через файл /etс/hosts, для чего внести в файл указание IP-адреса Puppet Server (10.0.2.120) и его имён (master.astra.lan, master и puppet). В итоге файл /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.
Коррекция региональных настроек (locales) на сервере.
Проверить наличие региональной настройки en_US.utf8 выполнив команду:
Command |
---|
locale -a | grep en_US.utf8 |
Если региональной настройки en_US.utf8 нет, то добавить её, выполнив следующие команды
Command |
---|
Настройка локалей на сервере.
Проверить наличие локали 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
Для установки выполнить на сервере следующие команды:
При работе в Astra Linux Special Edition x.7 подключить расширенный репозиторий, включая компонент расширенного репозитория astra-ce (см. Репозитории Astra Linux Special Edition x.7: структура, особенности подключения и использования).
Для установки выполнить на сервере следующие команды:
Commandcommand |
---|
sudo apt update |
Для коммуникации Puppet Server использует IP-порт 8140 порт. Если включен межсетевой экран, то разрешить коммуникации через этот порт. Для сетевого экрана ufw:
Command |
---|
sudo ufw allow 8140 |
Разрешить автоматический запуск Puppet Server и запустим его:
Command |
---|
sudo systemctl enable puppetserver |
Проверить статус сервиса:
Command |
---|
sudo systemctl status puppetserver |
Установка Puppet Agent на клиентском компьютере
Имя и адрес клиентского компьютера
Настроить статический IP-адрес сервера (далее - 10.0.2.121)
Задать имя компьютера:
Command |
---|
sudo hostnamectl set-hostname agent1.astra.lan |
Настроить разрешение Настроить разрешение имён сервера и клиента с помощью файла /etc/hosts. Файл /etc/hosts на клиентском компьютере должен иметь примерно такой вид:
Блок кода |
---|
127.0.0.1 localhost 10.0.2.121 agent1.astra.lan agent1 10.0.2.120 master.astra.lan master puppet # The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters |
Можно просто скопировать ранее созданный файл /etc/hosts с сервера.
Установка агента
Для установки агента выполнить на компьютере-агенте следующие команды (при этом будет установлен агент и сервер SSH для удалённого управления агентом):
Command |
---|
sudo apt update |
Отредактировать файл /etc/puppetlabs/puppet/puppet.conf, добавив/заменив в секции main параметры:
Блок кода |
---|
server = master.astra.lan show_diff = true |
Для коммуникации агент, как и Puppet Server, использует IP-порт 8140. Если включен межсетевой экран, то разрешить коммуникации через этот порт. Для сетевого экрана ufw:
Command |
---|
sudo ufw allow 8140 |
Добавить Добавить службу Puppet Agent в автозагрузку и запустить её:
Command |
---|
sudo systemctl enable puppet sudo systemctl start puppet |
Настройка доступа по ssh
На клиентской машине задать пароль root и разрешить root-доступ по ssh (команды выполняются на клиентской машине):, для чего в файле /etc/ssh/sshd_config раскомментировать параметр PermitRootLogin, изменить его значение на yes и перезапустить сервер SSH (команды выполняются на клиентской машине):
Command |
---|
sudo passwd root |
Скопировать ключ для работы с ansible для каждого клиента с сервера (команда выполняется на сервере):
Command |
---|
sudo ssh-copy-id -i ~foreman-proxy/.ssh/id_rsa_foreman_proxy.pub root@agent1.astra.lan |
Подписание сертификатов клиента
Подписание сертификатов клиента
При первом запуске клиентская служба Puppet Agent отправит При первом запуске служба 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 и Foreman
Установить пакеты Ansible и Foreman, выполнив на сервере следующие командыдействия:
Установить пакет ansible из репозитория:
Command |
---|
Command |
sudo apt install ansible |
Настройка /etc/ansible/hosts
Отредактировать файл /etc/ansible/hosts, добавив в файл секцию [agents] (т.е. добавив группу серверов, с названием этой группы agents). В этой группе пока будет один сервер с именем agent1.astra.lan и IP-адресом 10.0.2.121:
Command |
---|
echo -e " [agents ]:\n hosts:\n agent1agent1.astra.lan ansible_ssh_host=10.0.2.121:\n ansible_user: root" | sudo tee - aa /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 |
---|
sudo foreman-rake permissions:reset username=admin password=<новый_пароль> |
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-интерфейс. |
Command | ||
---|---|---|
| ||
["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 |
Проверить работу связки. Создать файл cat_hosts.yml со следующим содержимым:
Блок кода |
---|
-
- hosts: all
become: true
tasks:
- name: cat /etc/hosts
command: cat /etc/hosts
register: cat_all_hosts
... |
Выполнить команду:
Title | ansible-playbook cat_hosts.yml -vv |
---|
PLAY [all] *********************************************************************
TASK [setup] *******************************************************************
ok: [agent1.astra.lan]
TASK [cat /etc/hosts] **********************************************************
changed: [agent1.astra.lan]
В результате файл /etc/ansible/hosts должен иметь следующий вид:
Блок кода |
---|
agents:
hosts:
agent1.astra.lan:
ansible_user: root |
Предупреждение |
---|
В примере используется YAML-формат файла. Отступы (количество пробелов в начале строки) должны быть соблюдены. Использование символов табуляции не допускается. |
Ansible использует подключение ssh без запроса пароля по ключу, поэтому нужно сгенерировать ключ:
Command |
---|
ssh-keygen -f ~/.ssh/id_rsa -N '' |
Информация |
---|
Ключ должен быть сгенерирован и передан от имени пользователя, от которого будут выполняться команды ansible. Если команды ansible предполагается выполнять от sudo, то генерировать и передавать ключ следует также от sudo (можно сгенерировать и передать ключи для нескольких пользователей ). |
И после создания ключа передать его на нужные узлы:
Command |
---|
ssh-copy-id -i ~/.ssh/id_rsa root@agent1.astra.lan |
Проверить работу Ansible, выполнив пинг на группу серверов agents:
Command | ||
---|---|---|
| ||
agent1.astra.lan | SUCCESS => { "changed": false, "ping": "pong" } |
Базовая настройка Foreman
Установить пакеты:
В случае, если ОС была установлена без графической оболочки, установить пакет shared-mime-info, команда:
Command |
---|
sudo apt install shared-mime-info |
Установить пакет foreman-installer:
Command |
---|
sudo apt install foreman-installer |
Предупреждение |
---|
Перед выполнением дальнейших действий следует проверить, что в файле /etc/debian_version указано значение 9.0, и, если там указано иное значение, заменить его на 9.0. |
Запустить установщик:
Предупреждение | ||
---|---|---|
После установки в строке "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"] |
Настройка
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 |
Создать и скопировать ключ для работы каждого клиента с сервера (команда выполняется на сервере от имени пользователя foreman-proxy):
Command |
---|
sudo -u foreman-proxy ssh-keygen -f ~foreman-proxy/.ssh/id_rsa_foreman_proxy -N '' |
Проверить работу связки можно запустив Ansible playbook. Запустить Ansible playbook можно несколькими способами (при этом нужно будет указать команду или сценарий для выпонения на удалённой машине):
- Через список узлов (хостов):
- открыть страницу "Узлы" ("Узлы" -> "All Hosts");
- выбрать необходимые узлы;
- нажать "Действия" -> "Scheduled Remote Job";
- Через страницу узла:
- открыть страницу "Узлы" ("Узлы" -> "All Hosts");
- перейти на страницу нужного узла и нажать "Scheduled Remote Job" -> "Run Ansible roles";
- Через список заданий:
- открыть страницу "Шаблоны заданий"
- напротив нужного шаблона нажать "Выполнить"
Роли ansible могут быть импортированы из смарт-прокси. Для этого необходимо:
- перейти на страницу "Ansible roles" ("Настройки" -> "Роли")
- выбрать источник импорта из выпадающего меню справа.
Пример использования
См. Настройки служб времени с помощью Ansible и Puppet
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 на '*'.
После этого выполнить команду:
Command |
---|
sudo systemctl restart postgresql foreman |