Содержание

Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 2 Next »


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

  • ОС ОН Орёл 2.12

Введение

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

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

Puppet - это инструмент управления конфигурацией, который помогает системным администраторам автоматизировать предоставление, настройку и управление серверной инфраструктурой.

Ansible - система управления конфигурациями, которая используется для автоматизации настройки и развертывания программного обеспечения. Позволяет организовывать более сложные задачи, например, непрерывное развертывание или непрерывное обновление без простоев.

Установка

Puppet

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

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

Укажем для каждой машины hostname. Например, для Puppet Server команда будет иметь следующий вид:

sudo hostnamectl set-hostname master.astra.lan

Осуществим настройку каждой машины через /etс/hosts, добавив в конец файла FQDN строку с указанием IP-адреса Puppet Server (puppet_ip) и его имени хоста (puppet).

sudo echo -e 'puppet_ip\tmaster.astra.lan' >> /etc/hosts

Произведем настройку локалей.

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

shell locale -a

При ее отсутствии выполним следующие действия:
sudo apt update
sudo apt install debconf
dpkg-reconfigure locales

Выбираем из списка локаль en_US.UTF-8, после установки выполняем перезагрузку.

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

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

sudo apt update
sudo apt install puppetserver

Для коммуникации Puppet Server использует 8140 порт. Откроем его:

sudo ufw allow 8140

Запустим Puppet Server:

sudo systemctl start puppetserver

Проверим статус сервиса:

sudo systemctl status puppetserver
● puppetserver.service - puppetserver Service Loaded: loaded (/lib/systemd/system/puppetserver.service; disabled; vendor preset: enabled) Active: active (running) since Thu 2019-09-10 12:35:29 MSK; 49s ago Process: 1968 ExecStart=/opt/puppetlabs/server/apps/puppetserver/bin/puppetserver start (code=exited, status=0/SUCCESS) Main PID: 1975 (java) Tasks: 48 (limit: 4915) CGroup: /system.slice/puppetserver.service └─1975 /usr/bin/java -Xms2g -Xmx2g -Djruby.logger.class=com.puppetlabs.jruby_utils.jruby.Slf4jLogger -Djava.security.egd=file:/dev/urandom -XX:OnOutOfMemoryError=kill -9 %p -cp /

сен 10 12:35:07 puppet systemd[1]: Starting puppetserver Service... сен 10 12:35:29 puppet systemd[1]: Started puppetserver Service.

При необходимости добавим его в автозагрузку:

sudo systemctl enable puppetserver

2.1.3 Установка Puppet Agent

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

sudo apt update
sudo apt-get install puppet-agent

Запустим Puppet Agent и добавим в автозагрузку:

sudo systemctl start puppet

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

server = master.astra.lan show_diff = true

sudo /opt/puppetlabs/bin/puppet agent --test

Info: Downloaded certificate for ca from puppet Info: Downloaded certificate revocation list for ca from puppet Info: Creating a new RSA SSL key for agent1.astra.lan 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: Certificate for agent1.astra.lan has not been signed yet Couldn't fetch certificate from CA server; you might still need to sign this agent's certificate (agent1.astra.lan). Exiting now because the waitforcert setting is set to 0.

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

Подпишем сертификат:

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

Successfully signed certificate request for agent1.astra.lan

Проверим работу Puppet Agent после подписания сертификата:

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

2.2 Ansible

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

sudo apt update
sudo apt install ansible

Отредактируем файл /etc/ansible/hosts, добавив секцию agents

[agents] agent1.astra.lan ansible_ssh_host=agent1_server_ip

Ansible использует подключение ssh по ключу, поэтому сгенерируем его:

ssh-keygen -t rsa -b 4096

После создания ключа передадим его на нужные узлы:

ssh-copy-id user@agent1_server_ip

Проверим работу Ansible, выполнив пинг на группу серверов agents:

ansible -m ping agents
agent1.astra.lan | SUCCESS => { "changed": false, "ping": "pong" }

2.3 Foreman

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

sudo apt-get update master$ sudo apt-get 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 -> Smart 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

В результате получим следующий вывод:

Using /etc/ansible/ansible.cfg as config file PLAYBOOK: cat_file.yml ********************************************************* 1 plays in cat_file.yml PLAY [all] ********************************************************************* TASK [setup] ******************************************************************* ok: [agent1.astra.lan] TASK [cat /etc/hosts] ********************************************************** task path: /home/user/cat_file.yml:6 changed: [agent1.astra.lan] => {"changed": true, "cmd": ["cat", "/etc/hosts"], "delta": "0:00:00.002691", "end": "2019-09-16 12:25:29.241611", "rc": 0, "start": "2019-09-16 12:25:29.238920", "stderr": "", "stdout": "127.0.0.1\tlocalhost\n127.0.1.1\tastra-orel\n\n172.16.119.182 master.astra.lan\n172.16.119.183 agent1.astra.lan\n\n# The following lines are desirable for IPv6 capable hosts\n::1     localhost ip6-localhost ip6-loopback\nff02::1 ip6-allnodes\nff02::2 ip6-allrouters", "stdout_lines": ["127.0.0.1\tlocalhost", "127.0.1.1\tastra-orel", "", "172.16.119.182 master.astra.lan", "172.16.119.183 agent1.astra.lan", "", "# The following lines are desirable for IPv6 capable hosts", "::1     localhost ip6-localhost ip6-loopback", "ff02::1 ip6-allnodes", "ff02::2 ip6-allrouters"], "warnings": []} 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
    sudo systemctl restart foreman

  • No labels