Kubernetes: один pod, больше контейнеров на большем количестве узлов

кто-нибудь может помочь мне создать файл конфигурации yaml для Kubernetes, чтобы столкнуться с такой ситуацией, как: один модуль с 3 контейнерами (например), и эти контейнеры должны быть развернуты на 3 узлах кластера (Google GCE).

|P|      |Cont1| ----> |Node1|
|O| ---> |Cont2| ----> |Node2| <----> GCE cluster
|D|      |Cont3| ----> |Node3|

Спасибо


person suikoy    schedule 10.11.2017    source источник
comment
kubernetes.io/docs/concepts/workloads/pods/pod-overview Как сказано в документации здесь: Контейнеры в поде автоматически размещаются и планируются совместно на одной физической или виртуальной машине в кластере. Это означает, что контейнеры пода всегда находятся на одном узле. Если вы хотите масштабировать по горизонтали, вы можете поместить контейнеры в отдельные модули.   -  person Dries De Rydt    schedule 10.11.2017
comment
кажется странным, что я не могу развернуть некоторые контейнеры над большим количеством узлов кластера, учитывая, что таким образом я не могу легко масштабировать батарею веб-сервера, используя эластичность кластера и утилиту kubernetes для выполнения некоторых операций за один раз...   -  person suikoy    schedule 10.11.2017
comment
Ну, в общем, компоненты не должны масштабироваться в равной мере. Ваша база данных может справиться с определенной нагрузкой, но, возможно, ваша веб-страница сама по себе нуждается в большем масштабировании, чтобы справиться с таким же количеством пользователей. В этом случае очень полезно, чтобы они могли масштабироваться отдельно. Если вы держите их в одном и том же контейнере, они всегда должны масштабироваться по горизонтали точно на один и тот же градус. Почему вы хотите объединить их вместе?   -  person Dries De Rydt    schedule 10.11.2017
comment
на самом деле идея заключалась в том, чтобы иметь модуль для базы данных и другой модуль для веб-сервера. Но я думал развиваться таким образом, потому что был уверен, что смогу использовать кластер для управления всеми веб-серверами как единым сервисом. С другой стороны, какой смысл иметь кластер узлов, если модуль с несколькими контейнерами можно развернуть только на одном узле? Учитывая, что узлы кластера имеют одинаковые аппаратные функции, наличие нескольких контейнеров в одном узле означает взвешивание одного и оставив другого разряженным. Теперь я действительно не понимаю полезности наличия кластера + kubernetes...   -  person suikoy    schedule 10.11.2017
comment
Допустим, на вашем узле есть 2 модуля, на которых запущен ваш веб-сервис. Ваш кластер будет балансировать нагрузку между обоими серверами, и теперь вы сможете обрабатывать больше трафика. Меньшие узлы также часто дешевле, чем иметь один большой монолит. Кроме того, если вы используете два веб-сервера и один из них выходит из строя, вы все равно можете обслуживать трафик из резервной копии. Kubernetes также перезапускает сервисы, которые выходят из строя. Вам следует изучить такие термины, как доступность и горизонтальная масштабируемость. Это также позволяет более эффективно использовать оборудование. Если у вас есть два небольших сервиса, они могут поместиться на одном узле, и вы сэкономите на затратах.   -  person Dries De Rydt    schedule 11.11.2017
comment
хорошо, но эти вещи можно было бы сделать и с облачными веб-сервисами (aws или gce), используя только виртуальную машину... Я понимаю, что могу разработать многоуровневую архитектуру с кластером и kubernetes, но я не вижу больших преимуществ этого решения. Кроме того, наличие дополнительного уровня абстракции (узел -> модуль -> код) может сделать конфигурации более сложными, чем подход виртуальной машины (узел -> код).   -  person suikoy    schedule 11.11.2017


Ответы (2)


Из концепций Kuberenets,

Поды в кластере Kubernetes можно использовать двумя основными способами: поды, запускающие один контейнер. Модель «один контейнер на под» — наиболее распространенный вариант использования Kubernetes; в этом случае вы можете думать о поде как о оболочке для одного контейнера, и Kubernetes управляет подами, а не контейнерами напрямую. Поды, запускающие несколько контейнеров, которые должны работать вместе. Pod может инкапсулировать приложение, состоящее из нескольких тесно связанных контейнеров, которым необходимо совместно использовать ресурсы. Эти совместно расположенные контейнеры могут образовывать единую связную единицу обслуживания — один контейнер обслуживает файлы из общего тома для общего доступа, а отдельный «боковой» контейнер обновляет или обновляет эти файлы. Pod объединяет эти контейнеры и ресурсы хранения в единый управляемый объект.

Короче говоря, вам, скорее всего, следует разместить каждый контейнер в одном поде, чтобы по-настоящему извлечь выгоду из архитектуры микросервисов по сравнению с монолитной архитектурой, обычно развертываемой на виртуальных машинах. Однако в некоторых случаях вы хотите рассмотреть возможность совместного размещения контейнеров. А именно, как описано в этой статье (Шаблоны для составных контейнеров ) некоторые из приложений составных контейнеров:

  • Боковые контейнеры

расширять и улучшать «основной» контейнер

  • Амбассадорные контейнеры

прокси локальное соединение с миром

  • Контейнеры-адаптеры

стандартизировать и нормализовать вывод

После того, как вы определите и запустите развертывания, планировщик будет нести ответственность за выбор наиболее подходящего размещения для ваших модулей, если только вы назначите узлы вручную путем определения меток в YAML развертывания (не рекомендуется, если вы не знаете, что делаете).

person Khaled    schedule 11.11.2017

Вы можете назначить несколько контейнеров одному модулю. Вы можете назначить pod'ы определенному пулу узлов. Но я не уверен, можно ли назначить несколько контейнеров нескольким узлам, работающим внутри одного модуля.

Здесь вы можете назначить каждый контейнер разным модулям (3 контейнера --> 3 модуля), а затем назначить каждый модуль другому пулу узлов, добавив этот код в файл .yaml вашего развертывания.

nodeSelector:
   nodeclass: pool1
person Sachith.Wanni    schedule 25.07.2018