Application deployment & configuration management

43
Application Deployment & Configuration Management Александр Кириллов, UNDEV @saratovsource, [email protected]

description

 

Transcript of Application deployment & configuration management

Page 1: Application deployment & configuration management

Application Deployment

& Configuration Management

Александр Кириллов, UNDEV@saratovsource, [email protected]

Page 2: Application deployment & configuration management

Application Deployment(capistrano)

& Configuration Management

(chef)

Page 3: Application deployment & configuration management

Configuration Management

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

Page 4: Application deployment & configuration management

Configuration ManagementBad-bad story...

Page 5: Application deployment & configuration management

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

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

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

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

Page 6: Application deployment & configuration management

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

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

Page 7: Application deployment & configuration management

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

Page 8: Application deployment & configuration management

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

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

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

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

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

Page 9: Application deployment & configuration management

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

Page 10: Application deployment & configuration management

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

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

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

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

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

Page 11: Application deployment & configuration management

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

Ресурсом (Resource)

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

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

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

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

● Ruby DSL(Domain Specific Language)

Page 12: Application deployment & configuration management

Configuration Management

Chef Chef-Solo

Page 13: Application deployment & configuration management

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

Page 14: Application deployment & configuration management

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

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

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

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

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

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

Page 15: Application deployment & configuration management

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

Page 16: Application deployment & configuration management

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

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

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

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

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

Page 17: Application deployment & configuration management

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

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

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

Page 18: Application deployment & configuration management

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

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

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

Page 19: Application deployment & configuration management

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

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

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

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

для конфигов

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

● Ruby as an embedded language

Page 20: Application deployment & configuration management

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

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

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

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

окружениях

Пример:

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

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

Page 21: Application deployment & configuration management

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

Data bags

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

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

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

Page 22: Application deployment & configuration management

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

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

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

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

● Hadoop кластеров

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

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

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

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

Page 23: Application deployment & configuration management

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

● Puppet

http://puppetlabs.com/

● Cfengine

http://cfengine.com/

Page 24: Application deployment & configuration management

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

Page 25: Application deployment & configuration management

Application

Deployment

Page 26: Application deployment & configuration management

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

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

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

3. Профит!

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

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

Page 27: Application deployment & configuration management

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

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

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

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

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

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

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

Page 28: Application deployment & configuration management

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

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

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

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

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

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

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

Page 29: Application deployment & configuration management

Application Deployment

http://www.capistranorb.com/

Page 30: Application deployment & configuration management

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

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

серверах

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

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

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

Page 31: Application deployment & configuration management

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

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

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

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

Page 32: Application deployment & configuration management

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

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

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

$ cd my-project $ cap install

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

Page 33: Application deployment & configuration management

Application Deploymentconfig/deploy/staging.rb

Page 34: Application deployment & configuration management

Application Deploymentconfig/deploy/staging.rb

Page 35: Application deployment & configuration management

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

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

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

$ cd my-project $ cap install

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

Page 36: Application deployment & configuration management

Application Deploymentconfig/deploy.rb

Page 37: Application deployment & configuration management

Application Deploymentconfig/deploy.rb

Page 38: Application deployment & configuration management

Application Deployment

Flow:Deploy flow:

$> cap production deploy

Page 39: Application deployment & configuration management

Application Deployment

Flow:Rollback flow:

$> cap production deploy:rollback

Page 40: Application deployment & configuration management

Application DeploymentCapfile cap staging deploy cap staging deploy:rollback

Page 41: Application deployment & configuration management

Application Deployment

Page 42: Application deployment & configuration management

Application Deployment

Let's deploy!

Page 43: Application deployment & configuration management

Вопросы?