---
title: "Аддон Cluster Proportional Autoscaler для Kubernetes"
description: "Аддон Cluster Proportional Autoscaler для Kubernetes. Установка, настройка, примеры использования. Документация и инструкции по работе с облачными сервисами Timeweb Cloud."
---

> Полный индекс документации для ИИ-агентов: [llms.txt](https://timeweb.cloud/llms.txt).

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

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

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

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

### Linear

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

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

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

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

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

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

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

### Ladder

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

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

```yaml
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](https://content.timeweb.com/assets/fb827072-f98b-435c-8fee-22e36d032b64.png?width=1007&height=859)

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

![Selection 331](https://content.timeweb.com/assets/46c0dc7e-8240-4a9b-a205-67f7d37f34ee.png?width=1003&height=806)

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

```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
```

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

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

> [!NOTE]
> При установке через панель управления можно указать только один объект для масштабирования через параметр `target`.
>
> Если вы хотите масштабировать несколько ресурсов одновременно — например, `metrics-server` и `coredns` — используйте ручную установку с несколькими экземплярами скейлера.

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

Если вы хотите более гибко настроить Cluster Proportional Autoscaler или применить несколько скейлеров для разных сервисов, используйте установку через [Helm](https://timeweb.cloud/docs/k8s/deploy/helm).

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

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

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

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

```shell
helm repo update
```

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

```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 должен создать сервис-аккаунт с нужными правами автоматически.

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

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

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

```shell
kubectl get pods -n kube-system
```

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

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

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