Михаил Юматов: saltstack
TRANSCRIPT
![Page 1: Михаил Юматов: SaltStack](https://reader031.vdocuments.net/reader031/viewer/2022013105/558b37ffd8b42ac9378b4677/html5/thumbnails/1.jpg)
SaltStackМихаил Юматов, Трилан
![Page 2: Михаил Юматов: SaltStack](https://reader031.vdocuments.net/reader031/viewer/2022013105/558b37ffd8b42ac9378b4677/html5/thumbnails/2.jpg)
Задачи
— сконфигурировать сервер— развернуть проект на сервере— выполнить команду на сервере
![Page 3: Михаил Юматов: SaltStack](https://reader031.vdocuments.net/reader031/viewer/2022013105/558b37ffd8b42ac9378b4677/html5/thumbnails/3.jpg)
Один сервер
Fabric:— сконфигурировать сервер— развернуть проект на сервере— выполнить команду на сервере
![Page 4: Михаил Юматов: SaltStack](https://reader031.vdocuments.net/reader031/viewer/2022013105/558b37ffd8b42ac9378b4677/html5/thumbnails/4.jpg)
Один сервер
Chef Solo:— сконфигурировать сервер
Fabric:— развернуть проект на сервере— выполнить команду на сервере
![Page 5: Михаил Юматов: SaltStack](https://reader031.vdocuments.net/reader031/viewer/2022013105/558b37ffd8b42ac9378b4677/html5/thumbnails/5.jpg)
Два и более серверов
Chef или Puppet:— сконфигурировать сервер
Fabric:— развернуть проект на сервере— выполнить команду на сервере
![Page 6: Михаил Юматов: SaltStack](https://reader031.vdocuments.net/reader031/viewer/2022013105/558b37ffd8b42ac9378b4677/html5/thumbnails/6.jpg)
Два и более серверов: Проблемы
Fabric:— как выбрать нужные сервера?— как проанализировать результаты?— как обработать ошибки?
![Page 7: Михаил Юматов: SaltStack](https://reader031.vdocuments.net/reader031/viewer/2022013105/558b37ffd8b42ac9378b4677/html5/thumbnails/7.jpg)
Два и более серверов
SaltStack:— сконфигурировать сервер— развернуть проект на сервере— выполнить команду на сервере
![Page 8: Михаил Юматов: SaltStack](https://reader031.vdocuments.net/reader031/viewer/2022013105/558b37ffd8b42ac9378b4677/html5/thumbnails/8.jpg)
Chef и Puppet— системы управления конфигурациями
SaltStack— система параллельного выполнения команд
![Page 9: Михаил Юматов: SaltStack](https://reader031.vdocuments.net/reader031/viewer/2022013105/558b37ffd8b42ac9378b4677/html5/thumbnails/9.jpg)
— первый релиз в марте 2011— написан на Python— активно развивается— активное сообщество— топ 10 по числу разработчиков на GitHub в 2012
![Page 10: Михаил Юматов: SaltStack](https://reader031.vdocuments.net/reader031/viewer/2022013105/558b37ffd8b42ac9378b4677/html5/thumbnails/10.jpg)
Клиент-серверная архитектура:Minion — управляемый серверMaster — управляющий сервер
master
minion
![Page 11: Михаил Юматов: SaltStack](https://reader031.vdocuments.net/reader031/viewer/2022013105/558b37ffd8b42ac9378b4677/html5/thumbnails/11.jpg)
Система параллельного выполнения команд
![Page 12: Михаил Юматов: SaltStack](https://reader031.vdocuments.net/reader031/viewer/2022013105/558b37ffd8b42ac9378b4677/html5/thumbnails/12.jpg)
— Перезапустить процесс— Обновить системный пакет— Посмотреть состояние системы
Например
![Page 13: Михаил Юматов: SaltStack](https://reader031.vdocuments.net/reader031/viewer/2022013105/558b37ffd8b42ac9378b4677/html5/thumbnails/13.jpg)
salt '*' test.ping
где
что
![Page 14: Михаил Юматов: SaltStack](https://reader031.vdocuments.net/reader031/viewer/2022013105/558b37ffd8b42ac9378b4677/html5/thumbnails/14.jpg)
Что
![Page 15: Михаил Юматов: SaltStack](https://reader031.vdocuments.net/reader031/viewer/2022013105/558b37ffd8b42ac9378b4677/html5/thumbnails/15.jpg)
Команда — функция на Python
![Page 16: Михаил Юматов: SaltStack](https://reader031.vdocuments.net/reader031/viewer/2022013105/558b37ffd8b42ac9378b4677/html5/thumbnails/16.jpg)
aliases
apachepkg
archive
brew
cmd
cron
config
salt.modules.*
cpdebconf
daemontools
disk
django
eventfile
gem
git
grains
hg
hosts
iptables kmod
locale
monit
nginx
pillar
pip
ssh
![Page 17: Михаил Юматов: SaltStack](https://reader031.vdocuments.net/reader031/viewer/2022013105/558b37ffd8b42ac9378b4677/html5/thumbnails/17.jpg)
salt '*' service.restart nginxsalt '*' pkg.upgrade redissalt '*' status.loadavg
Например
![Page 18: Михаил Юматов: SaltStack](https://reader031.vdocuments.net/reader031/viewer/2022013105/558b37ffd8b42ac9378b4677/html5/thumbnails/18.jpg)
Свои команды/srv/salt/_modules/*
![Page 19: Михаил Юматов: SaltStack](https://reader031.vdocuments.net/reader031/viewer/2022013105/558b37ffd8b42ac9378b4677/html5/thumbnails/19.jpg)
def ping(): return True
Например
![Page 20: Михаил Юматов: SaltStack](https://reader031.vdocuments.net/reader031/viewer/2022013105/558b37ffd8b42ac9378b4677/html5/thumbnails/20.jpg)
Где
![Page 21: Михаил Юматов: SaltStack](https://reader031.vdocuments.net/reader031/viewer/2022013105/558b37ffd8b42ac9378b4677/html5/thumbnails/21.jpg)
? ?
?
?Как различить?
![Page 22: Михаил Юматов: SaltStack](https://reader031.vdocuments.net/reader031/viewer/2022013105/558b37ffd8b42ac9378b4677/html5/thumbnails/22.jpg)
По имени
apollo hermes
zeus
artemis
salt zeus test.pingsalt 'zeus,apollo' test.pingsalt 'web.*' test.ping
![Page 23: Михаил Юматов: SaltStack](https://reader031.vdocuments.net/reader031/viewer/2022013105/558b37ffd8b42ac9378b4677/html5/thumbnails/23.jpg)
salt '*' grains.items
salt -G 'os:Ubuntu' test.pingsalt -G 'mem_total:4096' test.ping
Grains (крупицы соли)
![Page 24: Михаил Юматов: SaltStack](https://reader031.vdocuments.net/reader031/viewer/2022013105/558b37ffd8b42ac9378b4677/html5/thumbnails/24.jpg)
worker web
db
mq
По ролиsalt -G 'roles:web' deploy.websalt -G 'roles:worker' deploy.worker
cache
worker
![Page 25: Михаил Юматов: SaltStack](https://reader031.vdocuments.net/reader031/viewer/2022013105/558b37ffd8b42ac9378b4677/html5/thumbnails/25.jpg)
Система управления конфигурациями
salt '*' state.highstate
![Page 26: Михаил Юматов: SaltStack](https://reader031.vdocuments.net/reader031/viewer/2022013105/558b37ffd8b42ac9378b4677/html5/thumbnails/26.jpg)
Конфигурация с помощью набора состояний
![Page 27: Михаил Юматов: SaltStack](https://reader031.vdocuments.net/reader031/viewer/2022013105/558b37ffd8b42ac9378b4677/html5/thumbnails/27.jpg)
Состояние — функция на Python
![Page 28: Михаил Юматов: SaltStack](https://reader031.vdocuments.net/reader031/viewer/2022013105/558b37ffd8b42ac9378b4677/html5/thumbnails/28.jpg)
salt.states.*
alias
pkg
cmd
cron
debconf
file
gem
git
hg
host
kmod
locale
pip
group
module
mount
network
postgres_database
postgres_user
postgres_group
ssh_auth
uservirtualenv
![Page 29: Михаил Юматов: SaltStack](https://reader031.vdocuments.net/reader031/viewer/2022013105/558b37ffd8b42ac9378b4677/html5/thumbnails/29.jpg)
Описание состояния
file.managed: - name: /etc/vimrc - source: salt://vimrc - mode: 644
file.managed( name='/etc/vimrc', source='salt://vimrc', mode=644,)
В формате YAML: Что происходит:
![Page 30: Михаил Юматов: SaltStack](https://reader031.vdocuments.net/reader031/viewer/2022013105/558b37ffd8b42ac9378b4677/html5/thumbnails/30.jpg)
Состояния группируются по идентификаторам
nginx: pkg.installed: - refresh: true service.running: - enable: true - require: - pkg: nginx
![Page 31: Михаил Юматов: SaltStack](https://reader031.vdocuments.net/reader031/viewer/2022013105/558b37ffd8b42ac9378b4677/html5/thumbnails/31.jpg)
Идентификаторы группируются в файлыФайлы образуют дерево состояний
![Page 32: Михаил Юматов: SaltStack](https://reader031.vdocuments.net/reader031/viewer/2022013105/558b37ffd8b42ac9378b4677/html5/thumbnails/32.jpg)
Пример
![Page 33: Михаил Юматов: SaltStack](https://reader031.vdocuments.net/reader031/viewer/2022013105/558b37ffd8b42ac9378b4677/html5/thumbnails/33.jpg)
from flask import Flask
app = Flask(__name__)
@app.route('/')def hello(): return 'hello world'
Приложение
![Page 34: Михаил Юматов: SaltStack](https://reader031.vdocuments.net/reader031/viewer/2022013105/558b37ffd8b42ac9378b4677/html5/thumbnails/34.jpg)
helloworld/ app.py gunicorn.conf init.sls nginx.conf requirements.txt
Дерево состояний
![Page 35: Михаил Юматов: SaltStack](https://reader031.vdocuments.net/reader031/viewer/2022013105/558b37ffd8b42ac9378b4677/html5/thumbnails/35.jpg)
helloworld: user.present: []
Создаем пользователя
![Page 36: Михаил Юматов: SaltStack](https://reader031.vdocuments.net/reader031/viewer/2022013105/558b37ffd8b42ac9378b4677/html5/thumbnails/36.jpg)
/home/helloworld/.env: virtualenv.managed: - requirements: salt://helloworld/requirements.txt - require: - user: helloworld
Создаем виртуальное окружение
![Page 37: Михаил Юматов: SaltStack](https://reader031.vdocuments.net/reader031/viewer/2022013105/558b37ffd8b42ac9378b4677/html5/thumbnails/37.jpg)
/home/helloworld/app.py: file.managed: - source: salt://helloworld/app.py - user: helloworld - group: helloworld - require: - user: helloworld
Заливаем приложение
![Page 38: Михаил Юматов: SaltStack](https://reader031.vdocuments.net/reader031/viewer/2022013105/558b37ffd8b42ac9378b4677/html5/thumbnails/38.jpg)
/etc/init/gunicorn.conf: file.managed: - source: salt://helloworld/gunicorn.conf
Создаем конфиг для upstart'а
![Page 39: Михаил Юматов: SaltStack](https://reader031.vdocuments.net/reader031/viewer/2022013105/558b37ffd8b42ac9378b4677/html5/thumbnails/39.jpg)
gunicorn: service.running: - watch: - file: /home/helloworld/app.py - virtualenv: /home/helloworld/.env - file: /etc/init/gunicorn.conf
Описываем сервис
![Page 40: Михаил Юматов: SaltStack](https://reader031.vdocuments.net/reader031/viewer/2022013105/558b37ffd8b42ac9378b4677/html5/thumbnails/40.jpg)
helloworld: nginx_site.managed: - source: salt://helloworld/nginx.conf - enable: true
Создаем конфиг для nginx'а
![Page 41: Михаил Юматов: SaltStack](https://reader031.vdocuments.net/reader031/viewer/2022013105/558b37ffd8b42ac9378b4677/html5/thumbnails/41.jpg)
salt -G 'roles:web' state.highstate
Запускаем
![Page 42: Михаил Юматов: SaltStack](https://reader031.vdocuments.net/reader031/viewer/2022013105/558b37ffd8b42ac9378b4677/html5/thumbnails/42.jpg)
Другие возможности
![Page 43: Михаил Юматов: SaltStack](https://reader031.vdocuments.net/reader031/viewer/2022013105/558b37ffd8b42ac9378b4677/html5/thumbnails/43.jpg)
Returners
— PostgreSQL— MongoDB— Redis— Email— другие
![Page 44: Михаил Юматов: SaltStack](https://reader031.vdocuments.net/reader031/viewer/2022013105/558b37ffd8b42ac9378b4677/html5/thumbnails/44.jpg)
Права доступа
client_acl: bob: - 'G@roles:web': - test.* - project.*
пользователь
миньоны
команды
![Page 45: Михаил Юматов: SaltStack](https://reader031.vdocuments.net/reader031/viewer/2022013105/558b37ffd8b42ac9378b4677/html5/thumbnails/45.jpg)
Спасибо за внимание!Вопросы?
— saltstack.org— github.com/yumike/pycon2013
— twitter.com/yumike— github.com/yumike— [email protected]