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

Post on 25-Jun-2015

2.749 Views

Category:

Technology

7 Downloads

Preview:

Click to see full reader

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