45
SaltStack Михаил Юматов, Трилан

Михаил Юматов: SaltStack

Embed Size (px)

Citation preview

Page 1: Михаил Юматов: SaltStack

SaltStackМихаил Юматов, Трилан

Page 2: Михаил Юматов: SaltStack

Задачи

— сконфигурировать сервер— развернуть проект на сервере— выполнить команду на сервере

Page 3: Михаил Юматов: SaltStack

Один сервер

Fabric:— сконфигурировать сервер— развернуть проект на сервере— выполнить команду на сервере

Page 4: Михаил Юматов: SaltStack

Один сервер

Chef Solo:— сконфигурировать сервер

Fabric:— развернуть проект на сервере— выполнить команду на сервере

Page 5: Михаил Юматов: SaltStack

Два и более серверов

Chef или Puppet:— сконфигурировать сервер

Fabric:— развернуть проект на сервере— выполнить команду на сервере

Page 6: Михаил Юматов: SaltStack

Два и более серверов: Проблемы

Fabric:— как выбрать нужные сервера?— как проанализировать результаты?— как обработать ошибки?

Page 7: Михаил Юматов: SaltStack

Два и более серверов

SaltStack:— сконфигурировать сервер— развернуть проект на сервере— выполнить команду на сервере

Page 8: Михаил Юматов: SaltStack

Chef и Puppet— системы управления конфигурациями

SaltStack— система параллельного выполнения команд

Page 9: Михаил Юматов: SaltStack

— первый релиз в марте 2011— написан на Python— активно развивается— активное сообщество— топ 10 по числу разработчиков на GitHub в 2012

Page 10: Михаил Юматов: SaltStack

Клиент-серверная архитектура:Minion — управляемый серверMaster — управляющий сервер

master

minion

Page 11: Михаил Юматов: SaltStack

Система параллельного выполнения команд

Page 12: Михаил Юматов: SaltStack

— Перезапустить процесс— Обновить системный пакет— Посмотреть состояние системы

Например

Page 13: Михаил Юматов: SaltStack

salt '*' test.ping

где

что

Page 14: Михаил Юматов: SaltStack

Что

Page 15: Михаил Юматов: SaltStack

Команда — функция на Python

Page 16: Михаил Юматов: SaltStack

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

salt '*' service.restart nginxsalt '*' pkg.upgrade redissalt '*' status.loadavg

Например

Page 18: Михаил Юматов: SaltStack

Свои команды/srv/salt/_modules/*

Page 19: Михаил Юматов: SaltStack

def ping(): return True

Например

Page 20: Михаил Юматов: SaltStack

Где

Page 21: Михаил Юматов: SaltStack

? ?

?

?Как различить?

Page 22: Михаил Юматов: SaltStack

По имени

apollo hermes

zeus

artemis

salt zeus test.pingsalt 'zeus,apollo' test.pingsalt 'web.*' test.ping

Page 23: Михаил Юматов: SaltStack

salt '*' grains.items

salt -G 'os:Ubuntu' test.pingsalt -G 'mem_total:4096' test.ping

Grains (крупицы соли)

Page 24: Михаил Юматов: SaltStack

worker web

db

mq

По ролиsalt -G 'roles:web' deploy.websalt -G 'roles:worker' deploy.worker

cache

worker

Page 25: Михаил Юматов: SaltStack

Система управления конфигурациями

salt '*' state.highstate

Page 26: Михаил Юматов: SaltStack

Конфигурация с помощью набора состояний

Page 27: Михаил Юматов: SaltStack

Состояние — функция на Python

Page 28: Михаил Юматов: SaltStack

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

Описание состояния

file.managed:  - name: /etc/vimrc - source: salt://vimrc - mode: 644

file.managed( name='/etc/vimrc', source='salt://vimrc', mode=644,)

В формате YAML: Что происходит:

Page 30: Михаил Юматов: SaltStack

Состояния группируются по идентификаторам

nginx: pkg.installed:   - refresh: true service.running: - enable: true - require: - pkg: nginx

Page 31: Михаил Юматов: SaltStack

Идентификаторы группируются в файлыФайлы образуют дерево состояний

Page 32: Михаил Юматов: SaltStack

Пример

Page 33: Михаил Юматов: SaltStack

from flask import Flask

app = Flask(__name__)

@app.route('/')def hello(): return 'hello world'

Приложение

Page 34: Михаил Юматов: SaltStack

helloworld/ app.py gunicorn.conf init.sls nginx.conf requirements.txt

Дерево состояний

Page 35: Михаил Юматов: SaltStack

helloworld: user.present: []

Создаем пользователя

Page 36: Михаил Юматов: SaltStack

/home/helloworld/.env: virtualenv.managed: - requirements: salt://helloworld/requirements.txt - require: - user: helloworld

Создаем виртуальное окружение

Page 37: Михаил Юматов: SaltStack

/home/helloworld/app.py: file.managed: - source: salt://helloworld/app.py - user: helloworld - group: helloworld - require: - user: helloworld

Заливаем приложение

Page 38: Михаил Юматов: SaltStack

/etc/init/gunicorn.conf: file.managed: - source: salt://helloworld/gunicorn.conf

Создаем конфиг для upstart'а

Page 39: Михаил Юматов: SaltStack

gunicorn: service.running: - watch: - file: /home/helloworld/app.py - virtualenv: /home/helloworld/.env - file: /etc/init/gunicorn.conf

Описываем сервис

Page 40: Михаил Юматов: SaltStack

helloworld: nginx_site.managed: - source: salt://helloworld/nginx.conf - enable: true

Создаем конфиг для nginx'а

Page 41: Михаил Юматов: SaltStack

salt -G 'roles:web' state.highstate

Запускаем

Page 42: Михаил Юматов: SaltStack

Другие возможности

Page 43: Михаил Юматов: SaltStack

Returners

— PostgreSQL— MongoDB— Redis— Email— другие

Page 44: Михаил Юматов: SaltStack

Права доступа

client_acl: bob: - 'G@roles:web': - test.* - project.*

пользователь

миньоны

команды

Page 45: Михаил Юматов: SaltStack

Спасибо за внимание!Вопросы?

— saltstack.org— github.com/yumike/pycon2013

— twitter.com/yumike— github.com/yumike— [email protected]