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

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

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


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

  • ОС ОН Орёл 2.12

Введение

Для управления конфигурациями серверов, их обслуживания на всём жизненном цикле имеет актуальное значение связка работы трёх компонентов: foreman, puppet, ansible.

  • Foreman - инструмент, предназначенный для помощи системным администраторам в управлении серверами, обеспечивающий простой способ взаимодействия с системами управления конфигурациями (Ansible, Puppet и др.) для автоматизации задач администрирования и развертывания приложений. Foreman поддерживает WEB-интерфейс, API и CLI, которые можно использовать для предоставления, настройки и мониторинга серверов. Подходит для инфраструктур любых размеров.
  • Puppet - инструмент управления конфигурацией, который помогает системным администраторам автоматизировать предоставление, настройку и управление серверной инфраструктурой.
  • Ansible - система управления конфигурациями, использующаяся для автоматизации настройки и развертывания программного обеспечения. Позволяет автоматизировать сложные задачи, например, непрерывное развертывание или непрерывное обновление без простоев.

Описание стенда

Сервер: 10.0.2.120 master.astra.lan

Клиент: 10.2.121 agent1.astra.lan

На стенде отсутствует настроенный DNS-сервер, поэтому для разрешения IP-адресов используются файлы /etc/host на сервере и клиенте.

Установка

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.utf8locale -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
Для проверки работы агента можно на клиентской машине после подписания сертификата выполнить jcnfyjdbnm cthdbc b следующие команды:

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

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

Перейдем в Infrastructure -> HTTP Proxies и добавим наш прокси:

Нажмем на кнопку Submit.

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

Если узлы отсутствуют, то достаточно на нужных узлах выполнить команду sudo /opt/puppetlabs/bin/puppet agent --test и обновить данную страницу.

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 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_file.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


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

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

  • Нет меток