понедельник, 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:

пятница, 15 января 2016 г.

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

Автоматизация администрирования серверов для Веб при помощи Salt.


SaltStack или коротко Salt  - это Open Source система централизованного управления конфигурацией операционных систем и программ, установленных на серверах. Система достаточно мощная, масштабируемая и позволяет управлять десятками тысяч серверов одновременно и быстро.

Salt система аналогичная Chef и Puppet, но в отличии от них написан на языке Python, который пока является основным языком автоматизации у Linux администраторов и DevOps. Кроме этого, он относительно менее требователен к ресурсам и немного проще в использовании (на наш взгляд). Salt использует на сетевом уровне проверенную библиотеку ZeroMQ, что позволяет обновлять конфигурацию серверов очень быстро.

Две основные функции Salt: управление конфигурацией и удаленное выполнение команд. Работать с Salt можно только из командной строки. Благодаря этому систему просто установить и начать использовать даже на слабом оборудовании.  В любом случае, большинство Linux или UNIX серверов не включают в себя графический интерфейс.

Способы работы с Salt.


Использование Salt без установки Мастера.


Основная архитектура Salt состоит в установке централизованного master и Salt minions (клиентов) на удаленные машины.
Однако, вы можете использовать Salt и для настройки одного единственного сервера. Для этого достаточно установить на сервер только minion. Он содержит широкие функциональные возможности для самостоятельной работы и предназначен для:
  • Использования команды salt-call  в системе без подключения к мастеру
  • Запуска сценариев конфигурирования локально, по аналогии, как это делается с Мастера для удаленных серверов
Конфигурационные файлы при этом расположены также как на Мастере:
minion# ls /srv
formulas pillar salt
Только вместо команды:
master# salt remote-host state.highstate 
Используется команда:
minion# salt-call state.highstate

Выполнение команд Salt через SSH без установки minion.


Вы можете использовать Salt для автоматизации работы с серверами при помощи SSH без установки minion на управляемые узлы. Для этого нужно установить пакет salt-ssh на Мастер сервер Salt. Для Debian и Ubuntu это можно сделать так:
master:~$ sudo add-apt-repository ppa:saltstack/salt
master:~$ sudo apt-get install salt-ssh

master:~$ sudo dpkg -l | grep salt-ssh
ii  salt-ssh    2015.5.3+ds-1trusty1    all     remote manager to administer servers via salt
Далее включить в конфигурационный файл salt-ssh требуемые для управления узлы:
master# cat /etc/salt/roster
web1:
  host: web1 
  user: useradmin
  passwd: admin_pass
  sudo: True
При включенной опции    sudo: True  пользователь на удаленном узле websrv1 должен быть прописан в sudoers c опцией NOPASSWD.
web1:~$ cat /etc/sudoers | grep useradmin
useradmin ALL=(ALL) NOPASSWD: ALL
После этого мы можем выполнять команды на удаленном узле:
root@master:~# salt-ssh -i '*' cmd.run "service nginx status"
Executing job with jid 20151224154255487679
-------------------------------------------
web1:
    * nginx is running

Или:

root@master:~# salt-ssh -v web1 cmd.run "du -sch /var/log"
Executing job with jid 20151218192723210705
-------------------------------------------

web1:
    11G /var/log
    11G total