Использование Metrics Provider для трансляции метрик
Metrics Provider транслирует метрики объектов кластера Managed Service for Kubernetes в системы мониторинга и системы автоматического масштабирования.
Из этой статьи вы узнаете, как настроить передачу внешних метрик в Horizontal Pod Autoscaler с помощью Metrics Provider.
Чтобы настроить передачу метрик:
- Подготовьте рабочее окружение.
- Установите Metrics Provider и рабочее окружение.
- Проверьте работу Metrics Provider.
Если созданные ресурсы вам больше не нужны, удалите их.
Необходимые платные ресурсы
В стоимость поддержки описываемого решения входят:
- Плата за кластер Managed Service for Kubernetes: использование мастера и исходящий трафик (см. тарифы Managed Service for Kubernetes).
- Плата за узлы кластера (ВМ): использование вычислительных ресурсов, операционной системы и хранилища (см. тарифы Compute Cloud).
- Плата за публичный IP-адрес, если он назначен узлам кластера (см. тарифы Virtual Private Cloud).
Перед началом работы
-
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду
yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров--folder-nameили--folder-id. -
Создайте группы безопасности для кластера Managed Service for Kubernetes и входящих в него групп узлов.
Важно
От настройки групп безопасности зависит работоспособность и доступность кластера, а также запущенных в нем сервисов и приложений.
-
Создайте кластер Managed Service for Kubernetes и группу узлов любой подходящей конфигурации. При создании укажите группы безопасности, подготовленные ранее.
-
Установите kubectl
и настройте его на работу с созданным кластером.
Подготовьте рабочее окружение
Для проверки работы Metrics Provider будет создано тестовое приложение nginx и Horizontal Pod Autoscaler, в который Metrics Provider будет передавать метрики утилизации CPU.
-
Создайте файл
app.yamlс манифестом приложенияnginx:app.yaml
--- ### Deployment apiVersion: apps/v1 kind: Deployment metadata: name: nginx namespace: kube-system labels: app: nginx spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: name: nginx labels: app: nginx spec: containers: - name: nginx image: registry.k8s.io/hpa-example resources: requests: memory: "256Mi" cpu: "500m" limits: memory: "500Mi" cpu: "1" --- ### Service apiVersion: v1 kind: Service metadata: name: nginx namespace: kube-system spec: selector: app: nginx ports: - protocol: TCP port: 80 targetPort: 80 type: LoadBalancer -
Создайте файл
hpa.yamlс манифестом Horizontal Pod Autoscalertest-hpa:apiVersion: autoscaling/v2beta2 kind: HorizontalPodAutoscaler metadata: name: test-hpa namespace: kube-system spec: maxReplicas: 2 scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: nginx metrics: - type: External external: metric: name: cpu_usage selector: matchLabels: service: "compute" resource_id: "<имя_узла>" resource_type: "vm" target: type: Value value: "20"Имя узла, на котором будут развернуты Metrics Provider и рабочее окружение, можно получить со списком узлов в кластере:
kubectl get nodes
Установите Metrics Provider и рабочее окружение
-
Установите Metrics Provider по инструкции.
-
Создайте тестовое приложение и Horizontal Pod Autoscaler:
kubectl apply -f app.yaml && \ kubectl apply -f hpa.yaml -
Убедитесь, что поды приложений перешли в состояние
Running:kubectl get pods -n kube-system | grep nginx && \ kubectl get pods -n kube-system | grep metricsРезультат:
nginx-6c********-dbfrn 1/1 Running 0 2d22h nginx-6c********-gckhp 1/1 Running 0 2d22h metrics-server-v0.3.1-6b********-f7dv6 2/2 Running 4 7d3h
Проверьте работу Metrics Provider
Убедитесь, что Horizontal Pod Autoscaler получает метрики от Metrics Provider и на их основе рассчитывает количество подов приложения nginx:
kubectl -n kube-system describe hpa test-hpa
В ожидаемом выводе команды условия AbleToScale и ScalingActive должны иметь статус True:
Name: test-hpa
Namespace: kube-system
...
Min replicas: 1
Max replicas: 2
Deployment pods: 2 current / 2 desired
Conditions:
Type Status Reason Message
---- ------ ------ -------
AbleToScale True ReadyForNewScale recommended size matches current size
ScalingActive True ValidMetricFound the HPA was able to successfully calculate a replica count from external metric cpu_usage(&LabelSelector{MatchLabels:map[string]string{resource_id: <имя_узла>,resource_type: vm,service: compute,},MatchExpressions:[]LabelSelectorRequirement{},})
Events: <none>
Примечание
Потребуется некоторое время, чтобы Metrics Provider получил метрики от кластера Managed Service for Kubernetes. Если вы столкнулись с ошибкой unable to get external metric ... no metrics returned from external metrics API, повторите проверку работы провайдера через несколько минут.
Удалите созданные ресурсы
Удалите ресурсы, которые вы больше не будете использовать, чтобы за них не списывалась плата:
- Удалите кластер Managed Service for Kubernetes.
- Если вы зарезервировали для кластера публичный статический IP-адрес, удалите его.