Как использовать задержку службы, развернутой в Kubernetes, для масштабирования развертывания? - PullRequest
2 голосов
/ 18 октября 2019

У меня есть простое весеннее загрузочное приложение, развернутое в Kubernetes на GCP. Служба подвергается воздействию внешнего IP-адреса. Я тестирую это приложение с помощью JMeter. Это всего лишь запрос http GET, который возвращает True или False.

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

Ответы [ 2 ]

3 голосов
/ 18 октября 2019

Так как вы упомянули Custom Auto Scaler. Я хотел бы предложить это простое решение, которое использует некоторые из инструментов, которые у вас уже могут быть.

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

Например, если вы используете простой инструмент CLI Apache Benchmark (вы также можете использовать Jmeter или любой другой инструмент нагрузочного тестирования, который генерирует структурированныйо / п), вы получите подробный результат по одному запросу. Используйте эту ссылку , чтобы обойти результат для вашей справки.

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

Логика уменьшения может быть более тривиальной, но я оставлю это вам.

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

enter image description here

1 голос
/ 18 октября 2019

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

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

Так что следуйте этим правилам -

1. Чтобы предоставить объектам GKE доступ к метрикам, хранящимся в Stackdriver, вам необходимо развернутьпользовательский адаптер метрик Stackdriver. Чтобы запустить Custom Metrics Adapter, вы должны предоставить своему пользователю возможность создавать необходимые роли авторизации, выполнив следующую команду:

kubectl create clusterrolebinding cluster-admin-binding \
    --clusterrole cluster-admin --user "$(gcloud config get-value account)"

Чтобы развернуть адаптер -

kubectl create -f https://raw.githubusercontent.com/GoogleCloudPlatform/k8s-stackdriver/master/custom-metrics-stackdriver-adapter/deploy/production/adapter.yaml

Вы можете экспортировать свои метрики в Stackdriver либо непосредственно из вашего приложения, либо выставив их в формате Prometheus и добавив адаптер Prometheus-to-Stackdriver в контейнеры вашего модуля.

Вы можете просмотретьэкспортированные метрики из Проводника метрик путем поиска пользовательских / [METRIC_NAME]

Ваша метрика должна соответствовать следующим требованиям:

  • Тип метрики должен быть GAUGE
  • Метрикатип может быть DOUBLE или INT64
  • Имя метрики должно начинаться с префикса custom.googleapis.com/, за которым следует простое имя
  • Тип ресурса должен быть "gke_container"
  • Метки ресурса должны включать:
    • pod_id, установленный в Pod UID, который можно получить с помощью нисходящего API
    • container_name = ""
    • project_id, zone, cluster_name, которое может бытьполученные вашим приложением с сервера метаданных. Чтобы получить значения, вы можете использовать клиент метаданных вычислений Google Cloud.
  • namespace_id, instance_id, для которого можно установить любое значение.

    3. После того, как вы экспортировали метрикив Stackdriver вы можете развернуть HPA для масштабирования вашего Развертывания на основе метрик.

Сравните это с GitHub для дополнительных кодов

...