Исследование готовности Kubernetes в мультитенантной системе - PullRequest
0 голосов
/ 14 апреля 2020

Я проектирую систему с одним развертыванием в kubernetes для нескольких арендаторов, но есть несколько баз данных, очередей и т. Д. c. за клиента. Все, что не имеет состояния, является общим, а все, что имеет состояние, является отдельным для каждого арендатора. На основе хоста запроса (tenant1.company.com или tenant2.company.com) код будет подключаться к соответствующим базам данных и очередям.

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

Я могу представить следующие варианты, ни один из которых не выглядит правильным:

  1. Подключиться ко всем базам данных и очередям и посмотреть, готовы ли они: Недостаток : это приведет к тому, что pod не будет готов, даже если один ресурс не работает.
  2. Подключение к какой-либо одной базе данных и очереди: Недостаток: на самом деле не проверяет готовность для всех проб.
  3. Do у меня вообще нет никакой проверки готовности.

Такое ощущение, что у меня есть разделение на уровне ресурсов для поддержки нескольких арендаторов (это мультитенант B2B, требующий времени и усилий для добавления нового арендатора), Мне также нужно иметь разделение на уровне развертывания в Kubernetes.

Это стандартный подход - либо полное разделение на всех уровнях, либо h одна единая система с одинаковыми общими ресурсами? Если нет, то как спроектировать датчики готовности?

1 Ответ

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

Насколько я понимаю, вы пытаетесь расширить зонд готовности Kubernetes Pod, чтобы отразить работоспособность приложения для определенного c арендатора. К сожалению, датчик готовности не предназначен для этого.

Единственная цель датчика готовности Kubernetes (даже новая функция Pod Ready++) - отразить определенную способность модуля Pod обслуживать трафик c. Контроллеры Deployment и StatefulSet учитывают состояние готовности Pod в процессе непрерывного обновления.

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

Страницы документации Kubernetes:

Для некоторых простых приложений или микросервисов, которые содержат только один Pod, он может отражать также состояние приложения. Но обычно архитектура приложения намного сложнее и содержит много частей, каждая из которых может иметь зависимости.

Иногда дешевле и проще создать собственную проверку работоспособности l oop в приложении внешнего интерфейса (www.example.com/healthz), которая отражает все состояние работоспособности приложения, принимая во внимание все состояния его компонентов и их зависимости, или собирать и агрегировать JSON статусы от других компонентов.

В мире Kubernetes компонентами / приложениями обычно являются Сервисы, которые балансируют трафик c в одном или нескольких Бочках. Таким образом, компонент исправен, если хотя бы один модуль за соответствующей службой находится в состоянии готовности. Количество готовых модулей за службой говорит о производительности приложения больше, чем о работоспособности приложения.

Что касается моей способности представить дизайн вашего приложения:

  • Я бы использовал несколько Ingress объекты, из-за которых трафик c направляется в выделенный для каждого клиентского интерфейса пользовательский интерфейс пространства имен арендатора . Все остальные ресурсы арендатора также размещены там.
  • Все общие компоненты, которые я бы поместил в дополнительное пространство имен, скажем, «shared / static / commmon / stateless» и создали бы ExternalName в пространстве имен каждого арендатора для доступа к ним (или Ingress, если я будет обслуживать это содержимое по указанному c URL-пути).
  • Я бы также развернул какое-нибудь решение для мониторинга приложений + кластера.

Таким образом, вы можете легко масштабировать части приложения, если некоторому арендатору требуется больше ресурсов.
Для управления развертыванием я бы используйте Схемы шлема . Таким образом, я могу легко развернуть еще одного арендатора или удалить / обновить существующего.

Существует множество различных решений для мониторинга работоспособности приложений, производительности, сбора метрик и журналов и выполнения действий при соблюдении определенных условий. Это лишь краткий список самых популярных решений:

PS: Если вы хотите внедрить автоматический выключатель для арендаторов, Istio имеет встроенную функциональность .

...