70
Docker & Badoo: никогда не останавливайся на достигнутом Антон Турецкий Системный инженер, Badoo @tyrchenok

Антон Турецкий

Embed Size (px)

Citation preview

Docker & Badoo: никогда не останавливайся на

достигнутом

Антон ТурецкийСистемный инженер, Badoo

@tyrchenok

Citius, altius, fortius!

• 300 000 000 пользователей• ~ 3000 серверов• 200 из 250 Docker хостов• 1046 запущенных

контейнеров

Docker: Why..?

Single Environment

Docker: Why..?

Single EnvironmentMonolithic

Docker: Why..?

Single EnvironmentMonolithicRollback guarantee

Docker: Why..?

Single EnvironmentMonolithicRollback guaranteeResource utilisation

Docker main thing

Docker storage driver

AuFSOut of kernelShare memory

Docker storage driver

AuFSOut of kernelShare memory

DevicemapperIn mainline kernelKnows everyone

Docker storage driver

AuFSOut of kernelShare memory

DevicemapperIn mainline kernelKnows everyone

BTRFSIn mainline kernel

Docker storage driver

AuFSOut of kernelShare memory

DevicemapperIn mainline kernelKnows everyone

BTRFSIn mainline kernel

ZFSKernel moduleStability

Docker storage driver

AuFSOut of kernelShare memory

DevicemapperIn mainline kernelKnows everyone

BTRFSIn mainline kernel

ZFSKernel moduleStability

OverlayFSKernel >= 3.18Fast

Device Mapper(theory)

• CoW on block level

Device Mapper(theory)

• CoW on block level• Each container/image gets its own block device

Device Mapper(theory)

• CoW on block level• Each container/image gets its own block device• Snapshot at any given time

Device Mapper(in practice)

• Mountpoint is only mounted when the container is running

Device Mapper(in practice)

• Mountpoint is only mounted when the container is running

• The data is stored in two files: data & metadata

Device Mapper(in practice)

• Mountpoint is only mounted when the container is running

• The data is stored in two files: data & metadata• Docker puts data and metadata on a loop device backed by a

sparse file

Device Mapper(in practice)

• Mountpoint is only mounted when the container is running

• The data is stored in two files: data & metadata• Docker puts data and metadata on a loop device backed

by a sparse file

Example about performance

Device Mapper(на деле)

Device Mapper(на деле)

• Развалилось довольно быстро

Device Mapper(на деле)

• Развалилось довольно быстро• Идём дальше!

BTRFS

BTRFS(theory)

• CoW at the filesystem level

BTRFS(theory)

• CoW at the filesystem level• Create subvolume like mkdir :)

BTRFS(theory)

• CoW at the filesystem level• Create subvolume like mkdir :)• Docker root must be BTRFS filesystem

BTRFS(theory)

• CoW at the filesystem level• Create subvolume like mkdir :)• Docker root must be BTRFS filesystem• Snapshot at any given time

BTRFS(in practice)

• Mountpoint should be present even if the container is not running

BTRFS(in practice)

• Mountpoint should be present even if the container is not running

• Performance ~ native/2 (data goes to the journal first)

BTRFS(на деле)

Неподготовленному пользователю крайне не рекомендуется трогать

btrfs tools

“Наши руки не для скуки!”

BTRFS(на деле)

• Единственное нормально работающее (~ 1.5 года назад)

BTRFS(на деле)

• Единственное нормально работающее

• Мы живём с этим уже 2+ года!

OverlayFS(in practice)

• Performance ~ native

OverlayFS(in practice)

• Performance ~ native• Use the same EXT partition

OverlayFS(in practice)

• Performance ~ native• Use the same EXT partition• Native tools for manage

OverlayFS(keep in mind)

• high inode usage

• module called “overlay”

Грабли: docker pull

Грабли: docker pull(результат)

• Падение docker демона

Грабли: docker pull(результат)

• Падение docker демона

• “Радость”Operations Team

Грабли: docker pull(результат)

Лучший патч, что я видел!

Misc

EXT4 hardlink limit

65 534

Error response from daemon: could not find image: no such id: b33b714e8dd29b3d9d5ffde6568fc2e90b86ab9fe5aaea33fb057487df

Что мы еще сделали?

Monitoring container, который шлёт статистику в Graphite

Что мы еще сделали?

docker_build

для сборки образов в (полу-)автоматическом режиме

Что мы еще сделали?

Docker для сборки RPM (мы знаем про OBS, да)

Что мы еще сделали?

Docker для сборки RPM (мы знаем про OBS, да)

- запуск “свежего” образа- установка зависимостей- сборка по spec файлу- получили пакет

Что мы еще сделали?

**baDocker – оркестрация (в вечной разработке)

baDockerЧто у нас есть/было? Что хотели?

baDockerЧто у нас есть/было?

• Сервисы и их типы• Версии• Серверы

Что хотели?

baDockerЧто у нас есть/было?

• Сервисы и их типы• Версии• Серверы

Что хотели?

Стоп/СтартОбновлениеВсякое разное и WebUI

• Client Less

• Client Less• Get/Set data

viadocker API

• Client Less• Get/Set data

viadocker API

• Монстр!

baDocker #2

• Что изменилось?• Почему так?

baDocker #2

• Docker socket: упрощаем взаимодействие

baDocker #2

• Docker socket: упрощаем взаимодействие

• Puppet Facts: они уже есть

baDocker #2

• Docker socket: упрощаем взаимодействие

• Puppet Facts: они уже есть

• Как это теперь работает?

Зачем всё это было?

• Видим цель – идём к ней!

Зачем всё это было?

• Видим цель – идём к ней!• Чужой опыт – это полезно!

Зачем всё это было?

• Видим цель – идём к ней!• Чужой опыт – это полезно!• Можешь лучше – сделай!

Вопросы?Антон Турецкий

[email protected]@tyrchenok@BadooDev

http://habrahabr.ru/company/badoo/https://tech.badoo.com/

предыдущие доклады про Docker: https://goo.gl/KcIhwG