Использование Metrics Provider для трансляции метрик
Metrics Provider транслирует метрики объектов кластера Managed Service for Kubernetes в системы мониторинга и системы автоматического масштабирования.
Из этой статьи вы узнаете, как настроить передачу внешних метрик в Horizontal Pod Autoscaler с помощью Metrics Provider.
Чтобы настроить передачу метрик:
- Подготовьте рабочее окружение.
- Установите Metrics Provider и рабочее окружение.
- Проверьте работу Metrics Provider.
Если созданные ресурсы вам больше не нужны, удалите их.
Перед началом работы
-
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра
--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-адрес, удалите его.