Розгортання OpenSource Puppet 4 з кількома Puppet masters. Частина III. Налаштування puppet-db з допомогою Puppet

Розгортання OpenSource Puppet 4 з кількома Puppet masters. Частина I. Підготовча
Розгортання OpenSource Puppet 4 з кількома Puppet masters. Частина II. Налаштування Puppet Masters

Налаштування puppet-db з допомогою Puppet
Задамо параметри для ноди puppet-db репозиторії puppet-environments.git. У разі стандартного розміщення datadir для postgresql.

В репозиторії puppet-environments.git в файл manifests/nodes.pp додамо налаштування puppet-db:

node default {

}
node puppet-db {
class { 'puppetdb':
listen_addresses => '0.0.0.0',
}
}

У разі нестандартного розміщення datadir для postgresql
Хочу висловити подяку Кену Барберу (Ken Barber) за допомогу в налаштуванні. Спочатку я клонував репозиторій модуля puppet-db, вносив зміни до нього в частині розміщення даних postgresql, і встановлював вже змінений модуль. Він підказав, як зробити краще.

node default {

}
node 'puppet-db.example.com' {
class { 'puppetdb':
listen_address => '0.0.0.0',
manage_dbserver => false,
}
class { '::postgresql::globals':
manage_package_repo => true,
version => '9.4',
}
class { '::postgresql::server':
datadir => '/media/data/postgresql/9.4/main',
}

postgresql::server::extension { 'pg_trgm':
database => 'puppetdb',
}
}

Не забудемо створити каталог /media/data/postgresql/9.4/main якщо планується використовувати нестандартне розміщення БД:

aspetrenko@puppet-db:~$ sudo mkdir -p /media/data/postgresql/9.4

Фіксація змін у репозиторії
Зафіксуємо зміни в репозиторії, щоб вони потрапили на сервери puppet. Для будь-якого розміщення postgresql datadir виконаємо:

aspetrenko@aspetrenko-pc:~/sgl-git/puppet-environments$ git add manifests/nodes.pp
aspetrenko@aspetrenko-pc:~/sgl-git/puppet-environments$ git commit manifests/nodes.pp -m "Add puppet-db-config to nodes.pp"
aspetrenko@aspetrenko-pc:~/sgl-git/puppet-environments$ git push -u origin production

Застосування налаштувань puppet-db
Не забудьте встановити настройки puppetmaster в /etc/puppetlabs/puppet/puppet.conf на сервері puppet-db.

Відправимо запит на додавання сертифіката для сервера puppet-db на puppet-master01:

aspetrenko@puppet-db:~$ sudo -i puppet agent --enable
aspetrenko@puppet-db:~$ sudo -i puppet agent --test --waitforcert 60

Підтвердимо сертифікат на puppet-master01:

aspetrenko@puppet-master01:/etc/puppetlabs/code/environments/production$ sudo -i puppet cert list
"puppet-db.example.com" (SHA256) 9C:98:4C:D8:A9:B6:9D:27:5A:9D:A8:5F:15:E2:D8:99:6F:CF:0E:34:5B:B5:5C:BC:23:0D:6E:E0:84:BA:3F:05
aspetrenko@puppet-master01:/etc/puppetlabs/code/environments/production$ sudo -i puppet cert --sign puppet-db.example.com
Signing Certificate Request for:
"puppet-db.example.com" (SHA256) 9C:98:4C:D8:A9:B6:9D:27:5A:9D:A8:5F:15:E2:D8:99:6F:CF:0E:34:5B:B5:5C:BC:23:0D:6E:E0:84:BA:3F:05

Після чого налаштування зроблені в nodes.pp будуть автоматично застосовані для puppet-db: буде встановлений і налаштований postgresql сервер і служба puppet-db.

Підключення puppet-master01 і puppet-master02 до puppet-db
Додамо в файл manifests/nodes.pp наступні рядки:

node 'puppet-master01.example.com' {
class { 'puppetdb::master::config':
puppetdb_server => 'puppet-db.example.com',
}
}

node 'puppet-master02.example.com' {
class { 'puppetdb::master::config':
puppetdb_server => 'puppet-db.example.com',
}
}

Або такі, якщо потрібно налаштування ntp (без використання hiera):

node 'puppet-master01.example.com' {
class {'::ntp':
servers => [ 'time.moscow.example.com', '0.pool.ntp.org' ],
}
class { 'puppetdb::master::config':
puppetdb_server => 'puppet-db.example.com',
}
}

node 'puppet-master02.example.com' {
class {'::ntp':
servers => [ 'time.moscow.example.com', '0.pool.ntp.org' ],
}
class { 'puppetdb::master::config':
puppetdb_server => 'puppet-db.example.com',
}
}

Зафіксуємо зміни в репозиторії:

aspetrenko@aspetrenko-pc:~/sgl-git/puppet-environments$ git commit manifests/nodes.pp -m "Setup puppet-db server for puppet-master01 and puppet-master02"

І відправимо зміни на сервер gitolite3:

aspetrenko@aspetrenko-pc:~/sgl-git/puppet-environments$ git push -u origin production

Застосуємо зміни на серверах puppet-master01 і puppet-master02:

sudo -i puppet agent --test

Перевіримо, застосувались налаштування підключення до puppet-db на puppet-master01 і puppet-master02:

cat /etc/puppetlabs/puppet/puppetdb.conf 
[main]
server_urls = https://puppet-db.example.com:8081/
soft_write_failure = false

Перевіримо, застосувались налаштування ntp на puppet-master01 і puppet-master02:

cat /etc/ntp.conf | grep server
# Set up for servers ntpd with next options:
# server IP address or DNS name of upstream NTP server
# prefer - select preferrable server
server time.moscow.example.com iburst
server 0.pool.ntp.org iburst

Налаштування Hiera
Для спрощення налагодження hiera зробимо символічне посилання на конфігураційний файл hiera на puppet-master01 і puppet-master02:

sudo ln -s /etc/puppetlabs/puppet/hiera.yaml /etc/hiera.yaml

Створимо файл manifests/site.pp, і підключимо hiera з допомогою hiera_include('classes'). Вміст site.pp:

aspetrenko@aspetrenko-pc:~/sgl-git/puppet-environments$ cat manifests/site.pp 
hiera_include('classes')

На серверах puppet-master01 і puppet-master02 у файлі /etc/puppetlabs/puppet/hiera.yaml за замовчуванням задані налаштування хиерархии:

:hierarchy:
- "nodes/%{::trusted.certname}"
- common

Створимо конфігурації за замовчуванням в файлі common.yaml, яка буде застосовуватися для всіх мод, і задамо параметри ntp-клієнта:

aspetrenko@aspetrenko-pc:~/sgl-git/puppet-environments$ cat hieradata/common.yaml 
---
classes:
- ntp

ntp::servers:
- time.moscow.example.com
# - 1.pool.ntp.org
# - 2.pool.ntp.org
# - 3.pool.ntp.org

Створимо каталог для зберігання конфігурацій окремих нсд в hiera:

aspetrenko@aspetrenko-pc:~/sgl-git/puppet-environments$ mkdir hieradata/nodes

Ім'я конфігураційних файлів буде відповідати іменам сертифікатів нсд (%{::trusted.certname}).

Альтернативна реалізація з допомогою hiera, тих же параметрів, що були задані вище в manifests/nodes.pp
Конфігурація puppet-master
aspetrenko@aspetrenko-pc:~/sgl-git/puppet-environments$ cat hieradata/nodes/puppet-master01.example.com.yaml
---
classes:
- puppetdb::master::config

puppetdb::master::config::puppetdb_server: 'puppet-db.example.com'

Аналогічно у файлі hieradata/nodes/puppet-master02.example.com.

Конфігурація для puppet-db

Стандартне розміщення datadir для postgresql

У разі стандартного розміщення datadir для postgresql все просто:

aspetrenko@aspetrenko-pc:~/sgl-git/puppet-environments$ cat hieradata/nodes/puppet-db.example.com.yaml
---
classes:
- puppetdb

puppetdb::listen_address: '0.0.0.0'

Нестандартне розміщення datadir для postgresql

А ось для цього випадку простого рішення не знайшлося. Не знаю наскільки критично наявність розширення pg_trgm в postgresql для функціонування puppet-db. На всяк випадок вирішив не прибирати це розширення.

Справа в тому, що в hiera не можна просто так взяти і оголосити ресурси (Defining resource types), як в Puppet language:

postgresql::server::extension { 'pg_trgm':
database => 'puppetdb',
}

Я перепробував кілька не надто вдалих варіантів додавання ресурсів з допомогою hiera:

serverfault.com/questions/549720/hiera-include-equivalent-for-resource-types/549807
graviline.ru/index/show/41130

Поки не знайшов модуль tedivm-hieratic. Творець модуля заявляє підтримку Puppet 3.x, але і в Puppet 4 все запрацювало. У Puppetfile потрібно прописати ще один модуль:

mod 'tedivm-hieratic' # Hieratic allows Puppet Resources to be created directly in Hiera.

Включити hieratic у файлі manifests/site.pp:

include hieratic

І тоді можна буде поставити конфіг для розміщення нестандартного datadir для postgresql hieradata/nodes/puppet-db.yaml:

---
classes:
- puppetdb
- postgresql::globals
- postgresql::server

puppetdb::listen_address: '0.0.0.0'
puppetdb::manage_dbserver: false

postgresql::globals::manage_package_repo: true
postgresql::globals::version: '9.4'

postgresql::server::datadir: '/media/data/postgresql/9.4/main'

postgresql_server_extension:
pg_trgm:
name: 'pg_trgm'
database: 'puppetdb'

Застосування конфігурації
Якщо налаштували ноди через hiera, потрібно не забути видалити налаштування нод з manifets/nodes.pp.
Фіксація змін:

aspetrenko@aspetrenko-pc:~/sgl-git/puppet-environments$ git add --all
aspetrenko@aspetrenko-pc:~/sgl-git/puppet-environments$ git commit -a -m "Hiera config"
aspetrenko@aspetrenko-pc:~/sgl-git/puppet-environments$ git push -u origin production 

Застосування параметрів на puppet-db:

aspetrenko@puppet-db:~$ sudo -i puppet agent --test 

В результаті отримаємо інфраструктуру Puppet, яку можна розширювати надалі, додаючи додаткові ноди puppet-master в міру зростання навантаження на сервери. Тепер можна приступати до написання маніфестів для керованих нсд. Але про це як-небудь іншим разом.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.