Docker & Puppet: 
как их скрестить 
и надо ли вам это? 
Антон Турецкий 
Системный инженер, Badoo
Содержание 
• Предыстория6 
• Подготовка инфраструктуры6 
• Ключевые узлы Docker6 
• Puppet: от прототипа до конвейра6 
• Система сборки образов Docker6 
• Deploy сервиса с точки зрения эксплуатации6 
• “Грабли”, на которые наступили6 
• Чего не хватает для счастья в Docker?6 
• Заключение
Предыстория 
• Docker: что это такое?6 
• С какой стороны подойти?6 
• Что мы хотели получить?
Предыстория 
• Docker: что это такое?6 
• С какой стороны подойти?6 
• Что мы хотели получить?6 
6 
6 
Необходимое и достаточное окружение для 
запуска и работы сервиса
Предыстория 
• Docker: что это такое?6 
• С какой стороны подойти?6 
• Что мы хотели получить?6 
• Необходимое и достаточное окружение 
для запуска и работы сервиса6 
6 
Быстрый и простой deployment? 
6 
6
Предыстория 
• Docker: что это такое?6 
• С какой стороны подойти?6 
• Что мы хотели получить?6 
• Необходимое и достаточное окружение 
для запуска и работы сервиса6 
• Быстрый и простой deployment6 
6 
Резервирование? 
6 
6
Предыстория 
• Docker: что это такое?6 
• С какой стороны подойти?6 
• Что мы хотели получить?6 
• Необходимое и достаточное окружение 
для запуска и работы сервиса6 
• Быстрый и простой deployment6 
• Резервирование6 
6 
Уменьшение времени деградации 
сервиса при обновлении(перезапуске)?
Предыстория 
• Docker: что это такое?6 
• С какой стороны подойти?6 
• Что мы хотели получить?6 
• Необходимое и достаточное окружение 
для запуска и работы сервиса6 
• Быстрый и простой deployment6 
• Резервирование6 
• Уменьшение времени деградации сервиса при 
обновлении(перезапуске)6 
Использовать оборудование 
“на полную катушку”
Подготовка инфраструктуры 
• Linux kernel version 3.8 or above != 3.0.101-0.40.16 
• обновление util-linux, coreutils6 
• обновление iptables, iproute26 
• Выбор “Storage Driver”6 
• Device mapper + ext46 
• BTRFS6 
• Близкое знакомство с cgroups6 
• Изменение Partitioning Table6 
6 
P.S.: Хорошо, что Puppet придумали раньше!
Ключевые узлы Docker
А если сервер не один!? 
• Добавляем репозиторий, ставим нужные пакеты6 
• Меняем разбивку LVM, говорим: “Привет BTRFS”6 
• cgroup_enable=memory swapaccount=16 
• Docker:6 
• base package, settings6 
• init script (да, тут еще нет systemd)6 
• вспомогательные скрипты
Сборка образов для Docker
Роль Puppet 
• Поддержка BUILD environment6 
• Сборка образов и оповещение о результатах6 
• Своевременный PUSH образа в Registry6 
• Своевременный PULL образа на Docker Host6 
• Поддержание чистоты и порядка на Docker Hosts6 
• удаление не нужных образов/контейнеров6 
• формирование команд для запуска контейнеров
DownTime: перезапуск сервиса
DownTime: перезапуск сервиса
DownTime: перезапуск сервиса 
• Добавим балансировщик по вкусу6 
• Используем key => value storage6 
• confd: наполняем по 
шаблону6 
• Не трогаем “внешнюю” сеть6 
• не нужно трогать dns6 
• не нужно трогать dhcp6 
• …
“Грабли”, на которые наступили 
• NF conntrack? 
• nf_conntrack: table full, dropping packet6 
RESOLUTION:6
“Грабли”, на которые наступили 
• NF conntrack? 
• nf_conntrack: table full, dropping packet6 
RESOLUTION:6 
1. docker run --net=host6 
2. iptables rules:6 
-t raw -I PREROUTING -j CT --notrack6 
-t raw -I OUTPUT -j CT --notrack
“Грабли”, на которые наступили 
• NF conntrack6 
• device mapper + ext4 as storage backend? 
RESOLUTION: 6 
6 
6
“Грабли”, на которые наступили 
• NF conntrack6 
• device mapper + ext4 as storage backend? 
RESOLUTION: 6 
6 
6 
BTRFS as storage driver
“Грабли”, на которые наступили 
• NF conntrack6 
• device mapper + ext4 as storage backend6 
• VOLUME mapping
Чего не хватает для счастья? 
• Централизованный мониторинг Docker Hosts6 
• Cadvisor + доработки6 
• Централизованного управления хостами/ 
сервисами6 
• внимание, shipyard!6 
• Более тесной интеграции с 6 
• weave6 
• Open VSwitch
Заключение 
• ”Уплотнили” количество сервисов в расчете на сервер6 
• Построили избыточную карту сервисов6 
• Построили систему сборки образов6 
• Получили гарантию работы сервиса любой ранее работающей версии в 
любой момент времени6 
• Не отстали от нового тренда
Спасибо
Useful Links 
#codefest2014 #Puppet : goo.gl/dG0hJD6 
#hl2012 #Puppet : http://goo.gl/5FNwuD 
Вопросы? 
Антон Турецкий 
a.turetsky@corp.badoo.com6 
@tyrchenok6 
@BadooDev 6 
http://habrahabr.ru/company/badoo/

Docker & Puppet - как их скрестить и надо ли вам это, Антон Турецкий (Badoo)

  • 1.
    Docker & Puppet: как их скрестить и надо ли вам это? Антон Турецкий Системный инженер, Badoo
  • 2.
    Содержание • Предыстория6 • Подготовка инфраструктуры6 • Ключевые узлы Docker6 • Puppet: от прототипа до конвейра6 • Система сборки образов Docker6 • Deploy сервиса с точки зрения эксплуатации6 • “Грабли”, на которые наступили6 • Чего не хватает для счастья в Docker?6 • Заключение
  • 3.
    Предыстория • Docker:что это такое?6 • С какой стороны подойти?6 • Что мы хотели получить?
  • 4.
    Предыстория • Docker:что это такое?6 • С какой стороны подойти?6 • Что мы хотели получить?6 6 6 Необходимое и достаточное окружение для запуска и работы сервиса
  • 5.
    Предыстория • Docker:что это такое?6 • С какой стороны подойти?6 • Что мы хотели получить?6 • Необходимое и достаточное окружение для запуска и работы сервиса6 6 Быстрый и простой deployment? 6 6
  • 6.
    Предыстория • Docker:что это такое?6 • С какой стороны подойти?6 • Что мы хотели получить?6 • Необходимое и достаточное окружение для запуска и работы сервиса6 • Быстрый и простой deployment6 6 Резервирование? 6 6
  • 7.
    Предыстория • Docker:что это такое?6 • С какой стороны подойти?6 • Что мы хотели получить?6 • Необходимое и достаточное окружение для запуска и работы сервиса6 • Быстрый и простой deployment6 • Резервирование6 6 Уменьшение времени деградации сервиса при обновлении(перезапуске)?
  • 8.
    Предыстория • Docker:что это такое?6 • С какой стороны подойти?6 • Что мы хотели получить?6 • Необходимое и достаточное окружение для запуска и работы сервиса6 • Быстрый и простой deployment6 • Резервирование6 • Уменьшение времени деградации сервиса при обновлении(перезапуске)6 Использовать оборудование “на полную катушку”
  • 9.
    Подготовка инфраструктуры •Linux kernel version 3.8 or above != 3.0.101-0.40.16 • обновление util-linux, coreutils6 • обновление iptables, iproute26 • Выбор “Storage Driver”6 • Device mapper + ext46 • BTRFS6 • Близкое знакомство с cgroups6 • Изменение Partitioning Table6 6 P.S.: Хорошо, что Puppet придумали раньше!
  • 10.
  • 11.
    А если серверне один!? • Добавляем репозиторий, ставим нужные пакеты6 • Меняем разбивку LVM, говорим: “Привет BTRFS”6 • cgroup_enable=memory swapaccount=16 • Docker:6 • base package, settings6 • init script (да, тут еще нет systemd)6 • вспомогательные скрипты
  • 12.
  • 13.
    Роль Puppet •Поддержка BUILD environment6 • Сборка образов и оповещение о результатах6 • Своевременный PUSH образа в Registry6 • Своевременный PULL образа на Docker Host6 • Поддержание чистоты и порядка на Docker Hosts6 • удаление не нужных образов/контейнеров6 • формирование команд для запуска контейнеров
  • 14.
  • 15.
  • 16.
    DownTime: перезапуск сервиса • Добавим балансировщик по вкусу6 • Используем key => value storage6 • confd: наполняем по шаблону6 • Не трогаем “внешнюю” сеть6 • не нужно трогать dns6 • не нужно трогать dhcp6 • …
  • 17.
    “Грабли”, на которыенаступили • NF conntrack? • nf_conntrack: table full, dropping packet6 RESOLUTION:6
  • 18.
    “Грабли”, на которыенаступили • NF conntrack? • nf_conntrack: table full, dropping packet6 RESOLUTION:6 1. docker run --net=host6 2. iptables rules:6 -t raw -I PREROUTING -j CT --notrack6 -t raw -I OUTPUT -j CT --notrack
  • 19.
    “Грабли”, на которыенаступили • NF conntrack6 • device mapper + ext4 as storage backend? RESOLUTION: 6 6 6
  • 20.
    “Грабли”, на которыенаступили • NF conntrack6 • device mapper + ext4 as storage backend? RESOLUTION: 6 6 6 BTRFS as storage driver
  • 21.
    “Грабли”, на которыенаступили • NF conntrack6 • device mapper + ext4 as storage backend6 • VOLUME mapping
  • 22.
    Чего не хватаетдля счастья? • Централизованный мониторинг Docker Hosts6 • Cadvisor + доработки6 • Централизованного управления хостами/ сервисами6 • внимание, shipyard!6 • Более тесной интеграции с 6 • weave6 • Open VSwitch
  • 23.
    Заключение • ”Уплотнили”количество сервисов в расчете на сервер6 • Построили избыточную карту сервисов6 • Построили систему сборки образов6 • Получили гарантию работы сервиса любой ранее работающей версии в любой момент времени6 • Не отстали от нового тренда
  • 24.
  • 25.
    Useful Links #codefest2014#Puppet : goo.gl/dG0hJD6 #hl2012 #Puppet : http://goo.gl/5FNwuD Вопросы? Антон Турецкий a.turetsky@corp.badoo.com6 @tyrchenok6 @BadooDev 6 http://habrahabr.ru/company/badoo/