Application deployment & configuration management

Post on 22-Nov-2014

606 views 4 download

description

 

Transcript of Application deployment & configuration management

Application Deployment

& Configuration Management

Александр Кириллов, UNDEV@saratovsource, kirillov@undev.ru

Application Deployment(capistrano)

& Configuration Management

(chef)

Configuration Management

http://www.opscode.com/chef/

Configuration ManagementBad-bad story...

Configuration ManagementBad-bad story...Что случилось?

● сайт упал и не поднимается

● все настройки умерли вместе с сервером

● … а это был не один сервер● … ● админ в запое● … идт

Configuration ManagementВ чем проблема?● пакеты ставятся руками● каждый конфиг настраивается тоже руками (vim, nano…)● install_all_packages_on_this_server.sh или bootstrap.sh● серверы могут быть разные (OS, roles, services)● компьютеров становится все больше, а рук не прибавляется● документация по настройке конкретного сервера(или сервиса) почти

всегда отсутствует● отсутствуют инструменты тестирования окружения● мониторинг ?..

Configuration ManagementРешение проблемы:

Configuration ManagementПочему Chef:● Эффективность

все настройки и конфигурации лежат в одном месте

● Масштабируемостьразделение на окружения, роли и ноды

● Повторное исползованиесоздаем ноду и через несколько минут имеем готовый инстанс

● Документациярецепты хранят всю информацию о вашем окружении

Configuration ManagementЕще плюсы:+ Меньше ошибок+ Возможность тестирования+ Версионность+ Гибкость+ Большое сообщество+ Over 1220 готовых (официальных) кукбуков

Configuration ManagementЧто Chef не может:

● Магическим образом настроить ваш сервер

● Безрассудно использовать кукбуки и рецепты

● Мониторить ваши сервера и приложения

● Использовать концепцию “отката”

Configuration ManagementInfrastructure as code:● Управление инфраструктурой как идемпотентным

Ресурсом (Resource)

● Складываем все в Рецепты (Recipe)

● Настраивайте ваши серверы и запускайте

интегрированную инфраструктуру

● Отслеживайте и управляйте инфраструктурой как исходным кодом

● Ruby DSL(Domain Specific Language)

Configuration Management

Chef Chef-Solo

Configuration ManagementТерминология:Ресурсы (Resources)

● имеет определенный тип

● у него есть имя

● а также аттрибуты

● выполняет действия

для приведения ресурса

в нужное состояние

19 #...20 package “nginx” do21 version “1.4.4”22 action :install23 end

35 #...36 service “nginx” do37 action [:enable, :start]38 end

Configuration ManagementТерминология:Провайдеры (Providers)

● Провайдеры описывают поведение ресурсов

● Вы описываете “ЧТО” должно быть сделано вместо “КАК” делать

● Несколько провайдеров для каждого типа ресурсов

(apt, yum, rubygems, portage, macports, и т.д.)

● Ресурсы > Платформа > Провайдер

Configuration ManagementТерминология:Рецепты (Recipes)

● Это коллекция

ресурсов

● Код рецептов

повторно используется

и имеет блочную структуру

case node[‘platform_family’]when ‘rhel’ package ‘ImageMagick’when ‘debian’, ‘mac_os_x’ package ‘imagemagick’end

dev_pkg = value_for_platform( [‘redhat’, ‘fedora’] => { ‘default’ => “ImageMagick-devel” }, “ubuntu” => { “8.04” => “libmagick9-dev”, “8.10” => “libmagick9-dev”, “default” => “libmagickwand-dev” })package dev_pkg

Configuration ManagementТерминология:Роли (Roles)

● Роль описывает чем является нода

● Роли доступны для поиска

● Состоят аттрибутов и списка запуска (run_list)

● Определяют “личность” вашего сервера

Configuration ManagementТерминология:Поваренные книги (Cookbooks)

● Распределенные● Инфраструктура как код● Обычно - отдельный репозиторий в системе контроля версий● Содержат:

○ Рецепты○ Активы (файлы/шаблоны) - статические и динамические○ Аттрибуты○ Метаданные

Configuration ManagementТерминология:Поваренные книги (Cookbooks)

● Огромноесообщество

● Много готовыхкукбуковCMS, сервисы,приложения,базы данных,утилиты...

Configuration ManagementТерминология:Шаблоны (Templates)

● Файл со вставками

данных из аттрибутов

● Используется обычно

для конфигов

● Простой *erd файл

● Ruby as an embedded language

Configuration ManagementУправление данными:

Аттрибуты (Attributes)

● Многоуровневый хэш настроек

● Могут быть использованы в узлах, ролях, поваренных книгах,

окружениях

Пример:

ssh-cookbook использует 22 порт как основной, но в окружении

“production” мы переопределяем его на 2022

Configuration ManagementУправление данными:

Data bags

● Представляет из себя глобальное хранилище JSON данных

● Используется в рецептах и поиске

● Может быть зашифровано

Configuration ManagementМожно использовать для создания/настройки:

● Простых внутренних приложений

● Сложных многоуровневых и распределенных приложений

● Рабочих станций

● Hadoop кластеров

● Iaas, Paas инфраструктур

● Систем хранения данных

● Систем обработки данных

● и многое другое ...

Configuration ManagementПохожие инструменты:

● Puppet

http://puppetlabs.com/

● Cfengine

http://cfengine.com/

Configuration ManagementПерейдем в терминал?

Application

Deployment

Application DeploymentЧто нужно сделать, чтобы развернуть простое приложение?

1. скопировать (scp|ftp|...) ваше приложение на удаленный сервер(-ы)

2. перезапустить сервер(-ы) если надо

3. Профит!

4. Новый релиз? GOTO 1

5. Серверов много больше 1 ?

Application DeploymentА если подробнее?

мы закачивали все архивом, надо распаковать

… заменить текущую директорию или изменить настройки сервера

… а еще у нас базы надо обновить, накатить миграции

… ничего не забыл? … ах, да… оповестить всех надо же…

… когда что-то пошло не так - хватаемся за голову …

downtime растет, нервы портятся, количество седых волос увеличивается

Application DeploymentА если подробнее?

мы закачивали все архивом, надо распаковать

… заменить текущую директорию или изменить настройки сервера

… а еще у нас базы надо обновить, накатить миграции

… ничего не забыл? … ах, да… оповестить всех надо же…

… когда что-то пошло не так - хватаемся за голову …

downtime растет, нервы портятся, количество седых волос увеличивается

Application Deployment

http://www.capistranorb.com/

Application DeploymentЧто такое Capistrano?

● open source инструмент для запуска команд на одном/нескольких

серверах

● преимущественно для деплоя web приложений

● написан на Ruby и распространяется как ruby gem

● обычно используется сомвестно с Rails, но не ограничивается ими.

Application DeploymentЧто нам дает Capistrano?

● возможность писать скрипты вида“через ssh на нужной машине сделай это и это”

● у вас не будет магических скриптов, которые живут на той машине● возможность хранить вместе с проектом в системе контроля версий● автоматизировать крупные и сложные задачи● одновременно работать с несколькими серверами

… разделять их по ролям● тестировать перед деплоем● опять же повторяемость (вы новичок в команде, коллега заболел…)

Application DeploymentПодготовка окружения/приложения:

● Актуализируете ваше приложение в системе контроля версий● Уберите из публичного доступа пароли, ключи и остальные важные

данные● Инициализируйте Capistrano для вашего приложения

$ cd my-project $ cap install

● Задайте адреса серверов для определенных ролей в настройках

Application Deploymentconfig/deploy/staging.rb

Application Deploymentconfig/deploy/staging.rb

Application DeploymentПодготовка окружения/приложения:

● Актуализируете ваше приложение в системе контроля версий● Уберите из публичного доступа пароли, ключи и остальные важные

данные● Инициализируйте Capistrano для вашего приложения

$ cd my-project $ cap install

● Задайте адреса серверов для определенных ролей в настройках● Общая информация должна храниться в deploy.rb

Application Deploymentconfig/deploy.rb

Application Deploymentconfig/deploy.rb

Application Deployment

Flow:Deploy flow:

$> cap production deploy

Application Deployment

Flow:Rollback flow:

$> cap production deploy:rollback

Application DeploymentCapfile cap staging deploy cap staging deploy:rollback

Application Deployment

Application Deployment

Let's deploy!

Вопросы?