Обидва - оркестратори: керують контейнерами на кластері серверів за описом бажаного стану. Різниця - у складності й можливостях.
Docker Swarm - вбудований у Docker Engine:
docker swarm init
docker stack deploy -c compose.yaml myapp
docker service scale myapp_app=4
- сервіс - опис того, що має працювати (образ, кількість реплік, порти, ресурси);
- задача (task) - конкретний контейнер сервісу на конкретному вузлі;
- стек - набір сервісів з файлу у форматі Compose (з розділом
deploy); - вбудовані: overlay-мережі між вузлами, балансування (routing mesh), секрети, поступові оновлення з відкатом.
Kubernetes - окрема платформа зі своїми поняттями:
- Pod - найменша одиниця: один чи кілька контейнерів зі спільною мережею;
- Deployment - бажана кількість однакових pod-ів і стратегія оновлення;
- Service - стабільна адреса й балансування до pod-ів;
- Ingress / Gateway - вхід HTTP-трафіку ззовні;
- ConfigMap, Secret, томи (PersistentVolume), горизонтальне автомасштабування, оператори для баз даних і черг.
Порівняння:
| Swarm | Kubernetes | |
|---|---|---|
| поріг входу | низький: знайомий формат Compose | високий: багато понять і YAML |
| встановлення | одна команда | керований сервіс чи складне налаштування |
| екосистема | обмежена | величезна (Helm, оператори, моніторинг) |
| автомасштабування | немає вбудованого | є (HPA, кластерні автоскейлери) |
| популярність, вакансії | невелика | стандарт індустрії |
Коли достатньо Swarm: кілька серверів, кілька сервісів, невелика команда без окремого DevOps, потреба в простих поступових оновленнях і відмовостійкості. Багато PaaS для самостійного хостингу (наприклад, Dokploy) використовують Swarm під капотом.
Коли Kubernetes: десятки сервісів, кілька команд, автомасштабування, складні мережеві й безпекові політики, керований сервіс у хмарі - і готовність інвестувати в його знання.
Помилка вибору: Kubernetes для одного Laravel-застосунку з базою - складність, яка забирає більше часу, ніж дає користі.