Application deployment & configuration management
-
Upload
- -
Category
Technology
-
view
601 -
download
4
description
Transcript of Application deployment & configuration management
Application Deployment
& Configuration Management
Александр Кириллов, UNDEV@saratovsource, [email protected]
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!
Вопросы?