Docker в Badoo: 
от восторгов к внедрению 
Антон Турецкий 
@tyrchenok 
Илья Раудсепп 
@iraudsepp
Содержание 
• Восторг и ожидания 
• Подготовка инфраструктуры 
• Ключевые узлы Docker 
• Puppet: от прототипа до конвейра 
• Сборка образов Docker 
• Deploy сервиса с точки зрения эксплуатации 
• Docker: мониторинг (Илья Раудсепп) 
• “Грабли”: как без них? 
• Чего не хватает для счастья в Docker? 
• Заключение
Восторг и ожидания 
• Как всё круто в первом приближении 
• Очень хочется попробовать 
• С чего начать? 
• Ожидания 
• Реальность
Конcервативный SLES 
• Linux kernel version “3.8” or above != “3.0.101-0.40.1” 
• обновление util-linux, coreutils 
• обновление iptables, iproute2 
• Выбор “Storage Driver” 
• Device mapper + ext4 
• BTRFS 
• Изменение Partitioning Table
Docker Host
Docker Registry 
• Зачем он нужен? 
• Почему не DockerHub? 
• Немного подробностей
Puppet: от одного ко многим 
• +1 модуль: 
- ставим нужные пакеты (docker, kernel, e2fsprogs … ) 
- cgroup_enable=memory swapaccount=1 
- LVM changes, BTRFS 
• Docker: 
• base package, settings 
• init script (да, тут еще нет systemd) 
• вспомогательные скрипты
Сборка образов для Docker
Роль Puppet 
• Поддержка BUILD environment 
• Сборка образов и оповещение о результатах 
• Своевременный PUSH образа в Registry 
• Своевременный PULL образа на Docker Host 
• Поддержание чистоты и порядка на Docker Hosts 
• удаление ненужных образов/контейнеров 
• формирование команд для запуска контейнеров
“Плавный” перезапуск сервиса 
• Добавим балансировщик по вкусу 
• Используем key => value storage 
• confd: наполняем по 
шаблону 
• Не трогаем “внешнюю” сеть 
• не нужно трогать dns 
• не нужно трогать dhcp 
• …
Docker monitoring
Что хотели 
• Автоматический сбор метрик с нового контейнера/хоста с docker 
• Возможность гибко настраивать отображение получаемых метрик 
• Возможность просмотра статистики в “real time”
Что смотрели 
DataDogs 
Dockerana 
collectd + graphite 
Zabbix 
sFlow, Fluentd, Monit and etc 
https://www.google.ru/search?q=docker%20monitoring 
https://www.google.ru/search?q=docker%20statistics
Что смотрели 
DataDogs 
– отправляет данные в облако 
Dockerana 
collectd + graphite 
Zabbix
Что смотрели 
DataDogs 
Dockerana 
– необходимо перезапускать докер с -D 
– использует парсинг логов 
collectd + graphite 
Zabbix
Что смотрели 
DataDogs 
Dockerana 
collectd + graphite 
– не нашли готовых решений сбора статистики 
Zabbix
Что смотрели 
DataDogs 
Dockerana 
collectd + graphite 
Zabbix 
– нет возможно быстро и легко менять графики/дашборды
Что выбрали 
agent: cAdvisor (https://github.com/google/cadvisor) 
storage: Influxdb (https://github.com/influxdb/influxdb) 
draw: grafana (https://github.com/grafana/grafana)
Что выбрали 
Host OS 
Server 
Container A 
Container B 
cAdvisor 
Container 
Grafana 
Http/Https InfluxDB 
Host Container 
Cpu 䡄 䡄 
Mem 䡄 䡄 
Disk 
Network 䡄
Что выбрали 
Host OS 
Server 
Container A 
Container B 
cAdvisor 
Container 
Grafana 
Http/Https InfluxDB 
Host Container 
Cpu 䡄 䡄 
Mem 䡄 䡄 
Disk 䡄 䡄 
Network 䡄 䡄
“Грабли”: как без них? 
• NF conntrack 
• device mapper + ext4 as storage backend 
• VOLUME mapping
Чего не хватает для счастья? 
• Централизованный мониторинг Docker Hosts 
• Централизованного управления хостами/сервисами 
• Более тесной интеграции с 
• weave 
• Open VSwitch
Заключение 
• ”Уплотнили” количество сервисов в расчете на сервер 
• Построили избыточную карту сервисов 
• Построили систему сборки образов 
• Получили гарантию работы сервиса любой ранее работающей версии в 
любой момент времени

Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps Meetup

  • 1.
    Docker в Badoo: от восторгов к внедрению Антон Турецкий @tyrchenok Илья Раудсепп @iraudsepp
  • 2.
    Содержание • Восторги ожидания • Подготовка инфраструктуры • Ключевые узлы Docker • Puppet: от прототипа до конвейра • Сборка образов Docker • Deploy сервиса с точки зрения эксплуатации • Docker: мониторинг (Илья Раудсепп) • “Грабли”: как без них? • Чего не хватает для счастья в Docker? • Заключение
  • 3.
    Восторг и ожидания • Как всё круто в первом приближении • Очень хочется попробовать • С чего начать? • Ожидания • Реальность
  • 4.
    Конcервативный SLES •Linux kernel version “3.8” or above != “3.0.101-0.40.1” • обновление util-linux, coreutils • обновление iptables, iproute2 • Выбор “Storage Driver” • Device mapper + ext4 • BTRFS • Изменение Partitioning Table
  • 5.
  • 6.
    Docker Registry •Зачем он нужен? • Почему не DockerHub? • Немного подробностей
  • 7.
    Puppet: от одногоко многим • +1 модуль: - ставим нужные пакеты (docker, kernel, e2fsprogs … ) - cgroup_enable=memory swapaccount=1 - LVM changes, BTRFS • Docker: • base package, settings • init script (да, тут еще нет systemd) • вспомогательные скрипты
  • 8.
  • 9.
    Роль Puppet •Поддержка BUILD environment • Сборка образов и оповещение о результатах • Своевременный PUSH образа в Registry • Своевременный PULL образа на Docker Host • Поддержание чистоты и порядка на Docker Hosts • удаление ненужных образов/контейнеров • формирование команд для запуска контейнеров
  • 10.
    “Плавный” перезапуск сервиса • Добавим балансировщик по вкусу • Используем key => value storage • confd: наполняем по шаблону • Не трогаем “внешнюю” сеть • не нужно трогать dns • не нужно трогать dhcp • …
  • 11.
  • 12.
    Что хотели •Автоматический сбор метрик с нового контейнера/хоста с docker • Возможность гибко настраивать отображение получаемых метрик • Возможность просмотра статистики в “real time”
  • 13.
    Что смотрели DataDogs Dockerana collectd + graphite Zabbix sFlow, Fluentd, Monit and etc https://www.google.ru/search?q=docker%20monitoring https://www.google.ru/search?q=docker%20statistics
  • 14.
    Что смотрели DataDogs – отправляет данные в облако Dockerana collectd + graphite Zabbix
  • 15.
    Что смотрели DataDogs Dockerana – необходимо перезапускать докер с -D – использует парсинг логов collectd + graphite Zabbix
  • 16.
    Что смотрели DataDogs Dockerana collectd + graphite – не нашли готовых решений сбора статистики Zabbix
  • 17.
    Что смотрели DataDogs Dockerana collectd + graphite Zabbix – нет возможно быстро и легко менять графики/дашборды
  • 18.
    Что выбрали agent:cAdvisor (https://github.com/google/cadvisor) storage: Influxdb (https://github.com/influxdb/influxdb) draw: grafana (https://github.com/grafana/grafana)
  • 19.
    Что выбрали HostOS Server Container A Container B cAdvisor Container Grafana Http/Https InfluxDB Host Container Cpu 䡄 䡄 Mem 䡄 䡄 Disk Network 䡄
  • 20.
    Что выбрали HostOS Server Container A Container B cAdvisor Container Grafana Http/Https InfluxDB Host Container Cpu 䡄 䡄 Mem 䡄 䡄 Disk 䡄 䡄 Network 䡄 䡄
  • 24.
    “Грабли”: как безних? • NF conntrack • device mapper + ext4 as storage backend • VOLUME mapping
  • 25.
    Чего не хватаетдля счастья? • Централизованный мониторинг Docker Hosts • Централизованного управления хостами/сервисами • Более тесной интеграции с • weave • Open VSwitch
  • 26.
    Заключение • ”Уплотнили”количество сервисов в расчете на сервер • Построили избыточную карту сервисов • Построили систему сборки образов • Получили гарантию работы сервиса любой ранее работающей версии в любой момент времени