Kubernetes - нужен ли Service Mesh?

Недавно я построил несколько микросервисов в кластере k8s с контроллером входящего трафика Nginx, и они работают нормально.

Когда я имел дело с коммуникациями между микросервисами, я попытался использовать gRPC, и это сработало. Затем я обнаружил, что когда микросервис A - ›gRPC -› микросервис B, все запросы были выполнены только в 1 модуле микросервиса B (например, всего 10 модулей доступны для микросервиса B). Чтобы сбалансировать загрузку запросов ко всем модулям микросервиса B, я попытался выполнить компоновку, и это сработало. Однако я понял, что gRPC иногда вызывает внутреннюю ошибку (например, 1 ошибку из 100 запросов), заставляя меня использовать способ DNS k8s (например, my-svc.my-namespace.svc.cluster-domain.example). Тогда запросы никогда не заканчиваются. Я начал задерживать gRPC и linkerd.

Позже меня заинтересовал istio. Я успешно развернул его в кластере. Однако я заметил, что он всегда создает свой собственный балансировщик нагрузки, который не очень соответствует существующему контроллеру входящего трафика Nginx.

Кроме того, я попробовал прометей и графану, а также k9s. Эти инструменты позволили мне лучше понять использование ЦП и памяти модулями.

Здесь у меня есть несколько вопросов, которые я хочу понять: -

  1. Если мне нужно отслеживать ресурсы кластера, у нас есть прометей, графана и k9s. Выполняют ли они ту же роль мониторинга, что и сервисная сетка (например, linkerd, istio)?
  2. Если k8s DNS уже может обеспечить балансировку нагрузки, нужна ли нам сервисная сетка?
  3. если использовать k8s без служебной сетки, отстает ли это от обычной практики?

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


person user3836484    schedule 27.01.2021    source источник


Ответы (2)


Простой ответ

Сервисная сетка для сервера Kubernetes не нужна

Теперь отвечу на ваши вопросы

Если мне нужно отслеживать ресурсы кластера, у нас есть прометей, графана и k9s. Выполняют ли они ту же роль мониторинга, что и сервисная сетка (например, linkerd, istio)?

K9s - это инструмент cli, который является заменой инструмента kubectl cli. Это не инструмент для мониторинга. Prometheus и Grafana - это инструменты мониторинга, которые должны будут использовать данные, предоставляемые приложениями (модулями), и строить данные временных рядов, которые могут быть визуализированы в виде диаграмм, графиков и т. Д. Однако приложения должны предоставлять данные мониторинга Prometheus. Служебные сетки могут использовать сопутствующие элементы и предоставлять некоторые метрики по умолчанию, полезные для мониторинга, такие как number of requests handled in a second. Вашему приложению не нужны какие-либо знания или реализация метрик. Таким образом, служебные сетки являются необязательными и разгружают такие общие вещи, как мониторинг или авторизация.

Если k8s DNS уже может обеспечить балансировку нагрузки, нужна ли нам сервисная сетка?

Сервисные сетки не нужны для балансировки нагрузки. Если в кластере запущено несколько служб и вы хотите использовать одну точку входа для всех служб, чтобы упростить обслуживание и сэкономить средства, используются контроллеры Ingress, такие как Nginx, Traefik, HAProxy. Кроме того, сервисные сети, такие как Istio, имеют собственный контроллер входящего трафика.

если использовать k8s без служебной сетки, отстает ли это от обычной практики?

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

В будущем Kubernetes может привнести некоторые функции из сервисных сетей.

person Malathi    schedule 27.01.2021
comment
Чтобы добавить к тому, что сказал @Malathi (с чем я согласен), если Service Meshes не нужны для балансировки нагрузки, они могут предложить гораздо больше вариантов стратегий балансировки нагрузки и маршрутизации. Перенос трафика с одной рабочей нагрузки на другую, маршрутизация на основе заголовков в разные версии, канареечное развертывание, разрыв цепи ... Это выходит далеко за рамки телеметрии и безопасности. - person Joel; 27.01.2021

Сервисная сетка - это не серебряная пуля, и она не подходит для каждого случая использования. Сервисная сетка не сделает все за вас, у нее также есть ошибки и ограниченные функции.

  1. Вы можете использовать Prometheus без Istio и получить очень хороший мониторинг приложений. Сервисная сетка может упростить вам некоторые задачи мониторинга, но это не значит, что вы не можете сделать это самостоятельно.
  2. Пожалуйста, не думайте о DNS как о решении для балансировки нагрузки. В Kubernetes есть сервисы и Ingress для балансировки нагрузки. Nginx Ingress сегодня очень мощный и имеет множество расширенных функций.
  3. Это сильно зависит от вашего варианта использования.
person Vasili Angapov    schedule 27.01.2021
comment
спасибо за комментарии. Теперь я вызываю внутренние службы через xxx-service.xxx-namespace .svc.cluster.local: 4000 / auth / login --- в то время как auth распознается входящим контроллером nginx и перенаправляется на auth-service. Согласны ли вы, что он уже делает «У Kubernetes есть сервисы и Ingress для балансировки нагрузки». ?? - person user3836484; 27.01.2021
comment
да вот и все - person Vasili Angapov; 27.01.2021
comment
большое спасибо. Я лично для вас ставлю зеленую галочку. - person user3836484; 27.01.2021
comment
Можете ли вы подробнее рассказать об ошибках и ограниченных возможностях? - person Joel; 27.01.2021