Yandex Cloud
  • Сервисы
  • Решения
  • Почему Yandex Cloud
  • Сообщество
  • Тарифы
  • Документация
  • Связаться с нами
Подключиться
Language / Region
© 2022 ООО «Яндекс.Облако»
Yandex Managed Service for Kubernetes
  • Сопоставление с другими сервисами Yandex Cloud
  • Начало работы
  • Пошаговые инструкции
    • Все инструкции
    • Подключение к узлу по SSH
    • Обновление Kubernetes
    • Настройка автомасштабирования
    • Подключение к кластеру
      • Обзор способов подключения
      • Настройка групп безопасности
      • Создание статического файла конфигурации
    • Установка приложений
      • Основы работы с Yandex Cloud Marketplace
      • Установка Jaeger
      • Установка Metrics Provider
    • Сетевые сценарии
      • Обеспечение доступа к приложению, запущенному в кластере Kubernetes
      • Настройка контроллера сетевых политик Calico
      • Настройка контроллера сетевых политик Cilium
      • Настройка Node Local DNS для контроллера сетевых политик Cilium
    • Работа с постоянными томами
      • Динамическая подготовка тома
      • Статическая подготовка тома
      • Управление классами хранилищ
      • Увеличение размера тома для подов
      • Увеличение размера тома для контроллера StatefulSet
      • Подключение тома в блочном режиме
      • Интеграция с Object Storage
    • Управление кластером Kubernetes
      • Получение информации о кластере Kubernetes
      • Создание кластера Kubernetes
      • Изменение кластера Kubernetes
      • Создание пространства имен в кластере Kubernetes
      • Удаление кластера Kubernetes
    • Управление группой узлов
      • Информация об имеющихся группах узлов
      • Создание группы узлов
      • Подключение к узлу по SSH
      • Настройка автомасштабирования
      • Изменение группы узлов
      • Управление метками узлов кластера Kubernetes
      • Удаление группы узлов
    • Подключение внешних узлов к кластеру
  • Практические руководства
    • Все руководства
    • Интеграция с Yandex Container Registry
    • Запуск рабочих нагрузок с GPU
    • Установка NGINX Ingress-контроллера с Let's Encrypt®
    • Настройка Yandex Application Load Balancer Ingress-контроллера
    • Резервное копирование в Object Storage
    • Горизонтальное масштабирование приложения в кластере
    • Работа со снапшотами
    • Интеграция с корпоративной зоной DNS
    • Автоматическое масштабирование DNS по размеру кластера
    • Настройка локального кеширования DNS
    • Настройка Fluent Bit для работы с Yandex Cloud Logging
    • Синхронизация с секретами Yandex Lockbox
    • Использование продуктов Cloud Marketplace
      • Использование Jaeger для трассировки запросов в Managed Service for YDB
  • Концепции
    • Взаимосвязь ресурсов сервиса
    • Релизные каналы и обновления
    • Шифрование секретов
    • Использование объектов API Kubernetes
      • Том
      • Сервис
    • Группа узлов
      • Автоматическое масштабирование группы узлов
      • Расселение подов с узла
      • Динамическое резервирование ресурсов для узла
      • Группы узлов с GPU
    • Сеть в Managed Service for Kubernetes
    • Внешние узлы кластера
    • Сетевые настройки и политики кластера
    • Автоматическое масштабирование
    • Квоты и лимиты
    • Рекомендации по использованию Managed Service for Kubernetes
  • Управление доступом
  • Правила тарификации
  • Справочник API
    • Аутентификация в API
    • gRPC (англ.)
      • Overview
      • ClusterService
      • NodeGroupService
      • VersionService
      • OperationService
    • REST (англ.)
      • Overview
      • Cluster
        • Overview
        • create
        • delete
        • get
        • list
        • listNodeGroups
        • listNodes
        • listOperations
        • start
        • stop
        • update
      • NodeGroup
        • Overview
        • create
        • delete
        • get
        • list
        • listNodes
        • listOperations
        • update
      • Version
        • Overview
        • list
  • Вопросы и ответы
    • Общие вопросы
    • Хранилище данных
    • Настройка и обновление
    • Автоматическое масштабирование
    • Ресурсы
    • Логи
    • Все вопросы на одной странице
  1. Практические руководства
  2. Автоматическое масштабирование DNS по размеру кластера

Автоматическое масштабирование DNS по размеру кластера

Статья создана
Yandex Cloud
  • Подготовьте окружение
  • Настройте kube-dns-autoscaler
    • Проверьте запуск
    • Определите параметры масштабирования
    • Измените конфигурацию
  • Проверьте масштабирование
    • Измените размер кластера
    • Проследите изменения в службе DNS
  • Отключите масштабирование

В Managed Service for Kubernetes поддерживается автоматическое масштабирование сервиса DNS. В кластере работает приложение kube-dns-autoscaler под управлением контроллера Deployment. Приложение регулирует количество реплик CoreDNS по формулам в зависимости от:

  • количества узлов в кластере;
  • количества ядер (vCPU) в кластере.

В данном сценарии вы отредактируете конфигурацию kube-dns-autoscaler и увидите изменения в ReplicaSet службы DNS.

Чтобы настроить масштабирование, выполните следующие действия:

  1. Подготовьте окружение.
  2. Настройте kube-dns-autoscaler.
  3. Проверьте масштабирование.

Если не требуется изменять количество реплик CoreDNS соразмерно кластеру, отключите масштабирование.

Подготовьте окружение

  1. Создайте ресурсы.

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

    Как создать ресурсы
    1. Создайте облачную сеть.
    2. Создайте в облачной сети подсеть.
    3. Создайте сервисный аккаунт с ролью editor.
  2. Создайте кластер Kubernetes и группу узлов.

    Вы можете использовать уже работающий кластер и группу узлов Kubernetes или создать новые.

    Как создать кластер Kubernetes и группу узлов

    Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.

    По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name или --folder-id.

    1. Создайте кластер Kubernetes:

      yc managed-kubernetes cluster create \
        --name dns-autoscaler \
        --service-account-name <имя сервисного аккаунта> \
        --node-service-account-name <имя сервисного аккаунта> \
        --public-ip \
        --zone ru-central1-a \
        --network-name <имя облачной сети>
      

      Результат выполнения:

      done (7m21s)
      ...
      
    2. Создайте группу узлов:

      yc managed-kubernetes node-group create \
        --name node-group-1 \
        --cluster-name dns-autoscaler \
        --location zone=ru-central1-a \
        --public-ip \
        --fixed-size 3 \
        --cores 4 \
        --core-fraction 5
      

      Результат выполнения:

      done (2m43s)
      ...
      
  3. Настройте kubectl.

    Чтобы запускать команды для кластера Kubernetes, установите и настройте консоль управления kubectl.

    Как настроить kubectl
    1. Установите Kubernetes CLI kubectl.

    2. Добавьте учетные данные кластера Kubernetes в конфигурационный файл kubectl:

      yc managed-kubernetes cluster get-credentials --external --name dns-autoscaler
      

      Результат выполнения:

      Context 'dns-autoscaler' was added as default to kubeconfig '/home/<ваш домашний каталог>/.kube/config'.
      ...
      

Настройте kube-dns-autoscaler

Проверьте запуск

Чтобы убедиться, что приложение работает, проверьте Deployment в пространстве имен kube-system.

Для этого выполните команду:

kubectl get deployment --namespace=kube-system

Результат выполнения:

NAME                 READY  UP-TO-DATE  AVAILABLE  AGE
...
kube-dns-autoscaler  1/1    1           1          52m
...

Определите параметры масштабирования

Под kube-dns-autoscaler периодически запрашивает у сервера Kubernetes данные о количестве узлов и ядер в кластере. На основании этих данных выполняется расчет количества реплик CoreDNS.

Возможны два вида расчета:

  • Linear (линейный режим).
  • Ladder (ступенчатая функция).

В режиме linear расчет выполняется по формуле:

replicas = max( ceil( cores * 1/coresPerReplica ) , ceil( nodes * 1/nodesPerReplica ) )

Где:

  • coresPerReplica — параметр конфигурации, количество реплик CoreDNS на каждое ядро (vCPU) кластера.
  • nodesPerReplica — параметр конфигурации, количество реплик CoreDNS на каждый узел (Node) кластера.
  • cores — фактическое количество ядер (vCPU) в кластере.
  • nodes — фактическое количество узлов (Node) в кластере.
  • ceil — функция округления дроби до целого.
  • max — функция определения максимума из двух значений.

Дополнительный параметр preventSinglePointFailure актуален, если в кластере больше одного узла. Когда параметр установлен в true, минимальное количество реплик DNS равно двум.

Также можно определить параметры конфигурации min и max, которые задают минимальное и максимальное количество реплик CoreDNS в кластере:

replicas = min(replicas, max)
replicas = max(replicas, min)

Подробнее о расчете см. в документации cluster-proportional-autoscaler.

Измените конфигурацию

Чтобы сконфигурировать масштабирование, выполните следующие шаги:

  1. Проверьте текущие параметры.

    В данном сценарии создана группа узлов node-group-1. Количество узлов — 3, количество ядер (vCPU) — 12.

    По умолчанию установлен режим linear и следующие параметры масштабирования:

    • coresPerReplica: 256.
    • nodesPerReplica: 16.
    • preventSinglePointFailure: true.
    replicas = max( ceil( 12 * 1/256 ), ceil( 3 * 1/16 ) ) = 1
    

    Параметр preventSinglePointFailure установлен в true, поэтому количество реплик CoreDNS будет равно двум.

    Чтобы проверить информацию о подах coredns, выполните команду:

    kubectl get pods -n kube-system
    

    Результат выполнения:

    NAME                      READY  STATUS   RESTARTS  AGE
    ...
    coredns-7c646474c9-4dmjl  1/1    Running  0         128m
    coredns-7c646474c9-n7qsv  1/1    Running  0         134m
    ...
    
  2. Задайте новые параметры.

    Измените конфигурацию следующим образом:

    • coresPerReplica: 4.
    • nodesPerReplica: 2.
    • preventSinglePointFailure: true.
    replicas = max( ceil( 12 * 1/4 ), ceil( 3 * 1/2 ) ) = 3
    

    Чтобы передать параметры приложению kube-dns-autoscaler, отредактируйте соответствующий ConfigMap с помощью команды:

    kubectl edit configmap kube-dns-autoscaler --namespace=kube-system
    

    Откроется текстовый редактор с конфигурацией kube-dns-autoscaler. Измените строку с параметрами:

    linear: '{"coresPerReplica":4,"nodesPerReplica":2,"preventSinglePointFailure":true}'
    

    Сохраните изменения. На экране отобразится результат операции:

    configmap/kube-dns-autoscaler edited
    

    Приложение kube-dns-autoscaler загрузит конфигурацию и масштабирует службу DNS в соответствии с новыми параметрами.

Проверьте масштабирование

Измените размер кластера

Создайте вторую группу узлов с помощью команды:

yc managed-kubernetes node-group create \
  --name node-group-2 \
  --cluster-name dns-autoscaler \
  --location zone=ru-central1-a \
  --public-ip \
  --fixed-size 2 \
  --cores 4 \
  --core-fraction 5

Результат выполнения:

done (2m43s)
...

Теперь в кластере 5 узлов с 20 ядрами. Рассчитайте количество реплик:

replicas = max( ceil( 20 * 1/4 ), ceil( 5 * 1/2 ) ) = 5

Проследите изменения в службе DNS

Чтобы проверить количество реплик CoreDNS, выполните команду:

kubectl get pods -n kube-system

Результат выполнения:

NAME                      READY  STATUS   RESTARTS  AGE
...
coredns-7c646474c9-7l8mc  1/1    Running  0         3m30s
coredns-7c646474c9-n7qsv  1/1    Running  0         3h20m
coredns-7c646474c9-pv9cv  1/1    Running  0         3m40s
coredns-7c646474c9-r2lss  1/1    Running  0         49m
coredns-7c646474c9-s5jgz  1/1    Running  0         57m
...

Отключите масштабирование

Чтобы отключить масштабирование, обнулите количество реплик в Deployment приложения kube-dns-autoscaler:

kubectl scale deployment --replicas=0 kube-dns-autoscaler --namespace=kube-system

Результат выполнения:

deployment.apps/kube-dns-autoscaler scaled

Проверьте результат с помощью команды:

kubectl get rs --namespace=kube-system

Результат выполнения:

NAME                 READY  UP-TO-DATE  AVAILABLE  AGE
...
kube-dns-autoscaler  0/0    0           0          3h53m
...

Была ли статья полезна?

Language / Region
© 2022 ООО «Яндекс.Облако»
В этой статье:
  • Подготовьте окружение
  • Настройте kube-dns-autoscaler
  • Проверьте запуск
  • Определите параметры масштабирования
  • Измените конфигурацию
  • Проверьте масштабирование
  • Измените размер кластера
  • Проследите изменения в службе DNS
  • Отключите масштабирование