docker & badoo: никогда не останавливайся на достигнутом

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

Upload: anton-turetsky

Post on 13-Apr-2017

161 views

Category:

Software


2 download

TRANSCRIPT

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

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

достигнутом

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

@tyrchenok

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

Citius, altius, fortius!

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

контейнеров

Page 3: Docker & Badoo: никогда не останавливайся на достигнутом
Page 4: Docker & Badoo: никогда не останавливайся на достигнутом

Docker: Why..?

Single Environment

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

Docker: Why..?

Single EnvironmentMonolithic

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

Docker: Why..?

Single EnvironmentMonolithicRollback guarantee

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

Docker: Why..?

Single EnvironmentMonolithicRollback guaranteeResource utilisation

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

Docker main thing

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

Docker storage driver

AuFSOut of kernelShare memory

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

Docker storage driver

AuFSOut of kernelShare memory

DevicemapperIn mainline kernelKnows everyone

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

Docker storage driver

AuFSOut of kernelShare memory

DevicemapperIn mainline kernelKnows everyone

BTRFSIn mainline kernel

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

Docker storage driver

AuFSOut of kernelShare memory

DevicemapperIn mainline kernelKnows everyone

BTRFSIn mainline kernel

ZFSKernel moduleStability

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

Docker storage driver

AuFSOut of kernelShare memory

DevicemapperIn mainline kernelKnows everyone

BTRFSIn mainline kernel

ZFSKernel moduleStability

OverlayFSKernel >= 3.18Fast

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

Device Mapper(theory)

• CoW on block level

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

Device Mapper(theory)

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

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

Device Mapper(theory)

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

Page 17: Docker & Badoo: никогда не останавливайся на достигнутом
Page 18: Docker & Badoo: никогда не останавливайся на достигнутом

Device Mapper(in practice)

• Mountpoint is only mounted when the container is running

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

Device Mapper(in practice)

• Mountpoint is only mounted when the container is running

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

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

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: Docker & Badoo: никогда не останавливайся на достигнутом

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: Docker & Badoo: никогда не останавливайся на достигнутом

Device Mapper(на деле)

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

Device Mapper(на деле)

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

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

Device Mapper(на деле)

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

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

BTRFS

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

BTRFS(theory)

• CoW at the filesystem level

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

BTRFS(theory)

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

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

BTRFS(theory)

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

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

BTRFS(theory)

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

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

BTRFS(in practice)

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

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

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: Docker & Badoo: никогда не останавливайся на достигнутом

BTRFS(на деле)

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

btrfs tools

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

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

BTRFS(на деле)

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

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

BTRFS(на деле)

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

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

Page 35: Docker & Badoo: никогда не останавливайся на достигнутом
Page 36: Docker & Badoo: никогда не останавливайся на достигнутом

OverlayFS(in practice)

• Performance ~ native

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

OverlayFS(in practice)

• Performance ~ native• Use the same EXT partition

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

OverlayFS(in practice)

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

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

OverlayFS(keep in mind)

• high inode usage

• module called “overlay”

Page 40: Docker & Badoo: никогда не останавливайся на достигнутом
Page 41: Docker & Badoo: никогда не останавливайся на достигнутом

Грабли: docker pull

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

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

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

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

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

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

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

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

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

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

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

Misc

EXT4 hardlink limit

65 534

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

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

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

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

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

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

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

docker_build

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Что хотели?

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

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

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

Что хотели?

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

Page 55: Docker & Badoo: никогда не останавливайся на достигнутом
Page 56: Docker & Badoo: никогда не останавливайся на достигнутом

• Client Less

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

• Client Less• Get/Set data

viadocker API

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

• Client Less• Get/Set data

viadocker API

• Монстр!

Page 59: Docker & Badoo: никогда не останавливайся на достигнутом
Page 60: Docker & Badoo: никогда не останавливайся на достигнутом
Page 61: Docker & Badoo: никогда не останавливайся на достигнутом
Page 62: Docker & Badoo: никогда не останавливайся на достигнутом

baDocker #2

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

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

baDocker #2

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

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

baDocker #2

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

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

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

baDocker #2

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

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

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

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

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

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

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

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

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

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

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

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

Page 69: Docker & Badoo: никогда не останавливайся на достигнутом
Page 70: Docker & Badoo: никогда не останавливайся на достигнутом

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

[email protected]@tyrchenok@BadooDev

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

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