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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Mike Yumatov
February 24, 2013
Programming
500
0
Share
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
フロントエンドとバックエンドで「1文字」を揃えよう
youkidearitai
PRO
0
170
プラグインで拡張される Context をtype-safe にする難しさと設計判断
kazupon
2
560
Java × distroless で 軽量なコンテナイメージを / Java on Distroless
contour_gara
0
470
SPMマルチモジュールで テストカバレッジを取得する技法
yosshi4486
0
140
AIとRubyの静的型付け
ukin0k0
0
520
The NotImplementedError Problem in Ruby
koic
1
330
Why Laravel apps break—Mastering the fundamentals to keep them maintainable
kentaroutakeda
1
330
次世代リンターで探る、tsgo 時代における型認識カスタムルールの現実解
ytakahashii
3
1.4k
Claspは野良GASの夢をみるか
takter00
0
160
キャリア迷子上等 ─ "ない道"は自分で作ればいい
16bitidol
2
190
TypeScriptだけでAIエージェントを作る フロント・エージェント・インフラのフルスタック実践
har1101
6
1.3k
さぁV100、メモリをお食べ・・・
nilpe
0
130
Featured
See All Featured
YesSQL, Process and Tooling at Scale
rocio
174
15k
Evolving SEO for Evolving Search Engines
ryanjones
0
210
Darren the Foodie - Storyboard
khoart
PRO
3
3.4k
Making Projects Easy
brettharned
120
6.7k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Claude Code のすすめ
schroneko
67
220k
Become a Pro
speakerdeck
PRO
31
6k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
720
Joys of Absence: A Defence of Solitary Play
codingconduct
1
380
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
4k
Git: the NoSQL Database
bkeepers
PRO
432
67k
The World Runs on Bad Software
bkeepers
PRO
72
12k
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]