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

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

Apr 12, 2017

Download

Software

CodeFest
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Антон Турецкий

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

достигнутом

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

@tyrchenok

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

Citius, altius, fortius!

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

контейнеров

Page 3: Антон Турецкий
Page 4: Антон Турецкий

Docker: Why..?

Single Environment

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

Docker: Why..?

Single EnvironmentMonolithic

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

Docker: Why..?

Single EnvironmentMonolithicRollback guarantee

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

Docker: Why..?

Single EnvironmentMonolithicRollback guaranteeResource utilisation

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

Docker main thing

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

Docker storage driver

AuFSOut of kernelShare memory

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

Docker storage driver

AuFSOut of kernelShare memory

DevicemapperIn mainline kernelKnows everyone

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

Docker storage driver

AuFSOut of kernelShare memory

DevicemapperIn mainline kernelKnows everyone

BTRFSIn mainline kernel

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

Docker storage driver

AuFSOut of kernelShare memory

DevicemapperIn mainline kernelKnows everyone

BTRFSIn mainline kernel

ZFSKernel moduleStability

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

Docker storage driver

AuFSOut of kernelShare memory

DevicemapperIn mainline kernelKnows everyone

BTRFSIn mainline kernel

ZFSKernel moduleStability

OverlayFSKernel >= 3.18Fast

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

Device Mapper(theory)

• CoW on block level

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

Device Mapper(theory)

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

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

Device Mapper(theory)

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

Page 17: Антон Турецкий
Page 18: Антон Турецкий

Device Mapper(in practice)

• Mountpoint is only mounted when the container is running

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

Device Mapper(in practice)

• Mountpoint is only mounted when the container is running

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

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

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

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

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

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

Device Mapper(на деле)

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

Device Mapper(на деле)

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

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

Device Mapper(на деле)

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

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

BTRFS

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

BTRFS(theory)

• CoW at the filesystem level

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

BTRFS(theory)

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

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

BTRFS(theory)

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

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

BTRFS(theory)

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

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

BTRFS(in practice)

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

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

BTRFS(in practice)

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

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

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

BTRFS(на деле)

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

btrfs tools

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

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

BTRFS(на деле)

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

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

BTRFS(на деле)

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

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

Page 35: Антон Турецкий
Page 36: Антон Турецкий

OverlayFS(in practice)

• Performance ~ native

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

OverlayFS(in practice)

• Performance ~ native• Use the same EXT partition

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

OverlayFS(in practice)

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

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

OverlayFS(keep in mind)

• high inode usage

• module called “overlay”

Page 40: Антон Турецкий
Page 41: Антон Турецкий

Грабли: docker pull

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

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

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

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

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

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

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

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

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

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

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

Misc

EXT4 hardlink limit

65 534

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

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

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

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

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

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

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

docker_build

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Что хотели?

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

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

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

Что хотели?

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

Page 55: Антон Турецкий
Page 56: Антон Турецкий

• Client Less

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

• Client Less• Get/Set data

viadocker API

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

• Client Less• Get/Set data

viadocker API

• Монстр!

Page 59: Антон Турецкий
Page 60: Антон Турецкий
Page 61: Антон Турецкий
Page 62: Антон Турецкий

baDocker #2

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

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

baDocker #2

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

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

baDocker #2

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

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

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

baDocker #2

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

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

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

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

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

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

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

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

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

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

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

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

Page 69: Антон Турецкий
Page 70: Антон Турецкий

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

[email protected]@tyrchenok@BadooDev

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

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