<div><img src="https://top-fwz1.mail.ru/counter?id=3548135;js=na" style="position:absolute;left:-9999px;" alt="Top.Mail.Ru" /></div>
Публичное облако на базе VMware с управлением через vCloud Director
Вход / Регистрация
На главную
25eb9e0a-a5a8-472a-ace7-940b8bd2adf0
Облачные сервисы

Cluster Proportional Autoscaler

Cluster Proportional Autoscaler (CPA) — это контроллер, который автоматически масштабирует выбранный деплоймент в зависимости от количества нод в кластере. Он полезен в случаях, когда сервис должен быть доступен на каждой ноде или масштабироваться пропорционально объему ресурсов в кластере.

CPA не использует метрики нагрузки, а работает на основе пропорциональных формул, которые задаются вручную. 

Режимы работы

CPA поддерживает два режима расчета количества реплик:

Linear

В режиме linear количество реплик рассчитывается по следующей формуле:

replicas = max(min, min(max, cores / coresPerReplica, nodes / nodesPerReplica))

Можно использовать оба параметра (coresPerReplica и nodesPerReplica) или только один. Значения min и max ограничивают итоговое число реплик.

Пример настройки:

config:
  linear:
    coresPerReplica: 2
    nodesPerReplica: 1
    min: 2
    max: 20
    preventSinglePointFailure: true
    includeUnschedulableNodes: true

В этом примере:

  • создается по 1 поду на каждую ноду;
  • дополнительно создается 1 под на каждые 2 CPU ядра;
  • всегда минимум 2 пода, максимум 20;
  • при наличии только одной ноды будет не 1, а 2 пода;
  • учитываются и те ноды, на которые нельзя запланировать поды.

Ladder

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

Пример настройки:

config:
  ladder:
    coresToReplicas:
      - [ 1, 1 ]
      - [ 64, 3 ]
      - [ 512, 5 ]
      - [ 1024, 7 ]
      - [ 2048, 10 ]
    nodesToReplicas:
      - [ 1, 1 ]
      - [ 2, 2 ]
      - [ 5, 3 ]

В этом примере:

  • если в кластере 1 нода — будет 1 под;
  • при 2 нодах — 2 пода;
  • при 5 и более нодах — 3 пода;
  • параллельно будет учитываться количество ядер, например:
    • при 64 ядрах — 3 пода;
    • при 2048 — 10 подов.

Установка через ПУ

Для установки Cluster Proportional Autoscaler откройте панель управления кластером, перейдите во вкладку «Дополнения» и выберите Cluster Proportional Autoscaler.

Selection 330

В открывшемся мастере вы можете изменить конфигурацию скейлера, отредактировав манифест в блоке «Конфигурация».

Selection 331

По умолчанию скейлер будет настроен для работы с metrics-server в неймспейсе kube-system. Он использует линейный режим, создавая один под на каждую ноду:

config:
  linear:
    coresPerReplica: 1
    nodesPerReplica: 1
    min: 1
    max: 100
    preventSinglePointFailure: true
    includeUnschedulableNodes: true

options:
  logToStdErr: true
  logLevel: 7
  namespace: kube-system
  target: deployment/metrics-server

Если вы хотите масштабировать другой сервис — например, nginx в неймспейсе default — достаточно изменить параметры target и namespace в конфигурации перед установкой.

Если вы хотите изменить параметры масштабирования или режим работы, отредактируйте блок config. Вы можете, например, раскомментировать параметры для ladder и использовать его вместо linear.

При установке через панель управления можно указать только один объект для масштабирования через параметр target.

Если вы хотите масштабировать несколько ресурсов одновременно — например, metrics-server и coredns — используйте ручную установку с несколькими экземплярами скейлера.

Установка вручную

Если вы хотите более гибко настроить Cluster Proportional Autoscaler или применить несколько скейлеров для разных сервисов, используйте установку через Helm.

Сначала добавьте репозиторий чарта:

helm repo add cluster-proportional-autoscaler https://kubernetes-sigs.github.io/cluster-proportional-autoscaler

Эта команда добавит внешний источник, из которого будет установлен скейлер.

Затем обновите список доступных чартов:

helm repo update

Создайте файл values.yaml со следующим содержимым:

config:
  linear:
    coresPerReplica: 1
    nodesPerReplica: 1
    min: 1
    max: 100
    preventSinglePointFailure: true
    includeUnschedulableNodes: true

options:
  logToStdErr: true
  logLevel: 7
  namespace: kube-system
  target: deployment/metrics-server

serviceAccount:
  create: true

Эта конфигурация включает линейный режим, при котором создается один под на каждую ноду (nodesPerReplica: 1). Параметры min и max ограничивают количество реплик. Флаг preventSinglePointFailure добавляет дополнительную реплику при наличии всего одной ноды, а includeUnschedulableNodes учитывает ноды, на которые нельзя запланировать поды.

В разделе options задаются namespace и объект, который будет масштабироваться — в нашем случае это deployment/metrics-server.

Раздел serviceAccount указывает, что Helm должен создать сервис-аккаунт с нужными правами автоматически.

Установите скейлер с помощью команды:

helm upgrade --install metrics-autoscaler cluster-proportional-autoscaler/cluster-proportional-autoscaler --values values.yaml

После установки убедитесь, что pod запущен:

kubectl get pods -n kube-system

При ручной установке вы можете создавать несколько независимых экземпляров скейлера для разных целей. Для этого создайте отдельный файл, например values-nginx.yaml, измените в нем параметры target и namespace, и примените новую установку:

helm upgrade --install nginx-autoscaler cluster-proportional-autoscaler/cluster-proportional-autoscaler --values values-nginx.yaml

Такой способ позволяет масштабировать любое количество сервисов с разными настройками.

Была ли статья полезна?
Ваша оценка очень важна
Пока нет комментариев