Ответ 1
Есть много статей, которые объяснят различия. В двух словах:
- Оба пытаются решить ту же проблему - контейнерную оркестровку на большом количестве хостов. По существу эти проблемы можно разбить так:
- Планирование контейнеров через несколько хостов (с учетом использования ресурсов и т.д.)
- Группирование контейнеров в логические единицы
- Масштабирование контейнеров
- Балансировка нагрузки/доступ к этим контейнерам после их развертывания
- Прикрепление хранилища к контейнерам, независимо от того, будет ли оно общим или нет.
- Связь/взаимодействие между контейнерами/сгруппированными контейнерами
- Обнаружение сервисов в контейнерах (например, где есть служба X)
Как Кубернетес, так и Docker Swarm могут решить эти проблемы для вас, но они имеют разные соглашения об именах и идеи о том, как их решить. Различия относительно концептуальны. Есть статьи, которые сильно ухудшают это:
https://platform9.com/blog/compare-kubernetes-vs-docker-swarm/ https://torusware.com/blog/2016/09/hands-on-orchestration-docker-1-12-swarm-vs-kubernetes/ http://containerjournal.com/2016/04/07/kubernetes-vs-swarm-container-orchestrator-best/
По сути, они аналогичные продукты в одном и том же пространстве. Следует иметь в виду несколько предостережений:
- Kubernetes развивается с помощью агностического мышления контейнера (в настоящее время он поддерживает Docker, rkt и имеет некоторую поддержку hyper, тогда как докерный рой - только докер)
- Kubernetes является "облачным", так как он может работать одинаково в Azure, Google Container Engine и AWS - в настоящее время я не знаю, что это функция Docker Swarm, хотя вы можете настроить ее самостоятельно.
- Kubernetes - продукт с открытым исходным кодом. Если вам нужна коммерческая поддержка, вам нужно обратиться к третьей стороне, чтобы ее получить. Docker обеспечивает корпоративную поддержку для Swarm.
- Если вы знакомы с документооборотом, выполняющим докеры, Docker Swarm использует это для того, чтобы он был вам знаком и легче начать работу. Kubernetes требует определения обучения/обслуживания/развертывания, которые в то время как чистый yaml, являются корректировкой.