SlideShare a Scribd company logo
Оркестратор Docker:
Swarm или Kubernetes
Дмитрий Лазаренко, Jelastic
Микросервисы
Микросервисы vs. Монолит
Оркестраторы контейнеров
Контейнеры могут быть
спасением для разработчиков
Но это не тривиально…
Но это не тривиально…
Как бы вы строили приложение из 1000
узлов, не имея возможности зайти в его
админку? Вообще никогда.
Kubernetes
Идеология Kubernetes
Любой компонент в любой
момент может упасть:
• сервер
• жесткий диск
• сеть
• VM
• контейнер
• приложение
Что позволяет делать Kubernetes?
1. Вы декларативно описываете конфигурацию приложения (YAML)
2. Каждая группа компонент (Pod) именуется (Label)
3. Описываете какие группы компонент должны быть
продублированы, например сервис A запускать в 5 экземплярах
4. Kubernetes разворачивает указанную конфигурацию на
доступной инфраструктуре (Nodes)
5. Kubernetes следит за тем, чтобы текущая конфигурация
приложения всегда соответствовала эталонной
6. Есть встроенные health checks, на основе которых происходит
оценка здоровья приложения и замена больных Pod на новые
7. В итоге ваше приложение всегда имеет нужное количество
запущенных экземпляров
Архитектура Kubernetes
1. Master – Оркестратор
2. Nodes - рабочие сервера
Архитектура Kubernetes
Nodes
1. Каждый узел состоит из
набора Pod-ов
2. Каждый Pod состоит из
набора связанных
контейнеров
3. Pod, а не контейнер –
единица масштабирования
в Kubernetes
4. Kubernetes содержит
встроенные алгоритмы для
Anti-affinity
Volumes
1. Empty Dir
2. NFS
3. GCEPersistentDisk
4. awsElasticBlockStore
5. Glusterfs
6. Iscsi
7. Rbd
8. Secrets
Labels
1. Разметка вашей конфигурации. KEY/VALUE
2. “labels”: {
“tier”: “frontend”
“application.awesome-game/environment”: “production”
}
Label selector
1. Механизм запросов к Labels
2. tier != frontend, game = super-shooter-2
3. environment in (production, qa)
tier notin (frontend, backend)
partition
Replication controller
1. Несколько копий одного Pod называются репликами
2. Replication Controller следит за поддержанием заданного уровня
репликации Pod
3. Обеспечивает защиту от сбоев
4. Позволяет изменять label для конкретного Pod, таким образом
исключая его из репликации или проводить ZDT Rolling Updates
5. Масштабирование приложения происходит только вручную
через смену количества реплик для конкретного Pod
Services
1. Reverse-proxy
2. Проброс HTTP-запросов
из вне на PODы
3. Сервисы имеют
внешние IP
4. Простая Round-Robin
балансировка
Services
Service Discovery
• Переменные окружения из Pod появляются на Node
• Cluster DNS- Специальный Pod
 Etcd – хранение конфигурации
 SkyDns – DNS-сервер, читающий из Etcd
 Kube2sky –публикует актуальную информацию из
Kubernetes Master в Etcd
Health checking
▪ TCP Socket
▪ HTTP GET
▪ Container Exec
livenessProbe:
enabled: true
type: http
initialDelaySeconds: 30
httpGet:
path: /_status/healthz
port: 8080
Порталы управления
Как развернуть?
▪ Local (Docker-based)
▪ Vagrant
▪ Local (No VM)
▪ Hosted Solution:
▪ Google Container Engine
▪ AWS
▪ Azure
▪ Mesosphere
▪ OpenStack Magnum/Murano
Преимущества Kubernetes
1. Следит за тем, что ваше приложение всегда содержит
нужное количество запущенных экземпляров
2. Хорошо подходит для Rolling updates
3. Плохо подходит для Stateful приложений
4. Есть проблемы с авто-масштабированием приложений
Недостатки Kubernetes
1. Сложно развернуть рабочий кластер своими руками
2. Сложно настроить автоматическое горизонтальное
масштабирование
3. Очень многое приходится делать в CLI
4. Логика оркестрации скрыта в недрах Kubernetes
5. Контейнер не является единицей управления
Docker Swarm
Docker Swarm
• Управляет узлами (Nodes) в кластере
• Использует Docker APls для общения с Docker Daemon
на каждом узле
• Может быть кластеризирован
Swarm Manager
• Отвечает за размещение контейнеров на узлах (Nodes)
• Pluggable architecture - Bring your own scheduler
• Каждый Scheduler состоит из:
• Стратегии размещения
• Списка фильтров
Scheduler
• Bin Packaging
• Упаковывает узлы максимально полно
Scheduler - стратегии
Scheduler – Bin Packaging
• Bin Packaging
• Упаковывает узлы максимально полно
• Spread
• Распределяем равномерно
• Random
• Обычно только для отладки
Scheduler - стратегии
• Affinity Filter
• Constraint Filter
• Health Filter – Выбирает только здоровые узлы
• Port Filter
Scheduler - фильтры
1. Каждый Docker-host может иметь различный набор
меток
• OS, Storage (ssd, disk), kernel, env
2. Выбрать хост можно, указав критерий из меток
• storage=ssd
• region=us-east
• environment=production
• Стандартные типы:
• node ID or node Name (using key “node”)
• storagedriver
• executiondriver
• kernelversion
• operatingsystem
Constraint Filter
1. Affinity и anti-affinity правила
• Помести db туда же, где и nginx
• Помести db туда, где есть указанный image
• Не помещай контейнер, если label==frontend
2. Ограничения могут быть жесткими и
мягкими
Affinity filters
1. Поместить контейнер, только если на узле
свободен определенный публичный порт.
Например 80 или 443
Port filters
1. Можно объявить зависимости от уже
существующих контейнеров
1. Shared volumes
2. Links
3. Shared network stacks
Зависимости в фильтрах
• RAM
• docker run -m 1g
• CPU
• docker run -c 1
• Ports
• docker run -p 80:80
Resource Management
• Token Based
• etcd based
• Zookeeper based
• Consul Based
• File Based
• Bring your own?
Service Discovery
High Availability
• Multiple Swarm Managers
• Похоже на Master-Master репликацию
• При падении главного Master Manager, выбирается
новый Master
• Работает только с
• Consul
• Etcd
• Zookeeper
• Требуется консенсус для корректного выбора нового
Master
Requests Routing
• Нет стандартных паттернов
• DIY
Как развернуть?
▪ Вручную через Docker
▪ Docker machine
▪ OpenStack Magnum
Преимущества Swarm
1. Позволяет описать детально жизненный цикл вашего
приложения
2. Управляем лучше, чем Kubernetes в части affinity & anti-
affinity
3. Расширяемость
4. Родной оркестратор для Docker
Недостатки Swarm
1. Сложно развернуть рабочий кластер своими руками
2. Сложно настроить автоматическое горизонтальное
масштабирование
3. Абсолютно все приходится делать через CLI
4. Нет возможности декларативно описать развертывание
приложения
5. Нет встроенных health-checks
6. Нет автоматического rescheduling при падениях узлов
7. Только недавно вышел в Production
Спасибо!
Вопросы?
@Jelastic & dl@jelastic.com

More Related Content

What's hot

Что такое Docker
Что такое DockerЧто такое Docker
Что такое Docker
Pavel Klimiankou
 
Docker for JS people
Docker for JS peopleDocker for JS people
Docker for JS people
Alex Chistyakov
 
Михаил Боднарчук "Docker для PHP разработчиков"
Михаил Боднарчук "Docker для PHP разработчиков" Михаил Боднарчук "Docker для PHP разработчиков"
Михаил Боднарчук "Docker для PHP разработчиков"
Fwdays
 
Роман Иманкулов-«Быстрые и масштабируемые приложения с Sync API»
Роман Иманкулов-«Быстрые и масштабируемые приложения с Sync API»Роман Иманкулов-«Быстрые и масштабируемые приложения с Sync API»
Роман Иманкулов-«Быстрые и масштабируемые приложения с Sync API»
Tanya Denisyuk
 
Docker - быстро, просто, наглядно
Docker - быстро, просто, наглядноDocker - быстро, просто, наглядно
Docker - быстро, просто, наглядно
FallenKain
 
Виртуализированные сетевые сервисы на line rate в серверном окружении / Алекс...
Виртуализированные сетевые сервисы на line rate в серверном окружении / Алекс...Виртуализированные сетевые сервисы на line rate в серверном окружении / Алекс...
Виртуализированные сетевые сервисы на line rate в серверном окружении / Алекс...
Ontico
 
Docker : что это, зачем, и как им пользоваться
Docker : что это, зачем, и как им пользоватьсяDocker : что это, зачем, и как им пользоваться
Docker : что это, зачем, и как им пользоваться
Сергей Ладыгин
 
Введение в Docker
Введение в Docker Введение в Docker
Введение в Docker
Andrey Markelov
 
Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps Meetup
Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps MeetupДоклад "Docker в Badoo: от восторгов к внедрению" на DevOps Meetup
Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps Meetup
Badoo Development
 
SDN & DEVOPS ?= ❤: Практики использования SDN / Александр Шалимов (ЦПИКС, МГУ)
SDN & DEVOPS ?= ❤: Практики использования SDN / Александр Шалимов (ЦПИКС, МГУ)SDN & DEVOPS ?= ❤: Практики использования SDN / Александр Шалимов (ЦПИКС, МГУ)
SDN & DEVOPS ?= ❤: Практики использования SDN / Александр Шалимов (ЦПИКС, МГУ)
Ontico
 
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Ontico
 
Docker в виртуальной среде VMware
Docker в виртуальной среде VMwareDocker в виртуальной среде VMware
Docker в виртуальной среде VMware
Andrey Konovalov
 
DC/OS – больше чем PAAS, Никита Борзых (Express 42)
DC/OS – больше чем PAAS, Никита Борзых (Express 42)DC/OS – больше чем PAAS, Никита Борзых (Express 42)
DC/OS – больше чем PAAS, Никита Борзых (Express 42)
Ontico
 
SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности
SPb Jenkins Meetup #5. Jenkins in da Cloud. ВнутренностиSPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности
SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности
Oleg Nenashev
 
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Ontico
 
Docker - счастье для хомячка или ника?
Docker - счастье для хомячка или ника?Docker - счастье для хомячка или ника?
Docker - счастье для хомячка или ника?
Ruslan Sharipov
 
Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...
Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...
Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...
Tanya Denisyuk
 
Docker. Основы
Docker. ОсновыDocker. Основы
Docker. Основы
Ivan Miniailenko
 
Jenkins в docker in mesos in ...
Jenkins в docker in mesos in ...Jenkins в docker in mesos in ...
Jenkins в docker in mesos in ...
Кирилл Толкачёв
 
Docker с чем едят и для чего используют
Docker с чем едят и для чего используютDocker с чем едят и для чего используют
Docker с чем едят и для чего используют
ITCrowd Almaty
 

What's hot (20)

Что такое Docker
Что такое DockerЧто такое Docker
Что такое Docker
 
Docker for JS people
Docker for JS peopleDocker for JS people
Docker for JS people
 
Михаил Боднарчук "Docker для PHP разработчиков"
Михаил Боднарчук "Docker для PHP разработчиков" Михаил Боднарчук "Docker для PHP разработчиков"
Михаил Боднарчук "Docker для PHP разработчиков"
 
Роман Иманкулов-«Быстрые и масштабируемые приложения с Sync API»
Роман Иманкулов-«Быстрые и масштабируемые приложения с Sync API»Роман Иманкулов-«Быстрые и масштабируемые приложения с Sync API»
Роман Иманкулов-«Быстрые и масштабируемые приложения с Sync API»
 
Docker - быстро, просто, наглядно
Docker - быстро, просто, наглядноDocker - быстро, просто, наглядно
Docker - быстро, просто, наглядно
 
Виртуализированные сетевые сервисы на line rate в серверном окружении / Алекс...
Виртуализированные сетевые сервисы на line rate в серверном окружении / Алекс...Виртуализированные сетевые сервисы на line rate в серверном окружении / Алекс...
Виртуализированные сетевые сервисы на line rate в серверном окружении / Алекс...
 
Docker : что это, зачем, и как им пользоваться
Docker : что это, зачем, и как им пользоватьсяDocker : что это, зачем, и как им пользоваться
Docker : что это, зачем, и как им пользоваться
 
Введение в Docker
Введение в Docker Введение в Docker
Введение в Docker
 
Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps Meetup
Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps MeetupДоклад "Docker в Badoo: от восторгов к внедрению" на DevOps Meetup
Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps Meetup
 
SDN & DEVOPS ?= ❤: Практики использования SDN / Александр Шалимов (ЦПИКС, МГУ)
SDN & DEVOPS ?= ❤: Практики использования SDN / Александр Шалимов (ЦПИКС, МГУ)SDN & DEVOPS ?= ❤: Практики использования SDN / Александр Шалимов (ЦПИКС, МГУ)
SDN & DEVOPS ?= ❤: Практики использования SDN / Александр Шалимов (ЦПИКС, МГУ)
 
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
 
Docker в виртуальной среде VMware
Docker в виртуальной среде VMwareDocker в виртуальной среде VMware
Docker в виртуальной среде VMware
 
DC/OS – больше чем PAAS, Никита Борзых (Express 42)
DC/OS – больше чем PAAS, Никита Борзых (Express 42)DC/OS – больше чем PAAS, Никита Борзых (Express 42)
DC/OS – больше чем PAAS, Никита Борзых (Express 42)
 
SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности
SPb Jenkins Meetup #5. Jenkins in da Cloud. ВнутренностиSPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности
SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности
 
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
 
Docker - счастье для хомячка или ника?
Docker - счастье для хомячка или ника?Docker - счастье для хомячка или ника?
Docker - счастье для хомячка или ника?
 
Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...
Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...
Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...
 
Docker. Основы
Docker. ОсновыDocker. Основы
Docker. Основы
 
Jenkins в docker in mesos in ...
Jenkins в docker in mesos in ...Jenkins в docker in mesos in ...
Jenkins в docker in mesos in ...
 
Docker с чем едят и для чего используют
Docker с чем едят и для чего используютDocker с чем едят и для чего используют
Docker с чем едят и для чего используют
 

Viewers also liked

Private PaaS & Container-as-a-Service for ISVs and Enterprise - Use Cases and...
Private PaaS & Container-as-a-Service for ISVs and Enterprise - Use Cases and...Private PaaS & Container-as-a-Service for ISVs and Enterprise - Use Cases and...
Private PaaS & Container-as-a-Service for ISVs and Enterprise - Use Cases and...
Dmitry Lazarenko
 
kubernetes, pourquoi et comment
kubernetes, pourquoi et commentkubernetes, pourquoi et comment
kubernetes, pourquoi et comment
Jean-Baptiste Claramonte
 
Kubernetes Networking - Giragadurai Vallirajan
Kubernetes Networking - Giragadurai VallirajanKubernetes Networking - Giragadurai Vallirajan
Kubernetes Networking - Giragadurai Vallirajan
Neependra Khare
 
Kubernetes networking: Introduction to overlay networks, communication models...
Kubernetes networking: Introduction to overlay networks, communication models...Kubernetes networking: Introduction to overlay networks, communication models...
Kubernetes networking: Introduction to overlay networks, communication models...
Murat Mukhtarov
 
Container Network Interface: Network Plugins for Kubernetes and beyond
Container Network Interface: Network Plugins for Kubernetes and beyondContainer Network Interface: Network Plugins for Kubernetes and beyond
Container Network Interface: Network Plugins for Kubernetes and beyond
KubeAcademy
 
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
Ontico
 
Kubernetes Architecture and Introduction – Paris Kubernetes Meetup
Kubernetes Architecture and Introduction – Paris Kubernetes MeetupKubernetes Architecture and Introduction – Paris Kubernetes Meetup
Kubernetes Architecture and Introduction – Paris Kubernetes Meetup
Stefan Schimanski
 
Architecture Overview: Kubernetes with Red Hat Enterprise Linux 7.1
Architecture Overview: Kubernetes with Red Hat Enterprise Linux 7.1Architecture Overview: Kubernetes with Red Hat Enterprise Linux 7.1
Architecture Overview: Kubernetes with Red Hat Enterprise Linux 7.1
Etsuji Nakai
 
Kubernetes Networking
Kubernetes NetworkingKubernetes Networking
Kubernetes Networking
CJ Cullen
 
Микросервисная архитектура на базе CoreOS и Kubernetes
Микросервисная архитектура на базе CoreOS и KubernetesМикросервисная архитектура на базе CoreOS и Kubernetes
Микросервисная архитектура на базе CoreOS и Kubernetes
Denis Izmaylov
 
An Introduction to Kubernetes
An Introduction to KubernetesAn Introduction to Kubernetes
An Introduction to Kubernetes
Imesh Gunaratne
 
Glusterfs and Hadoop
Glusterfs and HadoopGlusterfs and Hadoop
Glusterfs and Hadoop
Shubhendu Tripathi
 

Viewers also liked (12)

Private PaaS & Container-as-a-Service for ISVs and Enterprise - Use Cases and...
Private PaaS & Container-as-a-Service for ISVs and Enterprise - Use Cases and...Private PaaS & Container-as-a-Service for ISVs and Enterprise - Use Cases and...
Private PaaS & Container-as-a-Service for ISVs and Enterprise - Use Cases and...
 
kubernetes, pourquoi et comment
kubernetes, pourquoi et commentkubernetes, pourquoi et comment
kubernetes, pourquoi et comment
 
Kubernetes Networking - Giragadurai Vallirajan
Kubernetes Networking - Giragadurai VallirajanKubernetes Networking - Giragadurai Vallirajan
Kubernetes Networking - Giragadurai Vallirajan
 
Kubernetes networking: Introduction to overlay networks, communication models...
Kubernetes networking: Introduction to overlay networks, communication models...Kubernetes networking: Introduction to overlay networks, communication models...
Kubernetes networking: Introduction to overlay networks, communication models...
 
Container Network Interface: Network Plugins for Kubernetes and beyond
Container Network Interface: Network Plugins for Kubernetes and beyondContainer Network Interface: Network Plugins for Kubernetes and beyond
Container Network Interface: Network Plugins for Kubernetes and beyond
 
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
 
Kubernetes Architecture and Introduction – Paris Kubernetes Meetup
Kubernetes Architecture and Introduction – Paris Kubernetes MeetupKubernetes Architecture and Introduction – Paris Kubernetes Meetup
Kubernetes Architecture and Introduction – Paris Kubernetes Meetup
 
Architecture Overview: Kubernetes with Red Hat Enterprise Linux 7.1
Architecture Overview: Kubernetes with Red Hat Enterprise Linux 7.1Architecture Overview: Kubernetes with Red Hat Enterprise Linux 7.1
Architecture Overview: Kubernetes with Red Hat Enterprise Linux 7.1
 
Kubernetes Networking
Kubernetes NetworkingKubernetes Networking
Kubernetes Networking
 
Микросервисная архитектура на базе CoreOS и Kubernetes
Микросервисная архитектура на базе CoreOS и KubernetesМикросервисная архитектура на базе CoreOS и Kubernetes
Микросервисная архитектура на базе CoreOS и Kubernetes
 
An Introduction to Kubernetes
An Introduction to KubernetesAn Introduction to Kubernetes
An Introduction to Kubernetes
 
Glusterfs and Hadoop
Glusterfs and HadoopGlusterfs and Hadoop
Glusterfs and Hadoop
 

Similar to Docker Containers orchestrators: Kubernetes vs. Swarm

Другая виртуализация
Другая виртуализацияДругая виртуализация
Другая виртуализация
Yandex
 
Windows Azure Internals
Windows Azure InternalsWindows Azure Internals
Windows Azure Internals
Alexander Feschenko
 
DevCon School. Azure Microservices and Containers
DevCon School. Azure Microservices and ContainersDevCon School. Azure Microservices and Containers
DevCon School. Azure Microservices and Containers
Stas Pavlov
 
Инфраструктура распределенных приложений на nodejs / Станислав Гуменюк (Rambl...
Инфраструктура распределенных приложений на nodejs / Станислав Гуменюк (Rambl...Инфраструктура распределенных приложений на nodejs / Станислав Гуменюк (Rambl...
Инфраструктура распределенных приложений на nodejs / Станислав Гуменюк (Rambl...
Ontico
 
Управление облачной инфраструктурой
Управление облачной инфраструктуройУправление облачной инфраструктурой
Управление облачной инфраструктуройdddpaul
 
Настройка kubernetes: tips and tricks / Михаил Прокопчук (Avito)
Настройка kubernetes: tips and tricks / Михаил Прокопчук (Avito)Настройка kubernetes: tips and tricks / Михаил Прокопчук (Avito)
Настройка kubernetes: tips and tricks / Михаил Прокопчук (Avito)
Ontico
 
Настройка Kubernetes: tips ans tricks
Настройка Kubernetes: tips ans tricksНастройка Kubernetes: tips ans tricks
Настройка Kubernetes: tips ans tricks
Mike Prokopchuk
 
Net core and linux in production
Net core and linux in productionNet core and linux in production
Net core and linux in production
Anatoly Popov
 
Нюансы запуска приложений в Kubernetes
Нюансы запуска приложений в KubernetesНюансы запуска приложений в Kubernetes
Нюансы запуска приложений в Kubernetes
Андрей Новиков
 
Чему мы научились, разрабатывая микросервисы / Вадим Мадисон (RuTube)
Чему мы научились, разрабатывая микросервисы / Вадим Мадисон (RuTube)Чему мы научились, разрабатывая микросервисы / Вадим Мадисон (RuTube)
Чему мы научились, разрабатывая микросервисы / Вадим Мадисон (RuTube)
Ontico
 
Чему мы научились разрабатывая микросервисы?
Чему мы научились разрабатывая микросервисы?Чему мы научились разрабатывая микросервисы?
Чему мы научились разрабатывая микросервисы?
Vadim Madison
 
RAD на Java: как устроена CUBA Platform?
RAD на Java: как устроена  CUBA Platform?RAD на Java: как устроена  CUBA Platform?
RAD на Java: как устроена CUBA Platform?
Aleksey Stukalov
 
Python Development process in Yandex
Python Development process in YandexPython Development process in Yandex
Python Development process in Yandex
aviatakz
 
Процессы разработки в Яндексе
Процессы разработки в ЯндексеПроцессы разработки в Яндексе
Процессы разработки в Яндексе
Andrey Kazarinov
 
Приватный клауд на базе OpenStack
Приватный клауд на базе OpenStackПриватный клауд на базе OpenStack
Приватный клауд на базе OpenStack
Ilya Alekseyev
 
Delphix Dynamic Data Platform, как попробовать и правильно оценить решение
Delphix Dynamic Data Platform, как попробовать и правильно оценить решениеDelphix Dynamic Data Platform, как попробовать и правильно оценить решение
Delphix Dynamic Data Platform, как попробовать и правильно оценить решение
Sergii Stukan
 
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
SECON
 
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
Pavel Tsukanov
 
Эксплуатация container-based-инфраструктур / Николай Сивко (okmeter.io)
Эксплуатация container-based-инфраструктур / Николай Сивко (okmeter.io)Эксплуатация container-based-инфраструктур / Николай Сивко (okmeter.io)
Эксплуатация container-based-инфраструктур / Николай Сивко (okmeter.io)
Ontico
 

Similar to Docker Containers orchestrators: Kubernetes vs. Swarm (20)

Другая виртуализация
Другая виртуализацияДругая виртуализация
Другая виртуализация
 
Windows Azure Internals
Windows Azure InternalsWindows Azure Internals
Windows Azure Internals
 
DevCon School. Azure Microservices and Containers
DevCon School. Azure Microservices and ContainersDevCon School. Azure Microservices and Containers
DevCon School. Azure Microservices and Containers
 
Инфраструктура распределенных приложений на nodejs / Станислав Гуменюк (Rambl...
Инфраструктура распределенных приложений на nodejs / Станислав Гуменюк (Rambl...Инфраструктура распределенных приложений на nodejs / Станислав Гуменюк (Rambl...
Инфраструктура распределенных приложений на nodejs / Станислав Гуменюк (Rambl...
 
Управление облачной инфраструктурой
Управление облачной инфраструктуройУправление облачной инфраструктурой
Управление облачной инфраструктурой
 
Настройка kubernetes: tips and tricks / Михаил Прокопчук (Avito)
Настройка kubernetes: tips and tricks / Михаил Прокопчук (Avito)Настройка kubernetes: tips and tricks / Михаил Прокопчук (Avito)
Настройка kubernetes: tips and tricks / Михаил Прокопчук (Avito)
 
Настройка Kubernetes: tips ans tricks
Настройка Kubernetes: tips ans tricksНастройка Kubernetes: tips ans tricks
Настройка Kubernetes: tips ans tricks
 
Net core and linux in production
Net core and linux in productionNet core and linux in production
Net core and linux in production
 
Нюансы запуска приложений в Kubernetes
Нюансы запуска приложений в KubernetesНюансы запуска приложений в Kubernetes
Нюансы запуска приложений в Kubernetes
 
Чему мы научились, разрабатывая микросервисы / Вадим Мадисон (RuTube)
Чему мы научились, разрабатывая микросервисы / Вадим Мадисон (RuTube)Чему мы научились, разрабатывая микросервисы / Вадим Мадисон (RuTube)
Чему мы научились, разрабатывая микросервисы / Вадим Мадисон (RuTube)
 
Чему мы научились разрабатывая микросервисы?
Чему мы научились разрабатывая микросервисы?Чему мы научились разрабатывая микросервисы?
Чему мы научились разрабатывая микросервисы?
 
os_components
os_componentsos_components
os_components
 
RAD на Java: как устроена CUBA Platform?
RAD на Java: как устроена  CUBA Platform?RAD на Java: как устроена  CUBA Platform?
RAD на Java: как устроена CUBA Platform?
 
Python Development process in Yandex
Python Development process in YandexPython Development process in Yandex
Python Development process in Yandex
 
Процессы разработки в Яндексе
Процессы разработки в ЯндексеПроцессы разработки в Яндексе
Процессы разработки в Яндексе
 
Приватный клауд на базе OpenStack
Приватный клауд на базе OpenStackПриватный клауд на базе OpenStack
Приватный клауд на базе OpenStack
 
Delphix Dynamic Data Platform, как попробовать и правильно оценить решение
Delphix Dynamic Data Platform, как попробовать и правильно оценить решениеDelphix Dynamic Data Platform, как попробовать и правильно оценить решение
Delphix Dynamic Data Platform, как попробовать и правильно оценить решение
 
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
 
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
 
Эксплуатация container-based-инфраструктур / Николай Сивко (okmeter.io)
Эксплуатация container-based-инфраструктур / Николай Сивко (okmeter.io)Эксплуатация container-based-инфраструктур / Николай Сивко (okmeter.io)
Эксплуатация container-based-инфраструктур / Николай Сивко (okmeter.io)
 

Docker Containers orchestrators: Kubernetes vs. Swarm

  • 1. Оркестратор Docker: Swarm или Kubernetes Дмитрий Лазаренко, Jelastic
  • 6. Но это не тривиально…
  • 7. Но это не тривиально…
  • 8. Как бы вы строили приложение из 1000 узлов, не имея возможности зайти в его админку? Вообще никогда.
  • 10. Идеология Kubernetes Любой компонент в любой момент может упасть: • сервер • жесткий диск • сеть • VM • контейнер • приложение
  • 11. Что позволяет делать Kubernetes? 1. Вы декларативно описываете конфигурацию приложения (YAML) 2. Каждая группа компонент (Pod) именуется (Label) 3. Описываете какие группы компонент должны быть продублированы, например сервис A запускать в 5 экземплярах 4. Kubernetes разворачивает указанную конфигурацию на доступной инфраструктуре (Nodes) 5. Kubernetes следит за тем, чтобы текущая конфигурация приложения всегда соответствовала эталонной 6. Есть встроенные health checks, на основе которых происходит оценка здоровья приложения и замена больных Pod на новые 7. В итоге ваше приложение всегда имеет нужное количество запущенных экземпляров
  • 12. Архитектура Kubernetes 1. Master – Оркестратор 2. Nodes - рабочие сервера
  • 14. Nodes 1. Каждый узел состоит из набора Pod-ов 2. Каждый Pod состоит из набора связанных контейнеров 3. Pod, а не контейнер – единица масштабирования в Kubernetes 4. Kubernetes содержит встроенные алгоритмы для Anti-affinity
  • 15. Volumes 1. Empty Dir 2. NFS 3. GCEPersistentDisk 4. awsElasticBlockStore 5. Glusterfs 6. Iscsi 7. Rbd 8. Secrets
  • 16. Labels 1. Разметка вашей конфигурации. KEY/VALUE 2. “labels”: { “tier”: “frontend” “application.awesome-game/environment”: “production” }
  • 17. Label selector 1. Механизм запросов к Labels 2. tier != frontend, game = super-shooter-2 3. environment in (production, qa) tier notin (frontend, backend) partition
  • 18. Replication controller 1. Несколько копий одного Pod называются репликами 2. Replication Controller следит за поддержанием заданного уровня репликации Pod 3. Обеспечивает защиту от сбоев 4. Позволяет изменять label для конкретного Pod, таким образом исключая его из репликации или проводить ZDT Rolling Updates 5. Масштабирование приложения происходит только вручную через смену количества реплик для конкретного Pod
  • 19. Services 1. Reverse-proxy 2. Проброс HTTP-запросов из вне на PODы 3. Сервисы имеют внешние IP 4. Простая Round-Robin балансировка
  • 21. Service Discovery • Переменные окружения из Pod появляются на Node • Cluster DNS- Специальный Pod  Etcd – хранение конфигурации  SkyDns – DNS-сервер, читающий из Etcd  Kube2sky –публикует актуальную информацию из Kubernetes Master в Etcd
  • 22. Health checking ▪ TCP Socket ▪ HTTP GET ▪ Container Exec livenessProbe: enabled: true type: http initialDelaySeconds: 30 httpGet: path: /_status/healthz port: 8080
  • 24. Как развернуть? ▪ Local (Docker-based) ▪ Vagrant ▪ Local (No VM) ▪ Hosted Solution: ▪ Google Container Engine ▪ AWS ▪ Azure ▪ Mesosphere ▪ OpenStack Magnum/Murano
  • 25. Преимущества Kubernetes 1. Следит за тем, что ваше приложение всегда содержит нужное количество запущенных экземпляров 2. Хорошо подходит для Rolling updates 3. Плохо подходит для Stateful приложений 4. Есть проблемы с авто-масштабированием приложений
  • 26. Недостатки Kubernetes 1. Сложно развернуть рабочий кластер своими руками 2. Сложно настроить автоматическое горизонтальное масштабирование 3. Очень многое приходится делать в CLI 4. Логика оркестрации скрыта в недрах Kubernetes 5. Контейнер не является единицей управления
  • 29. • Управляет узлами (Nodes) в кластере • Использует Docker APls для общения с Docker Daemon на каждом узле • Может быть кластеризирован Swarm Manager
  • 30. • Отвечает за размещение контейнеров на узлах (Nodes) • Pluggable architecture - Bring your own scheduler • Каждый Scheduler состоит из: • Стратегии размещения • Списка фильтров Scheduler
  • 31. • Bin Packaging • Упаковывает узлы максимально полно Scheduler - стратегии
  • 32. Scheduler – Bin Packaging
  • 33. • Bin Packaging • Упаковывает узлы максимально полно • Spread • Распределяем равномерно • Random • Обычно только для отладки Scheduler - стратегии
  • 34. • Affinity Filter • Constraint Filter • Health Filter – Выбирает только здоровые узлы • Port Filter Scheduler - фильтры
  • 35. 1. Каждый Docker-host может иметь различный набор меток • OS, Storage (ssd, disk), kernel, env 2. Выбрать хост можно, указав критерий из меток • storage=ssd • region=us-east • environment=production • Стандартные типы: • node ID or node Name (using key “node”) • storagedriver • executiondriver • kernelversion • operatingsystem Constraint Filter
  • 36. 1. Affinity и anti-affinity правила • Помести db туда же, где и nginx • Помести db туда, где есть указанный image • Не помещай контейнер, если label==frontend 2. Ограничения могут быть жесткими и мягкими Affinity filters
  • 37. 1. Поместить контейнер, только если на узле свободен определенный публичный порт. Например 80 или 443 Port filters
  • 38. 1. Можно объявить зависимости от уже существующих контейнеров 1. Shared volumes 2. Links 3. Shared network stacks Зависимости в фильтрах
  • 39. • RAM • docker run -m 1g • CPU • docker run -c 1 • Ports • docker run -p 80:80 Resource Management
  • 40. • Token Based • etcd based • Zookeeper based • Consul Based • File Based • Bring your own? Service Discovery
  • 41. High Availability • Multiple Swarm Managers • Похоже на Master-Master репликацию • При падении главного Master Manager, выбирается новый Master • Работает только с • Consul • Etcd • Zookeeper • Требуется консенсус для корректного выбора нового Master
  • 42. Requests Routing • Нет стандартных паттернов • DIY
  • 43. Как развернуть? ▪ Вручную через Docker ▪ Docker machine ▪ OpenStack Magnum
  • 44. Преимущества Swarm 1. Позволяет описать детально жизненный цикл вашего приложения 2. Управляем лучше, чем Kubernetes в части affinity & anti- affinity 3. Расширяемость 4. Родной оркестратор для Docker
  • 45. Недостатки Swarm 1. Сложно развернуть рабочий кластер своими руками 2. Сложно настроить автоматическое горизонтальное масштабирование 3. Абсолютно все приходится делать через CLI 4. Нет возможности декларативно описать развертывание приложения 5. Нет встроенных health-checks 6. Нет автоматического rescheduling при падениях узлов 7. Только недавно вышел в Production