DC/OS – Больше чем PAAS*
Никита Борзых, Экспресс 42
*Рассказ про будущее
2
Whoami
2009г, Xen, InfiniBand, custom L2 over L3, Chef
2012г, Devops :)
2011г, Chef, Web, Rails, soft skills
• Анализ текущей ситуации в индустрии, обозначение
проблем
• DC/OS: место под солнцем, концепция, компоненты
• Наш опыт
3
План
4
💰
Ценность
5
Buzz график
6
1/2/3 приложения
и/или монолитное приложение
хранилище данных
DB/back/front
Устройство проекта:
7
– конфигурация ПО: Chef/Ansible
– деплой: Capistrano, Fabric
– configuration drift
DB/back/front
Изменения:
8
DB/back/front
– рассчитать потребление
ресурсов просто
– понятно какой компонент где
запускать
Поддержка:
9
– стандарт упаковки
– не собираем на продакшене(ruby,
python)
– конфигурация вместе с сервисом
DB/back/front
Docker экосистема упрощает жизнь:
10
(Микро)сервисы
11
Микросервисы
– 10/20/30 компонентов
– могут иметь связи any-to-any
– компоненты появляются и
исчезают
– реестр сервисов(static, dynami,
service discovery)
Устройство проекта:
12
Микросервисы
– конфигурация ПО: Chef/Ansible
– capistrano/fabric – неудобно
– configuration drift!!!
Изменения:
13
Микросервисы
– рассчитать потребление
ресурсов сложно
– ручная аллокация
приложений
Поддержка:
14
Docker экосистема опять все
упрощает:
Микросервисы
– стандартизация
– изоляция
– docker compose
– chef/ansible
– большая плотность на один хост
15
Микросервисы
16
Микросервисы
17
Жизнь вне AWS
“Обычная” площадка DEV/QA в офисе Облако Где-то у заказчика
18
Свой low-level под каждую площадку
Способ деплоя зависит от площадки
Сложность поддержки:
количество сервисов X количество площадок
Жизнь вне AWS
19
Рефлексия
19
Когда вы в последний раз выделяли память для запуска
приложения на своем ноутбуке? (OS делают это за нас уже
почти пол века!)
Рефлексия
19
Когда вы в последний раз выделяли память для запуска
приложения на своем ноутбуке? (OS делают это за нас уже
почти пол века!)
Зачем чинить то, что сломалось?
Рефлексия
19
Когда вы в последний раз выделяли память для запуска
приложения на своем ноутбуке? (OS делают это за нас уже
почти пол века!)
Зачем чинить то, что сломалось?
Зачем нам концепция “Сервер”?
Рефлексия
20
“Почему я вообще должен об этом всем думать? Я же
DevOps, я хочу docker и общаться в telegram за devops
практики!”
21
Работать должны роботы!
22
Datacenter is a new computer
23
Data Center Operation System(DC/OS)
23
Data Center Operation System(DC/OS)
– Автоматическое управление
ресурсами в рамках всего ДЦ
23
Data Center Operation System(DC/OS)
– Автоматическое управление
ресурсами в рамках всего ДЦ
– Автоматический Service Discovery
для всех компонентов вашего
проекта
24
DC/OS
24
DC/OS
– Cloud agnostic
24
DC/OS
– Cloud agnostic
– Единая точка управления
проектом и датацентром через
WEB UI и CLI
25
Это что за ребята?
25
Это что за ребята?
2009 Mesos initial white paper
25
Это что за ребята?
2009 Mesos initial white paper
May 2013 2.25M(Seed)
25
Это что за ребята?
2009 Mesos initial white paper
May 2013 2.25M(Seed)
Jun 2014 $10.5M(A), Dec $36M(B)
25
Это что за ребята?
2009 Mesos initial white paper
May 2013 2.25M(Seed)
Jun 2014 $10.5M(A), Dec $36M(B)
Apr 2016 DC/OS Opensource
25
Это что за ребята?
2009 Mesos initial white paper
May 2013 2.25M(Seed)
Jun 2014 $10.5M(A), Dec $36M(B)
Apr 2016 DC/OS Opensource
Mar 2016 $73.5M(C) from MS and HPE
26
Кто пользуется?
– Apple(Siri)
– Airbnb
– Adobe
– Verizon
– PayPal
– eBay
– Express 42 ;-)
27 `
Место в пищевой цепи(*)
28
OS
Llinux, BSD, Windows
init, systemd, cron, …
YourApps | Kafka | HDFS
Packages, DNS, Auth, Network, …
29
DC/OS
30
DC/OS
Mesos
YourApps | Kafka | HDFS
Llinux, BSD, Windows
init, systemd, cron, …
YourApps | Kafka | HDFS
Packages, DNS, Auth, Network, …
31
Mesos – Distrubuted systems kernel
Нет, это не замена linux kernel
Другой уровень абстракции
31
Mesos – Distrubuted systems kernel
Задачи похожи:
Нет, это не замена linux kernel
Другой уровень абстракции
31
Mesos – Distrubuted systems kernel
Задачи похожи:
– управление ресурсами
Нет, это не замена linux kernel
Другой уровень абстракции
31
Mesos – Distrubuted systems kernel
Задачи похожи:
– управление ресурсами
– управление процессами
Нет, это не замена linux kernel
Другой уровень абстракции
31
Mesos – Distrubuted systems kernel
Задачи похожи:
– управление ресурсами
– управление процессами
– изоляция процессов
Нет, это не замена linux kernel
Другой уровень абстракции
32
Mesos – Distrubuted systems kernel
32
Mesos – Distrubuted systems kernel
– Запускается на каждой машине
32
Mesos – Distrubuted systems kernel
– Запускается на каждой машине
– Masters HA используя ZooKeeper
32
Mesos – Distrubuted systems kernel
– Запускается на каждой машине
– Masters HA используя ZooKeeper
– Скейлится до 10000 хостов
32
Mesos – Distrubuted systems kernel
– Запускается на каждой машине
– Masters HA используя ZooKeeper
– Скейлится до 10000 хостов
– SDK для написания
распределенных приложений
33
Mesos – Distrubuted systems kernel
33
Mesos – Distrubuted systems kernel
– Изоляторы: Docker и Mesos
контейнеры
33
Mesos – Distrubuted systems kernel
– Изоляторы: Docker и Mesos
контейнеры
– Дифференциация через Roles
34
Mesos
Standby
Mesos Master
Leader
Mesos Master
Standby
Mesos Master
Mesos Executor Docker Executor
Task Task
Mesos Agent
Mesos Executor Docker Executor
Task Task
Mesos Agent
Framework scheduler
ZKZKZK
User
35
Standby
Mesos Master
Leader
Mesos Master
Standby
Mesos Master
Mesos Executor Docker Executor
Task Task
Mesos Agent
Mesos Executor Docker Executor
Task Task
Mesos Agent
Framework scheduler
ZKZKZK
User
Mesos – Task Launch
36
Standby
Mesos Master
Leader
Mesos Master
Standby
Mesos Master
Mesos Executor Docker Executor
Task Task
Mesos Agent
Mesos Executor Docker Executor
Task Task
Mesos Agent
Framework scheduler
ZKZKZK
User
Mesos – Task Launch
37
Mesos – Offers
cpus(fast):4; mem(fast):4096; ports(fast):[1025-7000]
cpus(*):16; mem(*):8192; ports(*):[1025-65535]
cpus(*):8; mem(*):32768; ports(*):[1025-65535]
38
Standby
Mesos Master
Leader
Mesos Master
Standby
Mesos Master
Mesos Executor Docker Executor
Task Task
Mesos Agent
Mesos Executor Docker Executor
Task Task
Mesos Agent
Framework scheduler
ZKZKZK
User
Mesos – Task Launch
39
Standby
Mesos Master
Leader
Mesos Master
Standby
Mesos Master
Mesos Executor Docker Executor
Task Task
Mesos Agent
Mesos Executor Docker Executor
Task Task
Mesos Agent
Framework scheduler
ZKZKZK
User
Mesos – Task Launch
40
Standby
Mesos Master
Leader
Mesos Master
Standby
Mesos Master
Mesos Executor Docker Executor
Task Task
Mesos Agent
Mesos Executor Docker Executor
Task Task
Mesos Agent
Framework scheduler
ZKZKZK
User
Mesos – Task Launch
41
Mesos – Task Launch
Standby
Mesos Master
Leader
Mesos Master
Standby
Mesos Master
Mesos Executor Docker Executor
Task Task
Mesos Agent
Mesos Executor Docker Executor
Task Task
Mesos Agent
Framework scheduler
ZKZKZK
User
42
Mesos – Fault Tollerance
New Leader
Mesos Master
Leader
Mesos Master
Standby
Mesos Master
Mesos Executor Docker Executor
Task Task
Mesos Agent
Mesos Executor Docker Executor
Task Task
Mesos Agent
Framework scheduler
ZKZKZK
User
43
Mesos – Fault Tollerance
New Leader
Mesos Master
Leader
Mesos Master
Standby
Mesos Master
Mesos Executor Docker Executor
Task Task
Mesos Agent
Mesos Executor Docker Executor
Task Task
Mesos Agent
Framework scheduler
ZKZKZK
User
46
DC/OS
Mesos
Marathon, Kubernetes, Spark
YourApps | Kafka | HDFS
Llinux, BSD, Windows
init, systemd, cron, …
YourApps | Kafka | HDFS
Packages, DNS, Auth, Network, …
47
Marathon – Distrubuted systems init
47
Marathon – Distrubuted systems init
– Принцип как у systemd
47
Marathon – Distrubuted systems init
– Принцип как у systemd
– Другой уровень абстракции
47
Marathon – Distrubuted systems init
– Принцип как у systemd
– Другой уровень абстракции
– Health check приложений
47
Marathon – Distrubuted systems init
– Принцип как у systemd
– Другой уровень абстракции
– Health check приложений
– Rolling deploy pattern
48
Marathon – Distrubuted systems init
48
Marathon – Distrubuted systems init
– HA используя ZooKeeper
48
Marathon – Distrubuted systems init
– HA используя ZooKeeper
– Нативная поддержка Docker
48
Marathon – Distrubuted systems init
– HA используя ZooKeeper
– Нативная поддержка Docker
– Web UI, REST API, Event API
48
Marathon – Distrubuted systems init
– HA используя ZooKeeper
– Нативная поддержка Docker
– Web UI, REST API, Event API
– Декларативное описание
приложений
56
Marathon – your-app.json
..........
"id": "/test-group/python-look-and-feel",
"instances": 2,
"cpus": 0.2,
"disk": 0,
"mem": 128,
"cmd": "python -m SimpleHTTPServer 8000”
..........
57
Marathon – your-app.json
............
"healthChecks": [{
"gracePeriodSeconds": 60,
"intervalSeconds": 10,
"maxConsecutiveFailures": 3,
"path": "/",
"portIndex": 0,
"protocol": "HTTP",
"timeoutSeconds": 10
}]
............
58
Marathon – Rolling Deploy pattern
59
Mesos Frameworks
60
Mesos Frameworks – Kafka
60
Mesos Frameworks – Kafka
Старт kafka framework в marathon (отдельное приложение)
60
Mesos Frameworks – Kafka
Старт kafka framework в marathon (отдельное приложение)
kafka framework стартует брокеры
60
Mesos Frameworks – Kafka
Старт kafka framework в marathon (отдельное приложение)
kafka framework стартует брокеры
kafka framework управляет жизненным циклом брокеров:
60
Mesos Frameworks – Kafka
Старт kafka framework в marathon (отдельное приложение)
kafka framework стартует брокеры
kafka framework управляет жизненным циклом брокеров:
создание/удаление топиков, брокеров, ребалансировка итд.
61
DC/OS
Mesos
Marathon, Сhronos, your app
DC/OS Services
YourApps | Kafka | HDFS
Llinux, BSD, Windows
init, systemd, cron, …
YourApps | Kafka | HDFS
Packages, DNS, Auth, Network, …
62
DC/OS Dashboard
DC/OS CLI
Network & Service Discovery
DC/OS Dashboard
Packages: Cosmos, Universe
68
DC/OS Packages
DC/OS CLI
Network & Service Discovery
DC/OS Dashboard
Packages: Cosmos, Universe
73
DC/OS CLI
Network & Service Discovery
DC/OS Dashboard
Packages: Cosmos, Universe
DC/OS CLI
74
DC/OS CLI
74
DC/OS CLI
– Полное управление всем DC/OS
стеком
74
DC/OS CLI
– Полное управление всем DC/OS
стеком
– Расширения для CLI
75
DC/OS CLI
75
DC/OS CLI
dcos marathon app add ./python-look-and-feel.json
75
DC/OS CLI
dcos marathon app add ./python-look-and-feel.json
dcos package install kafka --options=kafka-custom.json
75
DC/OS CLI
dcos marathon app add ./python-look-and-feel.json
dcos package install kafka --options=kafka-custom.json
dcos kafka topic create --replication 2 test-topic
76
DC/OS Service Discovery
Network & Service Discovery
DC/OS Dashboard
Packages: Cosmos, Universe
DC/OS CLI
77
Network
77
Network
Docker BRIDGE, HOST
77
Network
Docker BRIDGE, HOST
projectcalico.org, calico-mesos
78
MesosDNS
79
Service Discovery – Minuteman
79
Service Discovery – Minuteman
Распределенный балансировщик
для использования внутри mesos
79
Service Discovery – Minuteman
Распределенный балансировщик
для использования внутри mesos
iptables NFQueue + erlang daemon
79
Service Discovery – Minuteman
Распределенный балансировщик
для использования внутри mesos
iptables NFQueue + erlang daemon
Marathon network labels
79
Service Discovery – Minuteman
Распределенный балансировщик
для использования внутри mesos
iptables NFQueue + erlang daemon
Marathon network labels
Для постоянных подключений
80
Service Discovery – Minuteman
service2
VIP: 10.10.0.10
meson-agent-host
Minuteman
meson-agent-host
Minuteman
service1
service2
VIP: 10.10.0.10
service2
VIP: 10.10.0.10
81
Express 42 доставляет!
82
Traefik
HTTP Балансировщик для микросервисов
82
Traefik
– работает через Marathon Event API
HTTP Балансировщик для микросервисов
82
Traefik
– работает через Marathon Event API
– zerotime rolling deployment pattern
HTTP Балансировщик для микросервисов
82
Traefik
– работает через Marathon Event API
– zerotime rolling deployment pattern
– собственные метрики, API
HTTP Балансировщик для микросервисов
82
Traefik
– работает через Marathon Event API
– zerotime rolling deployment pattern
– собственные метрики, API
– TLS / Websockets / HTTP2
HTTP Балансировщик для микросервисов
83
Continuous Delivery
84
Jenkins CI
85
Jenkins CI
node('jenkins-dnd') {
docker.withRegistry('https://registry.demo.express42.net',
'5ffddaa8-50f7-4b97-910d-dc476707e1dd') {
stage 'Checkout repository'
git credentialsId: '19da5a63-278a-4664-a187-5a804d6e033a', url:
'git@github.com:express42/microservices-demo-apps.git'
stage 'Pull latest blog-ui image'
docker.image('blog-ui:latest').pull()
stage 'Build blog-ui image'
image = docker.build('blog-ui', 'blog_ui')
stage 'Push blog-ui image'
image.push('latest')
}
}
86
Jenkins CI
stage 'Make blog-ui docker image'
build 'build-blog-ui'
stage 'Make blog-backend docker image'
build 'build-blog-backend'
stage 'Request for approval'
input 'Ready to go?'
node('jenkins-dnd') {
stage 'Deploy to DEMO'
git credentialsId: '19da5a63-278a-4664-a187-5a804d6e033a', url: '<URL>'
dcos_image = docker.image('<URL>/dcos_cli:latest')
marathonctl_image.inside() {
sh 'dcos marathon group update /microservices-demo ./blog1.json'
}
}
87
Точки внимания
– Мониторинг – prometheus & marathon labels?
– Централизованные логи
– Продумайте вашу сеть
88
Docs
http://dcos.io
http://www.meetup.com/DC-OS-Online-Meetup
DC/OS slack чатик – http://chat.mesosphere.com
89
Подкаст
Сайт: http://devopsdeflope.ru
Новости: https://telegram.me/devops_deflope
90
Meetup
http://www.meetup.com/DevOps-Moscow-in-Russian/
91
@ex_sample
http://telegram.me/minicon
sample.n@gmail.com
Спасибо, вопросы

DC/OS more than PAAS