Как ведет себя kube-прокси, когда не может связаться с мастером? - PullRequest
2 голосов
/ 14 февраля 2020

Из того, что я читал о Кубернетесе, если мастер (ы) d ie, рабочие все еще должны иметь возможность функционировать как обычно ({ ссылка }), хотя никакое новое планирование не будет Встречаются.

Однако я обнаружил, что это не тот случай, когда мастер также может планировать рабочие модули. Возьмем двухузловой кластер, где один узел является мастером, а другой - рабочим, и мастер удаляет все вредные воздействия:

diagram

Если я Выключите мастер и docker exec в один из контейнеров на рабочем. Я вижу, что:

nc -zv ip-of-pod 80

успешно, но

nc -zv ip-of-service 80

не удается в половине случаев. Версия Kubernetes v1.15.10, в которой используется режим iptables для kube-proxy.

Я предполагаю, что, поскольку kube-proxy на рабочем узле не может подключиться к серверу, он не удалит главный узел из правил iptables.

Вопросы:

  1. Ожидается ли поведение, что kube-proxy не прекратит маршрутизацию к модулям на главных узлах, или что-то "сломано"?
  2. Доступны ли какие-либо обходные пути для такого рода настройки, позволяющие рабочим узлам по-прежнему функционировать правильно?

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

Ответы [ 3 ]

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

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

Kube-proxy (https://kubernetes.io/docs/concepts/overview/components/#kube -proxy ) - это компонент, развернутый на всех узлах кластера, который обрабатывает сетевое и маршрутизационное соединение с вашими модулями. Таким образом, даже если ваш главный узел не работает, kube-proxy по-прежнему нормально работает на рабочем узле и будет перенаправлять трафик c на ваши модули, работающие на рабочем узле.

Если все ваши модули работают на рабочих узлах (которые все еще работают), тогда kube-proxy продолжит направлять трафик c на ваши модули даже через службу.

2 голосов
/ 16 февраля 2020

Ожидается ли поведение, что kube-proxy не остановит маршрутизацию к модулям на главных узлах, или что-то «сломано»?

Доступны ли какие-либо обходные пути для такого рода настройки, позволяющие рабочим узлам по-прежнему функционировать правильно?

Ведущий кластера играет роль лица, принимающего решения для различных действий в узлах кластера. , Это может включать планирование рабочих нагрузок, управление жизненным циклом рабочих нагрузок, масштабирование и т. Д. c. Каждый узел управляется основными компонентами и содержит службы, необходимые для запуска модулей. Службы на узле обычно включают в себя kube-proxy, среду выполнения контейнера и kubelet.

Компонент kube-proxy обеспечивает соблюдение сетевых правил на узлах и помогает kubernetes управлять подключениями между модулями и службами. Кроме того, kube-proxy действует как выходной контроллер балансировки нагрузки, который постоянно отслеживает сервер API kubernetes и постоянно обновляет подсистему iptables узла на его основе.

Проще говоря, только главный узел знает обо всем и отвечает за создание списка правил маршрутизации, а также на основе добавления или удаления узла и т. д. c. kube-proxy играет своего рода принудительную функцию, посредством которой он отвечает за проверку с помощью master, синхронизацию информации и применение правил в списке.

Если главный узел (сервер API) не работает, кластер не будет способен отвечать на команды API или развертывать узлы. Если другой главный узел недоступен, не должно быть никого, кто мог бы проинструктировать рабочие узлы об изменении в распределении работы, и, следовательно, они должны продолжать выполнять операции, которые были ранее запланированы главным, до тех пор, пока главный узел не вернется. и дает разные инструкции. В дополнение к этому, kube-proxy также не сможет получить последние правила с помощью syn c до master, однако он не должен останавливать маршрутизацию и должен продолжать обрабатывать функции сети и маршрутизации (использует ранее определенные правила iptable, которые были определены до того, как мастер-узел вышел из строя), который должен обеспечивать сетевую связь с вашими модулями, при условии, что все модули в рабочих узлах все еще работают и работают.

Архитектура на основе одного главного узла не является предпочтительной архитектурой развертывания для производства. Учитывая, что отказоустойчивость и надежность являются одной из основных бизнес-целей kubernetes, рекомендуется в качестве наилучшей практики использовать архитектуру на основе кластера HA, чтобы избежать единой точки отказа.

1 голос
/ 14 февраля 2020

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

...