kubernetes на микросервисах докеров на экземпляре AWS EC2

Моя установка для разработки использует развертывание микросервисов в среде Docker на инстансе Amazon EC2. Теперь мы пытаемся реализовать Kubernetes в этом экземпляре EC2 для автоматического масштабирования и балансировки нагрузки микросервисов, развернутых в Docker.

Я видел один метод установки kubectl и minikube и настройки Kubernetes с узлом и подами (я думаю, этот метод предназначен только для локального тестирования). Другой источник имеет гигантский процесс наличия двух-трех экземпляров EC2, один из которых является ведущим, а другой - ведомым, с той же настройкой.

Могу ли я установить Kubernetes только на главном узле и реализовать автомасштабирование и балансировку нагрузки на этом одном узле? Можно ли хранить все в одном экземпляре EC2, где находятся мои микросервисы?


person Chella Kumaran    schedule 01.07.2020    source источник
comment
Настоящая сила Kubernetes - это возможность динамически планировать поды в многоузловой среде. Вы можете рассматривать AWS EKS как готовое решение. Вы можете установить Kubernetes на одном узле, но объем, который вы сможете масштабировать, будет внутренне ограничен. Тем не менее, это не совсем тот вопрос программирования, на который лучше всего ответить.   -  person David Maze    schedule 01.07.2020
comment
@DavidMaze Спасибо за ваше предложение. Упомянутый единый узел означает один экземпляр EC2? Таким образом, для автоматического масштабирования / балансировки нагрузки микросервисов, развернутых на одном экземпляре EC2 с использованием кубернетов, требуются другие экземпляры EC2 с такими же микросервисами.   -  person Chella Kumaran    schedule 01.07.2020
comment
Не могли бы вы рассказать об основной причине этого решения о переходе на standalone-k8s с EC2 + Docker? У вас возникают проблемы с производительностью или сложностью системы? Это необходимо для того, чтобы дать точное руководство.   -  person Nick    schedule 02.07.2020
comment
@Nick Простая причина использовать автономные кубернеты на EC2 + Docker - это использовать утилиту с открытым исходным кодом, а не платить за AWS EKS. Основная проблема и вопрос: у меня на докере работает 30 микросервисов. Если мне нужно сохранить ведущие-ведомые узлы, нужно ли мне иметь 30 служб на обоих узловых серверах?   -  person Chella Kumaran    schedule 02.07.2020


Ответы (1)


Могу ли я установить Kubernetes только на главном узле и реализовать автомасштабирование и балансировку нагрузки на этом одном узле?

Да, конечно.

Можно ли хранить все в одном экземпляре EC2, где находятся мои микросервисы?

Да, ты можешь. Однако, если мы говорим о продакшене, это не лучшая практика.

Моя установка для разработки использует развертывание микросервисов в среде Docker на инстансе Amazon EC2. Теперь мы пытаемся реализовать Kubernetes в этом экземпляре EC2 для автоматического масштабирования и балансировки нагрузки микросервисов, развернутых в Docker.

Я вижу следующие проблемы с этим подходом.

  1. вы собираетесь увеличить нагрузку на узел, так как Kubernetes (k8s) сам по себе дает некоторые накладные расходы
  2. как сказал @DavidMaze, k8s рассчитан на большую нагрузку в многоузловой среде. И вы пытаетесь использовать его только для автомасштабирования для модулей.

У меня на докере запущено 30 микросервисов.

Похоже, это минимум 30 контейнеров, поэтому, скорее всего, это будет примерно 30 контейнеров. Имейте в виду, что в дополнение к модулям, запрошенным пользователем, k8s запускает дюжину модулей в пространстве имен kube-system (dns, kube-proxy, default-backend и т. Д.).

Кроме того, вы упомянули автомасштабирование, поэтому на этом единственном узле может быть довольно много модулей.

Ограничения.

K8s рекомендует максимальное количество 110 модулей на узел.

До этого числа Kubernetes был протестирован на надежность работы с общими типами узлов.

Большинство управляемых сервисов k8s даже налагают жесткие ограничения на количество модулей на узел:

  • В Amazon Elastic Kubernetes Service (EKS) максимальное количество модулей на узел зависит от типа узла и находится в диапазоне от 4 до 737.
  • В Google Kubernetes Engine (GKE) предел составляет 100 модулей на узел, независимо от тип узла.
  • В службе Azure Kubernetes (AKS) ограничение по умолчанию составляет 30 модулей на узел, но его можно увеличить до 250.

Доступность.

Если у вас всего несколько узлов, то влияние отказавшего узла больше, чем если бы у вас было много узлов. Например, если у вас всего два узла, и один из них выходит из строя, то примерно половина ваших подов исчезнет. А если у вас всего один узел (с БД конфигурации кластера на нем) ... :)

Таким образом, вы не получаете преимущества от переноса рабочих нагрузок отказавших узлов на другие узлы.

Если у вас есть требования к высокой доступности, вам может потребоваться определенное минимальное количество узлов в вашем кластере.

Подвести итог:

  1. Накладные расходы на поддержку такой настройки (и более крупного экземпляра EC2) могут быть больше, чем цена управляемого решения (EKS);
  2. Установка выглядит довольно хрупкой, и вы не получаете главного преимущества надежности. Это может привести к разрушительным последствиям.

Другой источник имеет гигантский процесс наличия двух-трех экземпляров EC2, один из которых является ведущим, а другой - ведомым, с той же настройкой.

Есть несколько способов установить k8s. Думаю, вам стоит проверить инструмент kops. Кроме того, есть очень подробное руководство под названием kubernetes-the-hard-way пользователя Kelsey Hightower.

И последнее, но не менее важное: есть хорошая статья по теме. Кроме того, на StackOverflow есть несколько подобных обсуждений.

Надеюсь, эта информация проливает свет на проблему и отвечает на ваши вопросы :)

person Nick    schedule 02.07.2020