99

Click here to load reader

Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

  • Upload
    ontico

  • View
    1.837

  • Download
    5

Embed Size (px)

Citation preview

Page 1: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

Docker в работе: взгляд на использование в Badoo через годАнтон Турецкий

Page 2: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)
Page 3: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

Вопросы: год назад, а актуальны по сей день…

Page 4: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

Docker: WTF?

Page 5: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

ПредысторияDocker VS Puppet: Заменит ли Docker Puppet?

Page 6: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

ПредысторияVirtualization VS Containerization:Docker – еще одна виртуализация?

Page 7: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

ПредысторияDocker: silver bullet?

THERE WILL BE NO SILVER BULLET.RATHER IT WILL BE A COMBINATION OF TECHNOLOGIES.

Andrew Gould(c)

Page 8: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

ВопросDocker: нужен ли?

Page 9: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

#1: о наболевшем

Page 10: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

#1: Сервис -> Сервер

Page 11: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

#1: Миграция Сервиса

Page 12: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

#1: Миграция Docker

Page 13: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

#1: Миграция Docker

#1: Отвязать Application от OS

Page 14: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

ДЦ: подумай о железе!

Page 15: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

#2: capacity planning• + Место в стойке

Page 16: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

#2: capacity planning• + Место в стойке• + Порты на сетевом оборудовании

Page 17: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

#2: capacity planning• + Место в стойке• + Порты на сетевом оборудовании• + Экономия электроэнергии

Page 18: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

#2: capacity planning• + Место в стойке• + Порты на сетевом оборудовании• + Экономия электроэнергии• -/+ SPoF

Page 19: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

#3: единое окружение

Page 20: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

#4* $ cat ./DockerfileFROM dockerio.badoo.com/itops/sles_12_base:latest

COPY sle-12.puppet.repo /etc/zypp/repos.d/RUN zypper -q -n in puppetdbCOPY database.ini /etc/puppetlabs/puppetdb/conf.d/database.iniCOPY jetty.ini /etc/puppetlabs/puppetdb/conf.d/jetty.iniCOPY ssl/ /etc/puppetlabs/puppetdb/ssl/#Service start/stopCOPY run-puppetdb /etc/services.d/puppetserver/runCOPY finish-puppetdb /etc/services.d/puppetserver/finish

ENTRYPOINT ["/init"]

Page 21: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

Грабли

Page 22: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

Грабли: (r)?syslog(-ng)?syslog into container

Page 23: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

Грабли: (r)?syslog(-ng)?syslog into container• “One container – One Service”

Page 24: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

Грабли: (r)?syslog(-ng)?syslog into container• “One container – One Service”• Поддержка в работающем состоянии

Page 25: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

Грабли: (r)?syslog(-ng)?syslog into container• “One container – One Service”• Поддержка в работающем состоянии• Нет времени объяснять – нужно сделать!

Page 26: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

Грабли: (r)?syslog(-ng)?syslog into container• “One container – One Service”• Поддержка в работающем состоянии• Нет времени объяснять – нужно сделать!

Решение:docker run -v /dev/log:/dev/log

Page 27: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

Грабли: (r)?syslog(-ng)?docker run -v /dev/log:/dev/log• УРА!!! Всё работает, сообщения уходят!

Page 28: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

Грабли: (r)?syslog(-ng)?docker run -v /dev/log:/dev/log• УРА!!! Всё работает, сообщения уходят!• … до первого изменения/перезапуска

syslog на хост-системе…

Page 29: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

Грабли: (r)?syslog(-ng)?docker run -v /dev/log:/dev/log• УРА!!! Всё работает, сообщения уходят!• … до первого изменения/перезапуска

syslog на хост-системе…

Решение:syslog into container

Page 30: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

Грабли: mountsПрокинуть “что-то” с хост ОС

Page 31: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

Грабли: mountsПрокинуть “что-то” с хост ОС• /proc/mounts в контейнере

Page 32: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

Грабли: mountsПрокинуть “что-то” с хост ОС• /proc/mounts в контейнере• umount /dev/something (хост ОС)

Page 33: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

Грабли: mountsПрокинуть “что-то” с хост ОС• /proc/mounts в контейнере• umount /dev/something (хост ОС)• umount /dev/something (container)

Page 34: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

Грабли: mountsПрокинуть “что-то” с хост ОС• /proc/mounts в контейнере• umount /dev/something (хост ОС)• umount /dev/something (container)• container restart …

Page 35: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

Грабли: mountsРешение:• docker run --privileged

Page 36: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

Грабли: mountsРешение:• docker run --privileged• 100 раз подумать: так ли необходимо?

Page 37: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

Грабли: mountsРешение:• docker run --privileged• 100 раз подумать: так ли необходимо?• избегать использование

“динамических точек монтирования”

Page 38: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

Грабли: NATiptables, nf_conntrack

Page 39: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

Грабли: NATКак можно решать:• Увеличить таблицу conntrack

Page 40: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

Грабли: NATКак можно решать:• Увеличить таблицу conntrack• Увеличить hashsize ~ conntrack / 8

Page 41: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

Грабли: NATКак можно решать:• Увеличить таблицу conntrack• Увеличить hashsize ~ conntrack / 8• Вспомнить про

conntrack_generic_timeout = 600

Page 42: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

Грабли: NATКак можно решать:• Увеличить таблицу conntrack• Увеличить hashsize ~ conntrack / 8• Вспомнить про

conntrack_generic_timeout = 600• Ждать когда “бомбанёт”

Page 43: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

Грабли: NATРешение:• Делать свой bridge, Open vSwitch, Weave etc

Page 44: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

Грабли: NATРешение:• Делать свой bridge, Open vSwitch, Weave etc• Использовать хост ОС

docker run --net=host

без использования conntrack

Page 45: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

Грабли: Storage DriverAuFS

Device Mapper (thinp)

BTRFS

и прочие вкусности и сладости…

Page 46: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

Грабли: BTRFS• root of docker MUST be on a BTRFS

Page 47: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

Грабли: BTRFS• root of docker MUST be on a BTRFS• Запись на диск сразу не идет, сначала – в журнал

(Performance ~ native / 2)

Page 48: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

Грабли: BTRFS• root of docker MUST be on a BTRFS• Запись на диск сразу не идет, сначала – в журнал

(Performance ~ native / 2)• “No space left on device”

# btrfs fi show /var/lib/docker# btrfs fi balance start /var/lib/docker

Page 49: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

Грабли: BTRFS

BTRFS – это то немногое, что действительно нормально работает

Page 50: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

Грабли: Storage DriverРешение: OverlayFS

Page 51: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

Грабли: Storage DriverРешение: OverlayFS

• Hardlink на одинаковые файлы

Page 52: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

Грабли: Storage DriverРешение: OverlayFS

• Hardlink на одинаковые файлы• Performance: RW ~ Native Speed

Page 53: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

Грабли: Storage DriverРешение: OverlayFS

• Hardlink на одинаковые файлы• Performance: RW ~ Native Speed• Space Usage – больше не загадка!

Page 54: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

Грабли: Misc• Больше ОДНОГО сервиса в контейнере

Page 55: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

Грабли: Misc• Больше ОДНОГО сервиса в контейнере

- свой ENTRYPOINT

Page 56: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

Грабли: Misc• Больше ОДНОГО сервиса в контейнере

- свой ENTRYPOINTРЕШЕНИЕ: S6 http://skarnet.org/software/s6/

Page 57: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

Грабли: Misc• Больше ОДНОГО сервиса в контейнере

- свой ENTRYPOINTРЕШЕНИЕ: S6 http://skarnet.org/software/s6/

• несколько FROM в одном Dockerfile“FROM can appear multiple times within a single Dockerfile"

Page 58: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

Грабли: Misc• Больше ОДНОГО сервиса в контейнере

- свой ENTRYPOINTРЕШЕНИЕ: S6 http://skarnet.org/software/s6/

• несколько FROM в одном Dockerfile“FROM can appear multiple times within a single Dockerfile”

• docker exec Version < 1.8

Page 59: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

Важный совет…не забывать искать свою проблему тут:

Changelog

Issues

GitHub

Page 60: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

Сервис в контейнере

Page 61: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

Docker Base Image

• Обновления (Bug fixes, Security fixes, Patches etc)

Page 62: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

Docker Base Image

• Обновления (Bug fixes, Security fixes, Patches etc)

docker run -it --rm sles_12_base:latest sh -c 'zypper lu -a'

Page 63: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

Docker Base Image

• Обновления (Bug fixes, Security fixes, Patches etc)docker run -it --rm sles_12_base:latest sh -c 'zypper lu -a’

• “Требуется внимание оператора” => Jira Task

Page 64: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

Docker Base Image

• Обновления (Bug fixes, Security fixes, Patches etc)docker run -it --rm sles_12_base:latest sh -c 'zypper lu -a’

• “Требуется внимание оператора” => Jira Task• Обновление базового образа

Page 65: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

Docker Base Image

• Обновления (Bug fixes, Security fixes, Patches etc)docker run -it --rm sles_12_base:latest sh -c 'zypper lu -a’

• “Требуется внимание оператора” => Jira Task• Обновление базового образа(+контейнеры)

Page 66: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

Docker Images

• Обновления (Bug fixes, Security fixes, Patches etc)docker run -it --rm sles_12_base:latest sh -c 'zypper lu -a’

• “Требуется внимание оператора” => Jira Task• Обновление базового образа(+контейнеры)• Следить за “свежестью пакетов” перед выкладкой

сервиса/образа (RPM based)

Page 67: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

docker_build

Page 68: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

docker_build• Сгенерировать структуру директорий, конфиги

Page 69: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

docker_build• Сгенерировать структуру директорий, конфиги• Сгенерировать инструкцию(Dockerfile_source)

Page 70: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

docker_build• Сгенерировать структуру директорий, конфиги• Сгенерировать инструкцию(Dockerfile_source)• Доставить исполняемые файлы

Page 71: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

docker_build• Сгенерировать структуру директорий, конфиги• Сгенерировать инструкцию(Dockerfile_source)• Доставить исполняемые файлы• Выполнить сборку

Page 72: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

docker_build• Сгенерировать структуру директорий, конфиги• Сгенерировать инструкцию(Dockerfile_source)• Доставить исполняемые файлы• Выполнить сборку• Отправить результат в Registry(y/n)

Page 73: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

docker_build• Сгенерировать структуру директорий, конфиги• Сгенерировать инструкцию(Dockerfile_source)• Доставить исполняемые файлы• Выполнить сборку• Отправить результат в Registry(y/n)• Сообщить о результате

* Обязательно: работать в режиме cli

Page 74: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

docker_build

Page 75: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

Мониторинг

Page 76: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

Мониторинг: контейнер• Docker CLI внутри

Page 77: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

Мониторинг: контейнер• Docker CLI внутри• Снимаем то же, что и docker stats: CPU/MEM

Page 78: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

Мониторинг: контейнер• Docker CLI внутри• Снимаем то же, что и docker stats: CPU/MEM• SAR:

$ sar -A -s %s 60 1 -f /var/log/sa/sa%s

Page 79: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

Мониторинг: контейнер• Docker CLI внутри• Снимаем то же, что и docker stats: CPU/MEM• SAR:

$ sar -A -s %s 60 1 -f /var/log/sa/sa%s• Отсылаем всё в Graphite

Page 80: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

Мониторинг: контейнер• Docker CLI внутри• Снимаем то же, что и docker stats: CPU/MEM• SAR:

$ sar -A -s %s 60 1 -f /var/log/sa/sa%s• Отсылаем всё в Graphite• Мониторим контейнер и его статус Zabbix’ом

Page 81: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

Grafana: Host, Mem

Page 82: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

Grafana: Host, CPU

Page 83: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

Grafana: Host, Net

Page 84: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

Grafana: Container, Mem

Page 85: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

Grafana: Container, CPU

Page 86: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

baDocker: webUI

Page 87: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

baDocker: Требования• Clientless

Page 88: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

baDocker: Требования• Clientless• Управление OpenRegistry (v1, v2)

Page 89: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

baDocker: Требования• Clientless• Управление OpenRegistry (v1, v2)• Информация о

- хостах- контейнерах- сервисах, версиях

Page 90: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

baDocker: Требования• Clientless• Управление OpenRegistry (v1, v2)• Информация о

- хостах- контейнерах- сервисах, версиях

• Планировщик заданий

Page 91: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

baDocker: Требования• Clientless• Управление OpenRegistry (v1, v2)• Информация о

- хостах- контейнерах- сервисах, версиях

• Планировщик заданий• Dashboard

Page 92: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

baDocker: Hosts Summary

Page 93: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

baDocker: Host Details

Page 94: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

baDocker: Terminal

Page 95: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

baDocker: Service

Page 96: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

baDocker: Service HowTo

Page 97: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

Postmortem Заключение• Искать свой подход – не наступать на наши грабли

Page 98: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

Postmortem Заключение• Искать свой подход – не наступать на наши грабли• Велосипед – это отлично, если колеса круглые

Page 99: Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон (Badoo)

Спасибо

Антон Турецкий[email protected]

@tyrchenok@BadooDev

http://habrahabr.ru/company/badoo/

Вопросы?