Содержание

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents


Info

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

  • ОС ОН Орёл 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. Например, для Puppet Server

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

Command

sudo hostnamectl set-hostname master.astra.lan


Осуществим настройку каждой машины через /etс/hosts, добавив в конец файла FQDN строку с указанием IP-адреса Puppet Server (puppet_ip10.0.2.120) и его имени хоста (puppetmaster.astra.lan).
sudo Для этого на сервере и на клиенте выполним команду:


Command

echo -e '

puppet_ip

10.0.2.120\tmaster.astra.lan'

>>

| sudo tee -a /etc/hosts

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

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

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



Command
locale -a

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

Выбираем из списка локаль
| grep en_US.utf8locale -a | grep en_US.utf8




Если локали нет, то выполним для её добавления следующие команды

Info

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

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

enable 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

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



Command
sudo systemctl status puppetserver

2.1.3 Установка Puppet Agent на клиентском

компьютере

При установке сервера puppet клиент на компьютере-сервере устанавливается на этом компьютере автоматически.

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


Command

sudo apt update
sudo apt-get install puppet-agent

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

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

Info
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.
true

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

Info
sudo systemctl enable puppet
sudo systemctl start puppet

2.1.4 Подписание сертификатов

При первом запуске служба Puppet Agent отправляет на Puppet Server запрос на подпись сертификата.

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


Command

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.

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


Command

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

Successfully
signed
certificate
request
for
agent1.astra.lan

Проверим работу Puppet Agent Для проверки работы агента можно на клиентской машине после подписания сертификата выполнить jcnfyjdbnm cthdbc b следующие команды:

Command

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

seconds

# Посторно запускаем службу
sudo systemctl start puppet


2.2 Ansible

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


Command

sudo apt update
sudo apt install ansible

Отредактируем файл /etc/ansible/hosts, добавив секцию agents, в котрой укажем имя (agent1.astra.lan) и IP-адрес (10.0.2.121) клиентской машины:

Command
echo -e "[agents]

\n agent1.astra.lan
ansible_ssh_host=
agent1_server_ip
10.0.2.121" | sudo tee -a /etc/ansible/hosts

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

Command
ssh-keygen -t rsa -b 4096

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

Command
ssh-copy-id
user@agent1_server_ip
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

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


Command

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:


Command

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

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

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