Как и большинство подобных вопросов относительно развертывания, «это зависит», но позвольте мне попытаться ответить. Чтобы сначала не увидеть различия:
Docker compose vs (Docker swarm или Kubernetes)
Самое важное различие, которое вы должны признать, заключается в том, что docker compose может работать с несколькимиконтейнерное приложение на только для одного хоста . Он не может запустить ваше приложение на кластере компьютеров. Если вам нужно запустить ваше приложение в кластере, вы можете убрать опцию использования docker compose для этого. Для этого вам нужно будет использовать либо Docker Swarm, либо Kubernetes. Вы можете узнать больше об этом здесь и здесь .
Рой Docker vs Kubernetes
Короче говоря, они оба являются контейнерамиоркестровочные решения. Это означает, что вы будете использовать их для организации ваших контейнеров в кластере. Оба они, как правило, решают одну и ту же проблему, но по-разному. Оба они используются для:
- оркестровки контейнеров по кластеру
- масштабирование контейнеров
- балансировка нагрузки контейнеров
- связь между контейнерами
- и многое другое. В этом ответе вы можете увидеть сводку их сравнения.
Одним из преимуществ, если вы решите использовать Docker Swarm, является то, что инструменты CLI, используемые для Docker Swarm, будуточень похоже на стандартный Docker cli с некоторыми дополнительными опциями. Так что его настройка и использование может быть намного проще, если вы знакомы с командной строкой Docker. Также вы можете использовать ваш docker compose yaml файл для запуска непосредственно на Swarm. Вы можете прочитать об этом здесь и здесь .
С другой стороны, Kubernetes очень мощный и поддерживается всеми основными облачными провайдерами, такими как: AWS, Azure и Google. Облако. Это:
- с открытым исходным кодом
- при поддержке Cloud Native Computing Foundation (CNCF)
- имеет большое сообщество, поддерживающее его
- может бытьиспользуется с другими решениями для контейнеров (не только с докером)
Если вы используете использовать Kubernetes, имейте в виду, что вам нужно будет изучить отдельные инструменты для управления им, включая kubectl CLI.
Есть плюсы и минусы в использовании обоих, но я бы предложил использовать Kubernetes, если вы развертываете свое решение в облаке и стремитесь быть максимально независимыми от облаков.
Что такоелучший подход для производственного развертывания такой платформы?
Зная только информацию, которую вы нам предоставили, я бы сказал, что это также зависит от того, где вы планируете развернуть ее:
- На каком-либо облачном провайдере, таком как AWS, Azure, Google Cloud или другом?
- На не облачном провайдере, но на нескольких серверах или на некотором кластере серверов?
- На одном выделенном набореrver для всех ваших компонентов?
В некоторых облачных провайдерах, таких как AWS, Azure, Google Cloud или других?
Если вы используете какого-либо облачного провайдераи вы планируете развернуть его там, тогда я бы предложил использовать Kubernetes, поскольку основные облачные провайдеры имеют очень хорошую поддержку, и вы можете перенести его на другого облачного провайдера, если это необходимо. Я также предложил бы взглянуть на некоторые конкретные решения для оркестровки контейнеров для конкретного поставщика облачных услуг, который вы используете. Я использовал AWS ECS для развертывания, и у меня был очень хороший опыт с ним. Имейте в виду, что таким образом вы будете более привязаны к конкретному облачному провайдеру по сравнению с тем, если вы используете Kubernetes или Docker swarm.
На не облачном провайдере, но все же на нескольких серверах или на некотором кластере серверов?
Здесь вам снова нужно использовать рой Kubernetes или Docker для развертывания решения на нескольких серверах.
На одном выделенном сервере для всех ваших компонентов?
При техническом развертывании на одном сервере вы также можете использовать docker-compose. Тот же самый, который вы используете для настройки разработки с несколькими различными конфигурациями. Это, конечно, ограничит вас, если вы в какой-то момент решите развернуть кластер, так как позже вам потребуется перейти на Docker Swarm или Kubernetes.
Я мог бы развернуть его с помощью docker-compose довольно легко, ноКаково реальное преимущество использования сложных решений в качестве Kubernetes или Docker Swarm в подобном сценарии?
Я думаю, что в приведенном выше разделе я объяснил, каковы будут преимущества и недостатки использования docker compose дляразвертывание производства. Обычно я лично делаю так, чтобы у меня было 3 среды:
- Настройка среды разработки с помощью docker-compose
- Настройка производственной среды с Kubernetes и развертывание в кластере на AWS
- Настройка промежуточной среды (Copy of Production) с Kubernetes и развертывание в кластере на AWS, но с использованием меньшего количества серверов (ресурсов)
Поэтому для Staging я использую ту же конфигурацию Kubernetes, но с меньшим количеством серверов(Это дорого :)). Таким образом вы гарантируете, что ваша установка работает, так как вы используете ту же конфигурацию, но с меньшими ресурсами, так как для вашей подготовки не потребуется столько ресурсов, сколько для производства, используемого вашими клиентами.
Сколько контейнеров сБаза данных PostgreSQL я должен создать? Один контейнер PostgreSQL на микросервис или общий для всех микросервисов, использующих PostgreSQL?
Я бы не рекомендовал использовать контейнеры для баз данных на производстве. Почему? Есть много причин, почему нет. Просто есть слишком много рисков, и несколько человек сделали ошибку, сделав это. Конечно, это может работать для очень маленьких приложений, но я бы посоветовал не использовать докер для Postgres на производстве. Вы можете прочитать больше об этом здесь . Вот одна цитата из поста:
Вот довольно плохой анти-паттерн, который может доставить вам немало хлопот, даже если вы просто работаете над небольшим проектом. Вы не должны запускать приложения с отслеживанием состояния в инструментах оркестровки, которые созданы для приложений без сохранения состояния.
Если вы используете облачного провайдера, я бы предложил использовать встроенные службы для баз данных, таких как база данных как служба или дляAWS например RDS. Здесь вы можете прочитать об этом. Для Azure это будет Aurora, и другие облачные провайдеры имеют аналогичные решения. С другой стороны, для вашей настройки разработки можно использовать ваши базы данных внутри ваших док-контейнеров.
Заключение
В зависимости от ваших предпочтений и потребностей используйте Kubernetesили Docker Swarm для всех ваших услуг, кроме баз данных. Поскольку вы разрабатываете решение с использованием микросервисов с использованием kubernetes, вы не будете подвержены влиянию облачных вычислений. Это означает, что у вас будет возможность переносить настройку инфраструктуры, чтобы вы могли легко перенести ее в другого облачного провайдера. Конечно, если это важно для вас? Вы даже можете развернуть его на стандартных хостинг-провайдерах, которые не являются облачными провайдерами на одном или нескольких серверах.