Михаил Юматов: saltstack
Post on 25-Jun-2015
2.749 Views
Preview:
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
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
salt '*' service.restart nginxsalt '*' pkg.upgrade redissalt '*' status.loadavg
Например
Свои команды/srv/salt/_modules/*
def ping(): return True
Например
Где
? ?
?
?Как различить?
По имени
apollo hermes
zeus
artemis
salt zeus test.pingsalt 'zeus,apollo' test.pingsalt 'web.*' test.ping
salt '*' grains.items
salt -G 'os:Ubuntu' test.pingsalt -G 'mem_total:4096' test.ping
Grains (крупицы соли)
worker web
db
mq
По ролиsalt -G 'roles:web' deploy.websalt -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
uservirtualenv
Описание состояния
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— yumatov@trilan.ru
top related