Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
SaltStack
Search
Mike Yumatov
February 24, 2013
Programming
500
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
SaltStack
PyCon Russia 2013
Mike Yumatov
February 24, 2013
More Decks by Mike Yumatov
See All by Mike Yumatov
Python
yumike
3
990
VCS
yumike
1
310
Работа со статикой в Django
yumike
1
230
Other Decks in Programming
See All in Programming
高専、大学編入、そして未踏へ〜プロダクト開発とキャリアの歩み - Technical College, University Transfer, and On to “Mitou” / My Journey in Product Development and Career
pkmiya
0
110
自動化したのに回らない テスト運用の壁―AI時代の品質責任と生産性
mfunaki
0
540
My Marp Sample
sinoue0108
0
130
まだ間に合う!今年の夏こそSchemeのマクロ展開器を完全理解!
omasanori
0
570
使いながら育てる Claude Code — 開発フローの1コマンド化 × 繰り返し指摘の自動仕組み化
shiki_kakaku
1
2k
実装をデザインガイドラインに追従させるための取り組み / 260731-dip-mosh-design-system
dachi023
0
7.9k
MySQLとPostgreSQLって何が違うの?
akagami
0
150
Go を使い始めて 2 ヶ月の学び / My first two months with Go
contour_gara
0
400
ソフトウェアエンジニアにとっての生成AI - 特性を知って使い倒す / generative ai for software enginner
kishida
7
2.2k
tsc.rip を支える技術 / Kyoto.なんか #8
susisu
0
3.9k
AIの中の人になってみる
htkym
0
140
Loosening the Reins: Go Generics Get More Flexible
kuro_kurorrr
0
350
Featured
See All Featured
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
660
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
201
75k
GraphQLとの向き合い方2022年版
quramy
50
15k
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
Designing for Timeless Needs
cassininazir
1
460
My Coaching Mixtape
mlcsv
0
300
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
220
How Software Deployment tools have changed in the past 20 years
geshan
1
34k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
360
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
67
57k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
220
Transcript
SaltStack Михаил Юматов, Трилан
Задачи — сконфигурировать сервер — развернуть проект на сервере —
выполнить команду на сервере
Один сервер Fabric: — сконфигурировать сервер — развернуть проект на
сервере — выполнить команду на сервере
Один сервер Chef Solo: — сконфигурировать сервер Fabric: — развернуть
проект на сервере — выполнить команду на сервере
Два и более серверов Chef или Puppet: — сконфигурировать сервер
Fabric: — развернуть проект на сервере — выполнить команду на сервере
Два и более серверов: Проблемы Fabric: — как выбрать нужные
сервера? — как проанализировать результаты? — как обработать ошибки?
Два и более серверов SaltStack: — сконфигурировать сервер — развернуть
проект на сервере — выполнить команду на сервере
Chef и Puppet — системы управления конфигурациями SaltStack — система
параллельного выполнения команд
— первый релиз в марте 2011 — написан на Python
— активно развивается — активное сообщество — топ 10 по числу разработчиков на GitHub в 2012
Клиент-серверная архитектура: Minion — управляемый сервер Master — управляющий сервер
master minion
Система параллельного выполнения команд
— Перезапустить процесс — Обновить системный пакет — Посмотреть состояние
системы Например
salt '*' test.ping где что
Что
Команда — функция на Python
aliases apache pkg archive brew cmd cron config salt.modules.* cp
debconf daemontools disk django event file gem git grains hg hosts iptables kmod locale monit nginx pillar pip ssh
salt '*' service.restart nginx salt '*' pkg.upgrade redis salt '*'
status.loadavg Например
Свои команды /srv/salt/_modules/*
def ping(): return True Например
Где
? ? ? ? Как различить?
По имени apollo hermes zeus artemis salt zeus test.ping salt
'zeus,apollo' test.ping salt 'web.*' test.ping
salt '*' grains.items salt -G 'os:Ubuntu' test.ping salt -G 'mem_total:4096'
test.ping Grains (крупицы соли)
worker web db mq По роли salt -G 'roles:web' deploy.web
salt -G 'roles:worker' deploy.worker cache worker
Система управления конфигурациями salt '*' state.highstate
Конфигурация с помощью набора состояний
Состояние — функция на Python
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 user virtualenv
Описание состояния file.managed: - name: /etc/vimrc - source: salt://vimrc -
mode: 644 file.managed( name='/etc/vimrc', source='salt://vimrc', mode=644, ) В формате YAML: Что происходит:
Состояния группируются по идентификаторам nginx: pkg.installed: - refresh: true service.running:
- enable: true - require: - pkg: nginx
Идентификаторы группируются в файлы Файлы образуют дерево состояний
Пример
from flask import Flask app = Flask(__name__) @app.route('/') def hello():
return 'hello world' Приложение
helloworld/ app.py gunicorn.conf init.sls nginx.conf requirements.txt Дерево состояний
helloworld: user.present: [] Создаем пользователя
/home/helloworld/.env: virtualenv.managed: - requirements: salt://helloworld/requirements.txt - require: - user: helloworld
Создаем виртуальное окружение
/home/helloworld/app.py: file.managed: - source: salt://helloworld/app.py - user: helloworld - group:
helloworld - require: - user: helloworld Заливаем приложение
/etc/init/gunicorn.conf: file.managed: - source: salt://helloworld/gunicorn.conf Создаем конфиг для upstart'а
gunicorn: service.running: - watch: - file: /home/helloworld/app.py - virtualenv: /home/helloworld/.env
- file: /etc/init/gunicorn.conf Описываем сервис
helloworld: nginx_site.managed: - source: salt://helloworld/nginx.conf - enable: true Создаем конфиг
для nginx'а
salt -G 'roles:web' state.highstate Запускаем
Другие возможности
Returners — PostgreSQL — MongoDB — Redis — Email —
другие
Права доступа client_acl: bob: - 'G@roles:web': - test.* - project.*
пользователь миньоны команды
Спасибо за внимание! Вопросы? — saltstack.org — github.com/yumike/pycon2013 — twitter.com/yumike
— github.com/yumike —
[email protected]