Рубрики
Uncategorized

Горизонтальные масштабирующие веб -питания на kubernetes и node.js

Горизонтальный POD Autoscaler автоматически масштабирует количество стручков в контроллере репликации, DE … с меткой Kubernetes, Node, WebDev, DevOps.

Горизонтальный POD Autoscaler автоматически масштабирует количество стручков в контроллере репликации, развертывания, набора реплик или набора состояния на основе наблюдаемого использования ЦП (или, с помощью Custom Metrics Обратите внимание, что горизонтальное автомассалирование POD не применяется к объектам, которые не могут быть масштабированы, например, Daemonsets.

Как работает горизонтальный аутоскальщик POD?

Горизонтальный POD Autoscaler реализован как ресурс API Kubernetes и контроллер. Ресурс определяет поведение контроллера. Контроллер периодически корректирует количество реплик в контроллере репликации или развертывании, чтобы соответствовать наблюдаемому среднему использованию ЦП для цели, указанной пользователем.

Чтобы узнать больше о том, как работает Kubernetes HPA, вы можете прочитать Эта подробная статья из официального kubernetes.io Анкет

Наиболее распространенный пример конфигураций HPA основан на показателях использования процессоров/памяти, предоставленных Метрики-сервер Анкет В этой статье я приведу пример масштабирования/вниз по развертыванию Kubernetes на основе пользовательских метрик для конкретных приложений. Приложение будет Node.js ( Express ) Сервер с ВЕБ -ОКОКА Поддержка и цель будет состоять в том, чтобы масштабировать/вниз по развертыванию на основе количества подключенных клиентов (подсчет соединений).

Для достижения этой цели этот пост будет сосредоточен на:

  1. Создание демонстрационного приложения с поддержкой WebSocket.
  2. Интеграция Прометей-клиент раскрыть статистику WebSocket как метрику Прометея.
  3. Настройка Прометей Чтобы собрать обнаженные метрики.
  4. Настройка Прометей-Адаптер Чтобы преобразовать метрику Прометея в метрику жалобы HPA.
  5. Настройка HPA для использования и потребления метрики жалобы.

Создание демонстрационного приложения с поддержкой WebSocket

Следующий код создаст приложение Demo Express и интегрирует WebSocket на /ws/ дорожка.

https://github.com/shebang-labs/websocket-prometheus-hpa-example/blob/main/app.js

Интеграция Prometheus-Client для разоблачения статистики WebSocket как метрика Prometheus

Следующий код будет интегрировать клиента Prometheus и разоблачить стандарт/жалоба Prometheus websockets_connections_total Метрика на порту 9095. Следующим шагом является направление Прометея начать сбор и сбор этого метрики и сохранить статистику с течением времени.

https://github.com/shebang-labs/websocket-prometheus-hpa-example/blob/main/app.js

Настройка Prometheus для сбора обнаженных метрик

На этом этапе я буду использовать Хелм развернуть Прометею в кластере Kubernetes. Во -первых, нам нужно добавить репо Helm для Prometheus, используя эту команду:

helm repo add prometheus-community https://prometheus-community.github.io/helm-charts

Затем мы можем установить Prometheus с постоянным томом для хранения и сохранять данные метрик с течением времени со следующей командой:

helm upgrade --install prometheus prometheus-community/prometheus --namespace prometheus --set alertmanager.persistentVolume.storageClass="gp2",server.persistentVolume.storageClass="gp2"

На этом этапе мы должны иметь компоненты Prometheus и отлично работать на Kubernetes Clsuter на Прометей Пространство имен, как показано в следующем:

Прометей пространство имен (Kubernetes)

Чтобы направить Прометею, чтобы начать очищать/собирать приложение, обнажаемое метрикой websockets_connections_total Со временем нам нужно аннотировать стручок, который запускает приложение Express со следующими аннотациями:

prometheus.io/scrape: 'true'
prometheus.io/port: '9095'

Таким образом, развертывание приложения будет выглядеть как -то вроде:

https://github.com/shebang-labs/websocket-prometheus-hpa-example/blob/main/deployment.yaml

Настройка Adapter Prometheus-Adapter для преобразования метрики Prometheus в HPA.

На этом этапе Prometheus соскребает метрики каждые 1 секунду из порта 9095 из всех стручков в этом развертывании. Чтобы проверить это, вы можете перенести порт-сервер Прометеуса в локальный хост и получить доступ к его пользовательскому интерфейсу запроса/приборной панели, используя следующую команду:

kubectl --namespace=prometheus port-forward deploy/prometheus-server 9090

что сделает панель доступной на Localhost: 9090 . Тогда вы можете искать websockets_connections_total Чтобы увидеть сокраренные метрики с течением времени, как показано здесь:

В этом примере запрос вернул 2 графика, так как в этом развертывании есть 2 стручки, генерирующие разные websockets_connections_total ценности. Один из стручков имеет 1-2 подключения к WebSocket сверхурочно, а у другого есть 0 соединений.

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

Вы можете установить Прометей-Адаптер Как диаграмма руля. Вы должны указать адаптер на экземпляр Prometheus, чтобы запросить данные оттуда. Также вам нужно будет рассказать адаптеру, как запросить метрики, преобразовать и отформатировать их.

Это можно сделать с помощью следующих пользовательских конфигураций Helm:

prometheus:
  url: http://prometheus-server.prometheus.svc
  port: 80

rules:
  custom:
    - seriesQuery: '{__name__=~"^myapp_websockets_connections_total$"}'
      resources:
        overrides:
          kubernetes_namespace:
            resource: namespace
          kubernetes_pod_name:
            resource: pod
      name:
        matches: "^(.*)_total"
        as: "${1}_avg"
      metricsQuery: (avg(<<.Series>>{<<.LabelMatchers>>}) by (<<.GroupBy>>))

Prometheus-adapter-values.yaml

Теперь вы можете использовать этот файл для установки пользовательского Прометей-Адаптер следующим образом:

helm upgrade --install prometheus-adapter prometheus-community/prometheus-adapter --values=./prometheus-adapter-values.yaml --namespace prometheus

Чтобы убедиться, что адаптер работал так, как и ожидалось, вы сможете запросить пользовательские метрики HPA, используя следующую команду:

# I'm using jq for better formatting. You can omit it if needed.
kubectl get --raw "/apis/custom.metrics.k8s.io/v1beta1/namespaces/myapp-namespace/pods/*/myapp_websockets_connections_avg" | jq .

Это должно показать результат, подобный:

Настройка HPA для использования и потребления метрики жалобы

Используя следующее определение HPA, мы можем контролировать масштабирование развертывания вверх и вниз на основе подключений AVG Websockets на POD:

https://github.com/shebang-labs/websocket-prometheus-hpa-example/blob/main/hpa.yaml

В этом примере я настроил Min Replicas как 2 и максимум быть 10 а затем Kubernetes будет использовать myApp_websockets_connections_avg Значение со временем, чтобы соответствовать цели 5 соединений на капсул и он будет динамически масштабироваться вверх и вниз, чтобы соответствовать этой цели 🎉🎉

Оригинал: «https://dev.to/tareksamni/horizontal-scaling-websockets-on-kubernetes-and-node-js-1121»