Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
SaltStack
Search
Mike Yumatov
February 24, 2013
Programming
0
500
SaltStack
PyCon Russia 2013
Mike Yumatov
February 24, 2013
Tweet
Share
More Decks by Mike Yumatov
See All by Mike Yumatov
Python
yumike
3
970
VCS
yumike
1
300
Работа со статикой в Django
yumike
1
220
Other Decks in Programming
See All in Programming
tsgolintはいかにしてtypescript-goの非公開APIを呼び出しているのか
syumai
6
2.2k
20251127_ぼっちのための懇親会対策会議
kokamoto01_metaps
2
430
令和最新版Android Studioで化石デバイス向けアプリを作る
arkw
0
410
実は歴史的なアップデートだと思う AWS Interconnect - multicloud
maroon1st
0
140
エディターってAIで操作できるんだぜ
kis9a
0
730
【Streamlit x Snowflake】データ基盤からアプリ開発・AI活用まで、すべてをSnowflake内で実現
ayumu_yamaguchi
1
120
S3 VectorsとStrands Agentsを利用したAgentic RAGシステムの構築
tosuri13
6
310
「コードは上から下へ読むのが一番」と思った時に、思い出してほしい話
panda728
PRO
38
26k
ハイパーメディア駆動アプリケーションとIslandアーキテクチャ: htmxによるWebアプリケーション開発と動的UIの局所的適用
nowaki28
0
420
Developing static sites with Ruby
okuramasafumi
0
290
複数人でのCLI/Infrastructure as Codeの暮らしを良くする
shmokmt
5
2.3k
配送計画の均等化機能を提供する取り組みについて(⽩⾦鉱業 Meetup Vol.21@六本⽊(数理最適化編))
izu_nori
0
150
Featured
See All Featured
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Optimising Largest Contentful Paint
csswizardry
37
3.5k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.2k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.7k
Speed Design
sergeychernyshev
33
1.4k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Making the Leap to Tech Lead
cromwellryan
135
9.7k
jQuery: Nuts, Bolts and Bling
dougneiner
65
8.2k
Scaling GitHub
holman
464
140k
For a Future-Friendly Web
brad_frost
180
10k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
285
14k
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]