Вопрос о концепции назначения Кубернетес-Поду узлам - PullRequest
0 голосов
/ 15 апреля 2020

Я довольно новичок в Kuberenetes и хотел бы спросить о некоторых концепциях, связанных с назначением модуля kuberenetes.

Предположим, что необходимо выполнить развертывание с требованием 3 наборов реплик.

(1)

Предположим, что есть 4 узла, каждый из которых представляет собой отдельный физический сервер с различным ЦП и памятью.

Когда развертывание будет выполнено, как kubernetes начнет стручки к узлам? Будет ли сценарий, когда он будет размещать несколько модулей на одном сервере, в то время как сервер не имеет назначения модулей (из-за соображений ресурсов)?

(2)

Предположим, что есть 4 узла (на 4 одинаковых физических серверах), и на каждом из 4 узлов создается 1 модуль.

Предположим, что теперь один из узлов вышел из строя. Как бы kuberenetes справиться с этим? Будет ли он воссоздавать модуль на одном из трех других узлов, в зависимости от того, какой из них имеет больше доступных ресурсов?

Спасибо за любые советы заранее.

Ответы [ 2 ]

2 голосов
/ 15 апреля 2020

В документации Kubernetes есть краткое обсуждение Kubernetes Scheduler . Как правило, планирование довольно непрозрачно, но вы также стремитесь к довольно хорошо загруженным узлам; с точки зрения вашего приложения важно установить соответствующий ресурс requests: в спецификации вашего модуля. Если на каждом узле достаточно места для удовлетворения запросов на ресурсы, обычно не имеет значения, какой узел выбран.

В описываемом вами сценарии (1) возможно, что две реплики будет размещен на одном и том же узле, поэтому два узла go не будут использоваться. Это особенно верно, если узлы не идентичны и имеют ограничения по ресурсам: если вашим модулям требуется 4 ГБ ОЗУ, но у вас есть узлы, у которых меньше этого (после учета системных модулей и пакетов демона), модули могут не запланировано там.

Если узел выходит из строя (2) Kubernetes автоматически перепланирует модули, работающие на этом узле, если это возможно. «Отказ» является широким случаем и может включать в себя узел, намеренно остановленный для обновления или замены. В этом последнем случае вы имеете некоторый контроль над поведением кластера; см. Сбои в документации.

Во многих средах будет запущен кластерный автоскалер . Это может привести к тому, что узлы будут приходить автоматически и go: если вы попытаетесь запланировать модуль, и он не будет соответствовать, автоскалер выделит новый узел, а если узел загружен менее чем на 50%, он будет удален (и его стручки перенесены). В вашем первом сценарии вы могли бы начать только с одного узла, но когда реплики модуля не все подходят, автоскалер создаст новый узел, и как только он станет доступным, там могут быть запланированы лишние модули.

0 голосов
/ 15 апреля 2020
  1. Kubernetes попытается развернуть модули на нескольких узлах для повышения доступности и отказоустойчивости. Это будет основано на доступности ресурсов узлов. Поэтому, если какой-либо узел не обладает достаточной емкостью для размещения модуля, возможно, что на один и тот же узел запланировано более одной реплики модуля.

  2. Kubernetes перенесет модули с отказавшего узла на другой доступный узел, который имеет достаточную емкость для размещения модуля. В этом процессе снова, если не хватает узла, на котором можно разместить реплики, есть вероятность, что на одном узле запланировано более одной реплики.

Подробнее о расписании можно прочитать алгоритм здесь .

Вы можете влиять на планировщик с помощью сходства узлов и модулей и антиаффинности

...