docker containers orchestrators: kubernetes vs. swarm
TRANSCRIPT
![Page 1: Docker Containers orchestrators: Kubernetes vs. Swarm](https://reader035.vdocuments.mx/reader035/viewer/2022062400/587d53de1a28abee158b52bf/html5/thumbnails/1.jpg)
Оркестратор Docker: Swarm или Kubernetes
Дмитрий Лазаренко, Jelastic
![Page 2: Docker Containers orchestrators: Kubernetes vs. Swarm](https://reader035.vdocuments.mx/reader035/viewer/2022062400/587d53de1a28abee158b52bf/html5/thumbnails/2.jpg)
Микросервисы
![Page 3: Docker Containers orchestrators: Kubernetes vs. Swarm](https://reader035.vdocuments.mx/reader035/viewer/2022062400/587d53de1a28abee158b52bf/html5/thumbnails/3.jpg)
Микросервисы vs. Монолит
![Page 4: Docker Containers orchestrators: Kubernetes vs. Swarm](https://reader035.vdocuments.mx/reader035/viewer/2022062400/587d53de1a28abee158b52bf/html5/thumbnails/4.jpg)
Оркестраторы контейнеров
![Page 5: Docker Containers orchestrators: Kubernetes vs. Swarm](https://reader035.vdocuments.mx/reader035/viewer/2022062400/587d53de1a28abee158b52bf/html5/thumbnails/5.jpg)
Контейнеры могут быть спасением для разработчиков
![Page 6: Docker Containers orchestrators: Kubernetes vs. Swarm](https://reader035.vdocuments.mx/reader035/viewer/2022062400/587d53de1a28abee158b52bf/html5/thumbnails/6.jpg)
Но это не тривиально…
![Page 7: Docker Containers orchestrators: Kubernetes vs. Swarm](https://reader035.vdocuments.mx/reader035/viewer/2022062400/587d53de1a28abee158b52bf/html5/thumbnails/7.jpg)
Но это не тривиально…
![Page 8: Docker Containers orchestrators: Kubernetes vs. Swarm](https://reader035.vdocuments.mx/reader035/viewer/2022062400/587d53de1a28abee158b52bf/html5/thumbnails/8.jpg)
Как бы вы строили приложение из 1000 узлов, не имея возможности
зайти в его админку? Вообще никогда.
![Page 9: Docker Containers orchestrators: Kubernetes vs. Swarm](https://reader035.vdocuments.mx/reader035/viewer/2022062400/587d53de1a28abee158b52bf/html5/thumbnails/9.jpg)
Kubernetes
![Page 10: Docker Containers orchestrators: Kubernetes vs. Swarm](https://reader035.vdocuments.mx/reader035/viewer/2022062400/587d53de1a28abee158b52bf/html5/thumbnails/10.jpg)
Идеология Kubernetes
Любой компонент в любой момент может упасть: • сервер• жесткий диск• сеть• VM• контейнер• приложение
![Page 11: Docker Containers orchestrators: Kubernetes vs. Swarm](https://reader035.vdocuments.mx/reader035/viewer/2022062400/587d53de1a28abee158b52bf/html5/thumbnails/11.jpg)
Что позволяет делать Kubernetes?
1. Вы декларативно описываете конфигурацию приложения (YAML)
2. Каждая группа компонент (Pod) именуется (Label)3. Описываете какие группы компонент должны быть
продублированы, например сервис A запускать в 5 экземплярах
4. Kubernetes разворачивает указанную конфигурацию на доступной инфраструктуре (Nodes)
5. Kubernetes следит за тем, чтобы текущая конфигурация приложения всегда соответствовала эталонной
6. Есть встроенные health checks, на основе которых происходит оценка здоровья приложения и замена больных Pod на новые
7. В итоге ваше приложение всегда имеет нужное количество запущенных экземпляров
![Page 12: Docker Containers orchestrators: Kubernetes vs. Swarm](https://reader035.vdocuments.mx/reader035/viewer/2022062400/587d53de1a28abee158b52bf/html5/thumbnails/12.jpg)
Архитектура Kubernetes
1. Master – Оркестратор2. Nodes - рабочие
сервера
![Page 13: Docker Containers orchestrators: Kubernetes vs. Swarm](https://reader035.vdocuments.mx/reader035/viewer/2022062400/587d53de1a28abee158b52bf/html5/thumbnails/13.jpg)
Архитектура Kubernetes
![Page 14: Docker Containers orchestrators: Kubernetes vs. Swarm](https://reader035.vdocuments.mx/reader035/viewer/2022062400/587d53de1a28abee158b52bf/html5/thumbnails/14.jpg)
Nodes
1. Каждый узел состоит из набора Pod-ов
2. Каждый Pod состоит из набора связанных контейнеров
3. Pod, а не контейнер – единица масштабирования в Kubernetes
4. Kubernetes содержит встроенные алгоритмы для Anti-affinity
![Page 15: Docker Containers orchestrators: Kubernetes vs. Swarm](https://reader035.vdocuments.mx/reader035/viewer/2022062400/587d53de1a28abee158b52bf/html5/thumbnails/15.jpg)
Volumes
1. Empty Dir2. NFS3. GCEPersistentDisk4. awsElasticBlockStore5. Glusterfs6. Iscsi7. Rbd8. Secrets
![Page 16: Docker Containers orchestrators: Kubernetes vs. Swarm](https://reader035.vdocuments.mx/reader035/viewer/2022062400/587d53de1a28abee158b52bf/html5/thumbnails/16.jpg)
Labels
1. Разметка вашей конфигурации. KEY/VALUE2. “labels”: {
“tier”: “frontend”“application.awesome-game/environment”:
“production”}
![Page 17: Docker Containers orchestrators: Kubernetes vs. Swarm](https://reader035.vdocuments.mx/reader035/viewer/2022062400/587d53de1a28abee158b52bf/html5/thumbnails/17.jpg)
Label selector
1. Механизм запросов к Labels2. tier != frontend, game = super-shooter-23. environment in (production, qa)
tier notin (frontend, backend)partition
![Page 18: Docker Containers orchestrators: Kubernetes vs. Swarm](https://reader035.vdocuments.mx/reader035/viewer/2022062400/587d53de1a28abee158b52bf/html5/thumbnails/18.jpg)
Replication controller
1. Несколько копий одного Pod называются репликами2. Replication Controller следит за поддержанием заданного
уровня репликации Pod3. Обеспечивает защиту от сбоев4. Позволяет изменять label для конкретного Pod, таким образом
исключая его из репликации или проводить ZDT Rolling Updates
5. Масштабирование приложения происходит только вручную через смену количества реплик для конкретного Pod
![Page 19: Docker Containers orchestrators: Kubernetes vs. Swarm](https://reader035.vdocuments.mx/reader035/viewer/2022062400/587d53de1a28abee158b52bf/html5/thumbnails/19.jpg)
Services
1. Reverse-proxy2. Проброс HTTP-запросов
из вне на PODы3. Сервисы имеют
внешние IP4. Простая Round-Robin
балансировка
![Page 20: Docker Containers orchestrators: Kubernetes vs. Swarm](https://reader035.vdocuments.mx/reader035/viewer/2022062400/587d53de1a28abee158b52bf/html5/thumbnails/20.jpg)
Services
![Page 21: Docker Containers orchestrators: Kubernetes vs. Swarm](https://reader035.vdocuments.mx/reader035/viewer/2022062400/587d53de1a28abee158b52bf/html5/thumbnails/21.jpg)
Service Discovery
•Переменные окружения из Pod появляются на Node•Cluster DNS- Специальный Pod Etcd – хранение конфигурации SkyDns – DNS-сервер, читающий из Etcd Kube2sky –публикует актуальную информацию из
Kubernetes Master в Etcd
![Page 22: Docker Containers orchestrators: Kubernetes vs. Swarm](https://reader035.vdocuments.mx/reader035/viewer/2022062400/587d53de1a28abee158b52bf/html5/thumbnails/22.jpg)
Health checking
▪TCP Socket▪HTTP GET▪Container Exec
livenessProbe:enabled: truetype: http
initialDelaySeconds: 30httpGet:
path: /_status/healthzport: 8080
![Page 23: Docker Containers orchestrators: Kubernetes vs. Swarm](https://reader035.vdocuments.mx/reader035/viewer/2022062400/587d53de1a28abee158b52bf/html5/thumbnails/23.jpg)
Порталы управления
![Page 24: Docker Containers orchestrators: Kubernetes vs. Swarm](https://reader035.vdocuments.mx/reader035/viewer/2022062400/587d53de1a28abee158b52bf/html5/thumbnails/24.jpg)
Как развернуть?
▪Local (Docker-based)▪Vagrant▪Local (No VM)▪Hosted Solution:
▪Google Container Engine▪AWS▪Azure▪Mesosphere▪OpenStack Magnum/Murano
![Page 25: Docker Containers orchestrators: Kubernetes vs. Swarm](https://reader035.vdocuments.mx/reader035/viewer/2022062400/587d53de1a28abee158b52bf/html5/thumbnails/25.jpg)
Преимущества Kubernetes
1. Следит за тем, что ваше приложение всегда содержит нужное количество запущенных экземпляров
2. Хорошо подходит для Rolling updates3. Плохо подходит для Stateful приложений4. Есть проблемы с авто-масштабированием приложений
![Page 26: Docker Containers orchestrators: Kubernetes vs. Swarm](https://reader035.vdocuments.mx/reader035/viewer/2022062400/587d53de1a28abee158b52bf/html5/thumbnails/26.jpg)
Недостатки Kubernetes
1. Сложно развернуть рабочий кластер своими руками2. Сложно настроить автоматическое горизонтальное
масштабирование3. Очень многое приходится делать в CLI4. Логика оркестрации скрыта в недрах Kubernetes5. Контейнер не является единицей управления
![Page 27: Docker Containers orchestrators: Kubernetes vs. Swarm](https://reader035.vdocuments.mx/reader035/viewer/2022062400/587d53de1a28abee158b52bf/html5/thumbnails/27.jpg)
Docker Swarm
![Page 28: Docker Containers orchestrators: Kubernetes vs. Swarm](https://reader035.vdocuments.mx/reader035/viewer/2022062400/587d53de1a28abee158b52bf/html5/thumbnails/28.jpg)
Docker Swarm
![Page 29: Docker Containers orchestrators: Kubernetes vs. Swarm](https://reader035.vdocuments.mx/reader035/viewer/2022062400/587d53de1a28abee158b52bf/html5/thumbnails/29.jpg)
• Управляет узлами (Nodes) в кластере• Использует Docker APls для общения с Docker
Daemon на каждом узле• Может быть кластеризирован
Swarm Manager
![Page 30: Docker Containers orchestrators: Kubernetes vs. Swarm](https://reader035.vdocuments.mx/reader035/viewer/2022062400/587d53de1a28abee158b52bf/html5/thumbnails/30.jpg)
• Отвечает за размещение контейнеров на узлах (Nodes)
• Pluggable architecture - Bring your own scheduler• Каждый Scheduler состоит из:
• Стратегии размещения• Списка фильтров
Scheduler
![Page 31: Docker Containers orchestrators: Kubernetes vs. Swarm](https://reader035.vdocuments.mx/reader035/viewer/2022062400/587d53de1a28abee158b52bf/html5/thumbnails/31.jpg)
• Bin Packaging• Упаковывает узлы максимально полно
Scheduler - стратегии
![Page 32: Docker Containers orchestrators: Kubernetes vs. Swarm](https://reader035.vdocuments.mx/reader035/viewer/2022062400/587d53de1a28abee158b52bf/html5/thumbnails/32.jpg)
Scheduler – Bin Packaging
![Page 33: Docker Containers orchestrators: Kubernetes vs. Swarm](https://reader035.vdocuments.mx/reader035/viewer/2022062400/587d53de1a28abee158b52bf/html5/thumbnails/33.jpg)
• Bin Packaging• Упаковывает узлы максимально полно
• Spread • Распределяем равномерно
• Random• Обычно только для отладки
Scheduler - стратегии
![Page 34: Docker Containers orchestrators: Kubernetes vs. Swarm](https://reader035.vdocuments.mx/reader035/viewer/2022062400/587d53de1a28abee158b52bf/html5/thumbnails/34.jpg)
• Affinity Filter• Constraint Filter • Health Filter – Выбирает только здоровые узлы• Port Filter
Scheduler - фильтры
![Page 35: Docker Containers orchestrators: Kubernetes vs. Swarm](https://reader035.vdocuments.mx/reader035/viewer/2022062400/587d53de1a28abee158b52bf/html5/thumbnails/35.jpg)
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
![Page 36: Docker Containers orchestrators: Kubernetes vs. Swarm](https://reader035.vdocuments.mx/reader035/viewer/2022062400/587d53de1a28abee158b52bf/html5/thumbnails/36.jpg)
1. Affinity и anti-affinity правила• Помести db туда же, где и nginx• Помести db туда, где есть указанный
image• Не помещай контейнер, если
label==frontend2. Ограничения могут быть жесткими и
мягкими
Affinity filters
![Page 37: Docker Containers orchestrators: Kubernetes vs. Swarm](https://reader035.vdocuments.mx/reader035/viewer/2022062400/587d53de1a28abee158b52bf/html5/thumbnails/37.jpg)
1. Поместить контейнер, только если на узле свободен определенный публичный порт. Например 80 или 443
Port filters
![Page 38: Docker Containers orchestrators: Kubernetes vs. Swarm](https://reader035.vdocuments.mx/reader035/viewer/2022062400/587d53de1a28abee158b52bf/html5/thumbnails/38.jpg)
1. Можно объявить зависимости от уже существующих контейнеров1. Shared volumes2. Links3. Shared network stacks
Зависимости в фильтрах
![Page 39: Docker Containers orchestrators: Kubernetes vs. Swarm](https://reader035.vdocuments.mx/reader035/viewer/2022062400/587d53de1a28abee158b52bf/html5/thumbnails/39.jpg)
• RAM• docker run -m 1g
• CPU• docker run -c 1
• Ports• docker run -p 80:80
Resource Management
![Page 40: Docker Containers orchestrators: Kubernetes vs. Swarm](https://reader035.vdocuments.mx/reader035/viewer/2022062400/587d53de1a28abee158b52bf/html5/thumbnails/40.jpg)
• Token Based• etcd based• Zookeeper based• Consul Based• File Based• Bring your own?
Service Discovery
![Page 41: Docker Containers orchestrators: Kubernetes vs. Swarm](https://reader035.vdocuments.mx/reader035/viewer/2022062400/587d53de1a28abee158b52bf/html5/thumbnails/41.jpg)
High Availability
• Multiple Swarm Managers• Похоже на Master-Master репликацию• При падении главного Master Manager,
выбирается новый Master• Работает только с
• Consul• Etcd• Zookeeper
• Требуется консенсус для корректного выбора нового Master
![Page 42: Docker Containers orchestrators: Kubernetes vs. Swarm](https://reader035.vdocuments.mx/reader035/viewer/2022062400/587d53de1a28abee158b52bf/html5/thumbnails/42.jpg)
Requests Routing
• Нет стандартных паттернов• DIY
![Page 43: Docker Containers orchestrators: Kubernetes vs. Swarm](https://reader035.vdocuments.mx/reader035/viewer/2022062400/587d53de1a28abee158b52bf/html5/thumbnails/43.jpg)
Как развернуть?
▪Вручную через Docker▪Docker machine▪OpenStack Magnum
![Page 44: Docker Containers orchestrators: Kubernetes vs. Swarm](https://reader035.vdocuments.mx/reader035/viewer/2022062400/587d53de1a28abee158b52bf/html5/thumbnails/44.jpg)
Преимущества Swarm
1. Позволяет описать детально жизненный цикл вашего приложения
2. Управляем лучше, чем Kubernetes в части affinity & anti-affinity
3. Расширяемость4. Родной оркестратор для Docker
![Page 45: Docker Containers orchestrators: Kubernetes vs. Swarm](https://reader035.vdocuments.mx/reader035/viewer/2022062400/587d53de1a28abee158b52bf/html5/thumbnails/45.jpg)
Недостатки Swarm
1. Сложно развернуть рабочий кластер своими руками2. Сложно настроить автоматическое горизонтальное
масштабирование3. Абсолютно все приходится делать через CLI 4. Нет возможности декларативно описать развертывание
приложения5. Нет встроенных health-checks6. Нет автоматического rescheduling при падениях узлов7. Только недавно вышел в Production