Чем отличается Kubernetes от Docker Swarm?

Коротко по сути

Оба — оркестраторы контейнеров, но разные по масштабу, философии и набору возможностей. Docker Swarm — лёгкая «встройка» в Docker (simple, opinionated). Kubernetes — полнофункциональная платформа для production-кластеров (flexible, extensible, с богатой экосистемой).

Архитектура и компоненты

  • Kubernetes: control plane (API-server, scheduler, controller-manager), etcd как единое хранилище состояния, kubelet на ноде, CNI-сети, CSI-драйверы для хранения. Чёткое разделение ролей и API-центричность.

  • Docker Swarm: manager/worker ноды, менеджеры формируют Raft-кластер; встроенные механизмы discovery и overlay network; меньше компонентов — проще стартовать.

Декларативность и расширяемость

  • K8s: декларативные манифесты, CRD (Custom Resource Definitions), Operators — можно расширять API, писать контроллеры, policy-as-code. Поддерживает сложные workflow.

  • Swarm: декларативные сервисы через docker stack/compose, но нет механизма расширения API уровня K8s.

Сетевые модели

  • K8s: использует CNI — можно выбирать Calico, Flannel, Cilium и пр.; поддержка NetworkPolicy, интеграция с service mesh (Istio, Linkerd). Более гибкая и мощная модель.

  • Swarm: встроенный overlay и routing mesh, проще в настройке; routing mesh даёт удобный ingress, но может быть ограничен в гибкости и сетевых политиках.

Хранение данных

  • K8s: PersistentVolume/PVC, StorageClass, динамическое provision-ление через CSI — хорошая поддержка stateful приложений (StatefulSet).

  • Swarm: volume drivers (NFS/Ceph/Cloud drivers) — работает, но нет единой, стандартизованной модели динамической provision-ки как в K8s.

Развёртывание и обновления

  • K8s: Deployments, DaemonSets, StatefulSets; rolling updates, canary/blue-green через дополнительные инструменты; fine-grained control (readiness, liveness, probes, PDB).

  • Swarm: сервисы с update-policy, rolling updates поддерживаются, но меньше опций по контролю поведения при обновлении.

Масштабирование и авто-скейлинг

  • K8s: HPA/VPA, Cluster Autoscaler; поддержка кастомных метрик.

  • Swarm: ручное масштабирование сервисов (docker service scale) или внешние инструменты/скрипты; нет встроенного autoscaling на уровне кластера.

Безопасность и политика доступа

  • K8s: RBAC, Admission Controllers, NetworkPolicy, интеграция с внешними IdP и KMS; богатые возможности политик.

  • Swarm: шифрование Raft и трафика между нодами, секреты, но менее богатая модель RBAC и ограниченные политики.

Экосистема и инструменты

  • K8s: огромная экосистема (Helm, Prometheus, Grafana, Istio, ArgoCD, Operators и т.д.), широкий выбор managed-провайдеров (EKS/GKE/AKS).

  • Swarm: проще, но экосистема гораздо уже; удобен для быстрых/локальных деплоев и простых production-кейсов.

Операционная сложность и входной порог

  • K8s: крутая кривая обучения, больше operational overhead (особенно при self-managed кластере), но мощность и гибкость окупают это в больших системах.

  • Swarm: лёгкий старт, простая операция и управление; меньше точек отказа, быстрее обучиться.

Когда выбирать что

  • Docker Swarm — простые проекты, быстрые PoC, команды без операционного опыта, локальная/edge-деплой (малый масштаб).

  • Kubernetes — production на масштабе, требования к HA, сетевой политике, storage, CI/CD, multi-cloud/complex orchestration.

Миграция и совместимость

Контейнерные образы совместимы, но манифесты и концепты (Service → Service/Ingress, Volume → PV/PVC, scaling, health checks) нужно переписать; для миграции есть инструменты и шаблоны, но потребуется тестирование.

Заканчивая технической картой отличий — выбор зависит от требований к функционалу, операционной зрелости команды и масштаба нагрузки.