Создайте подобный сайт на WordPress.com
Начало работы

SaltStack. Основы

SaltStack — система управления конфигурациями и удаленного выполнения операций. Для коммуникации Salt может использовать SSH или собственный протокол, работающий на базе ZeroMQ.

Для работы используются 2 TCP порта 4505 и 4506.

Для работы Salt не нужен SSH

Отличия и сходства с Ansible:

  • Ansible и Salt написаны на Python
  • Ansible работает только через SSH, Salt может работать через SSH или собственный протокол
  • В классической модели работы Salt использует на каждом хосте агенты
  • Асинхронная связь сервера с клиентами (из-за этого параметра Salt работает быстрее чем Ansible)

Ключевые понятия и элементы:

  • Salt master — процесс, который управляет агентами (миньонами)
  • Salt minion — процесс, работающий на управляемых машинах.
  • Salt state (SLS) — конфигурационные файлы, написанные на YAML (аналог Playbook в Ansible)
  • Formulas — множества вызовов к модулям состояний (state modules), организованных таким образом, чтобы достичь определённого результата; они описывают как должна выглядеть система в том случае, когда формула применена. Формулы это заранее приготовленные состояния (salt states).
  • Templates ( шаблоны)
  • Pillars — защищённые хранилища важной информации, собственно salt state’ов.
  • Grains — факты о системах (ОС, ip-адреса, модель процессора и т.д.)
  • Mine – хранилище результатов исполнения команд на миньонах на мастер-сервере. С помощью Mine нельзя откатиться обратно.

Источник — http://xgu.ru/wiki/SaltStack

Установка и настройка

В документации можно посмотреть, как правильно установить Salt Master и Salt Minion.

Для удобства на моём GitHub можно забрать готовый стенд с одним мастером и двумя миньонами. Настроены базово.

Примеры работы команд:

  • Проверка работы Salt на хостах:
salt '*' cmd.run "uname -a"
  • Запуск команды «uname -a» на хосте:
salt minion1 cmd.run "uname -a"
  • Просмотр информации о хосте minion1:
salt minion1 grains.items
  • Пробный запуск (без внесения изменений) файла (/srv/salt/nginx/init.sls) состояния:
sudo salt minion1 state.apply nginx test=True
  • Если проблем не обнаружено, то можно запустить state:
sudo salt minion1 state.apply nginx 

Пример установки nginx на хосте с помощью Salt:

Далее все действия выполняются от root

Создадим каталог nginx /srv/salt/nginx

mkdir -p /srv/salt/nginx

Далее создадим файл /srv/salt/nginx/init.sls со следующим содержимым:

vim /srv/salt/nginx/init.sls

#Установка nginx
nginx:              
  pkg:           
    - installed    

#Запуск службы
  service:            
    - running     

#Отслеживание изменений, при которых будет перезапуск службы
    - watch:      
      - pkg: nginx    
      - file: /etc/nginx/nginx.conf    

#Отправка файла /etc/nginx/nginx.conf на удаленный хост
/etc/nginx/nginx.conf:
  file:
    - managed
    - source: salt://nginx/nginx.conf #путь к файлу на мастер-хосте
    - user: root
    - group: root
    - mode: 644

Создадим файл конфигурации nginx.conf который будет отправлен на удаленный хост:

vim /srv/salt/nginx/nginx.conf

user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
        worker_connections 512;
}

http {

        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        keepalive_timeout 65;
        types_hash_max_size 2048;

        include /etc/nginx/mime.types;
        default_type application/octet-stream;

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
        ssl_prefer_server_ciphers on;

        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;

        gzip on;

        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;
}

Далее создадим файл top.sls который будет запускать файл init.sls из каталога nginx:

vim /srv/salt/top.sls

base:
  'minion1':      #'*' - установка на всех хостах
    - nginx

Проверим как отработает тестовый запуск:

root@master:/srv/salt# salt '*' state.highstate test=True

minion2:
----------
          ID: states
    Function: no.None
      Result: False
     Comment: No Top file or master_tops data matches found. Please see master log for details.
     Changes:   

Summary for minion2
------------
Succeeded: 0
Failed:    1
------------
Total states run:     1
Total run time:   0.000 ms
minion1:
----------
          ID: nginx
    Function: pkg.installed
      Result: None
     Comment: The following packages would be installed/updated: nginx
     Started: 15:18:32.250134
    Duration: 164.761 ms
     Changes:   
              ----------
              installed:
                  ----------
                  nginx:
                      ----------
                      new:
                          installed
                      old:
----------
          ID: /etc/nginx/nginx.conf
    Function: file.managed
      Result: None
     Comment: The file /etc/nginx/nginx.conf is set to be changed
              Note: No changes made, actual changes may
              be different due to other states.
     Started: 15:18:32.428594
    Duration: 36.336 ms
     Changes:   
              ----------
              newfile:
                  /etc/nginx/nginx.conf
----------
          ID: nginx
    Function: service.running
      Result: None
     Comment: Service is set to be started
     Started: 15:18:32.491839
    Duration: 15.134 ms
     Changes:   

Summary for minion1
------------
Succeeded: 3 (unchanged=3, changed=2)
Failed:    0
------------
Total states run:     3
Total run time: 216.231 ms
ERROR: Minions returned with non-zero exit code
root@master:/srv/salt# 

Сначала мы увидим ошибку, в ошибке будет написано, что по хосту minion2 не найдено изменений. Так и должно быть, по хосту minion1 проблем не найдено, можем запустить state:

salt '*' state.highstate

После установки, можно проверить, был ли установлен nginx, указав в адресной строке адрес сервер minion1:

Если у нас получается зайти на веб-интерфейс, значит установка прошла успешно.

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход /  Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход /  Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход /  Изменить )

Connecting to %s

%d такие блоггеры, как: