понедельник, 25 июля 2016 г.

Автоматизация администрирования Linux/UNIX серверов (часть 2)

Автоматизация настройки служб при помощи Salt master и minions.


Для использования основной конфигурации SaltStack необходимо установить master на центральный сервер и minion на управляемые сервера. Рассмотрим установку на Linux Debian\Ubuntu. Информацию по установке на другие системы можно найти на сайте разработчика docs.saltstack.com.

Для Debian 8 (Jessie) на серверах необходимо импортировать ключ:
# wget -O - https://repo.saltstack.com/apt/debian/8/amd64/latest/SALTSTACK-GPG-KEY.pub | apt-key add -
После этого добавить в /etc/apt/sources.list строку:
deb http://repo.saltstack.com/apt/debian/8/amd64/latest jessie main
Теперь можно выполнить установку как master, так и minion:
master:/ # apt-get update
master:/ # apt-get install salt-master
либо на управляемом узле:
web1:/ # apt-get update
web1:/ # apt-get install salt-minion
После установки конфигурационные файлы master  и minion лежат в /etc/salt/
/etc/salt/master и /etc/salt/minion соответственно. В файле /etc/salt/master для начала работы достаточно только прописать ИП-адрес сервера master в строке:
interface: 10.10.10.10
А также прописать пути file_roots и pillar_roots, об это чуть поже и перезапустить Salt master:
master:/ # service salt-master restart
На сервере web1, где установлен minion в файле /etc/salt/minion нужно указать адрес хоста master и в разделе grains описать дополнительные сведения о minion, например:
web1:/ # vim /etc/salt/minion
master: salt
ipv6: True
grains:
  roles:
    - web
После перезапуска minion командой:
web1:/ # service salt-minion restart
salt-minion stop/waiting
salt-minion start/running, process 28554
Minion вышлет свой открытый ключ на master, где его необходимо будет принять для дальнейшей работы связки master-minion. Просмотреть список всех ключей на мастере можно командой:
master:/ # salt-key -L
Accepted Keys:
Denied Keys:
Unaccepted Keys:
web1
Rejected Keys:
Принять ключ можно командой:
master:~# salt-key -a web1
The following keys are going to be accepted:
Unaccepted Keys:
web1
Proceed? [n/Y] Y
Key for minion saltminion accepted.
Либо просто командой:
master:~# salt-key -A 
master:/# salt -v web1 cmd.run "hostname -s"
Executing job with jid 20151227190052206904
-------------------------------------------
web1:
    web1
По умолчанию файлы для управления и настройки удаленных узлов (Salt States или дальше просто states) располагаются на master в папке:
master:/# ls /srv/
formulas  pillar  salt
Эти пути можно переопределить в /etc/salt/master. Пример:
file_roots:
  base:
    - /srv/salt/base
    - /srv/formulas/sudoers-formula
    - /srv/formulas/timezone-formula

pillar_roots:
  base:
    - /srv/pillar
В pillar_roots в отличие от file_roots данные доступны только для конкретных узлов, указанных в файле   /srv/pillar/top.sls и недоступны другим управляемым узлам. Это позволяет использовать pillar_roots для настройки пользователей, ключей и тд, требующих повышенной безопасности.

Пример /srv/pillar/top.sls:
base:
  '*':
    - locale
  'roles:dev':
    - match: grain
    - add_dev_users
Cервер на котором в настройках  /etc/salt/minion будет прописан:
grains:
  roles:
    - dev
Сможет воспользоваться стейтами /srv/pillar/locale.sls и /srv/pillar/add_dev_users.sls, так как minion входит в группу dev. Другие узлы смогут воспользоваться только /srv/pillar/locale.sls.

В папке /srv/formulas размещаются уже готовые states которые можно загрузить из репозитария https://github.com/saltstack-formulas. Данные готовые шаблоны states можно использовать для таких задач, как установка пакетов, настройка и запуск служб, создание пользователей или прав доступа, и многое другое.

Загрузить готовые formulas можно несколькими способами:
master:/# cd /srv/formulas
master:/srv/formulas# git clone https://github.com/saltstack-formulas/docker-formula.git
Cloning into 'docker-formula'...
remote: Counting objects: 354, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 354 (delta 0), reused 0 (delta 0), pack-reused 352
Receiving objects: 100% (354/354), 56.98 KiB | 0 bytes/s, done.
Resolving deltas: 100% (172/172), done.
Checking connectivity... done.
После этого в папке docker-formula/docker/ можно увидеть готовые шаблоны для конфигурирования docker-контейнеров:
master:/srv/formulas# ls docker-formula/docker/
codenamemap.yaml  compose-ng.sls  compose.sls  containers.sls  defaults.yaml  files  init.sls  kernel.sls  map.jinja  registry.sls
Второй путь загрузить архив и распаковать:
master:/srv/formulas# wget https://github.com/saltstack-formulas/docker-formula/archive/master.zip
master:/srv/formulas# unzip master.zip
Archive:  master.zip
3e8c4ef0a8f5f7f03b156d199ad3271dc5ac63cd
   creating: docker-formula/
   …
master:/srv/formulas# ls docker-formula/docker/
codenamemap.yaml  compose-ng.sls  compose.sls  containers.sls  defaults.yaml  files  init.sls  kernel.sls  map.jinja  registry.sls
Дальше нужно путь к новой папке нужно прописать в конфигурационный файл мастера:
file_roots:
  base:
    - /srv/salt/base
    - /srv/formulas/sudoers-formula
    - /srv/formulas/timezone-formula
   - /srv/formulas/docker-formula
И перезапустить Salt Master:
master:/srv/formulas# service salt-master restart
После этого новые шаблоны states можно использовать для настройки docker-контейнеров.
В папке /srv/salt/base мы будем создавать собственные states, вы можете использовать другой путь, предварительно прописав его в конфигурации master в разделе:
file_roots:
  base: