Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Yandex Managed Service for Kubernetes
  • Сопоставление с другими сервисами Yandex Cloud
  • Начало работы
    • Все инструкции
    • Подключение к узлу по SSH
    • Подключение к узлу через OS Login
    • Обновление Kubernetes
    • Настройка автомасштабирования
      • Информация об имеющихся группах узлов
      • Создание группы узлов
      • Подключение к узлу по SSH
      • Подключение к узлу через OS Login
      • Настройка автомасштабирования
      • Изменение группы узлов
      • Управление Kubernetes-метками узлов
      • Удаление группы узлов
    • Подключение внешних узлов к кластеру
  • Управление доступом
  • Правила тарификации
  • Справочник Terraform
  • Метрики Monitoring
  • Аудитные логи Audit Trails
  • История изменений
  • Обучающие курсы

В этой статье:

  • Перед началом работы
  • Настройка автоматического масштабирования кластера
  • Настройка горизонтального автомасштабирования подов
  • Настройка вертикального автомасштабирования подов
  • Удаление подов в статусе Terminated
  • Вручную
  • Автоматически с помощью CronJob
  1. Пошаговые инструкции
  2. Настройка автомасштабирования

Настройка автомасштабирования

Статья создана
Yandex Cloud
Улучшена
Обновлена 21 апреля 2025 г.
  • Перед началом работы
  • Настройка автоматического масштабирования кластера
  • Настройка горизонтального автомасштабирования подов
  • Настройка вертикального автомасштабирования подов
  • Удаление подов в статусе Terminated
    • Вручную
    • Автоматически с помощью CronJob

Для Managed Service for Kubernetes доступны три способа автоматического масштабирования:

  • Автоматическое масштабирование кластера.
  • Горизонтальное автомасштабирование подов.
  • Вертикальное автомасштабирование подов.

Перед началом работыПеред началом работы

  1. Создайте кластер Managed Service for Kubernetes любой подходящей конфигурации.

  2. Установите kubectl и настройте его на работу с созданным кластером.

Настройка автоматического масштабирования кластераНастройка автоматического масштабирования кластера

Важно

Автоматическое масштабирование этого типа можно включить только при создании группы узлов Managed Service for Kubernetes.

Чтобы создать автомасштабируемую группу узлов Managed Service for Kubernetes:

Консоль управления
CLI
Terraform

Создайте группу узлов Managed Service for Kubernetes со следующими параметрами:

  • Тип масштабирования: Автоматический.
  • Минимальное кол-во узлов: укажите количество узлов Managed Service for Kubernetes, которое должно оставаться в группе при минимальной нагрузке.
  • Максимальное кол-во узлов: укажите максимально допустимое количество узлов Managed Service for Kubernetes в группе.
  • Начальное кол-во узлов: количество узлов Managed Service for Kubernetes, которые следует создать вместе с группой (должно быть не меньше минимального и не больше максимального количества узлов в группе).

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

По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.

  1. Изучите команду создания группы узлов Managed Service for Kubernetes:

    yc managed-kubernetes node-group create --help
    
  2. Создайте автомасштабируемую группу узлов Managed Service for Kubernetes:

    yc managed-kubernetes node-group create \
    ...
      --auto-scale min=<минимальное_количество_узлов>, max=<максимальное_количество_узлов>, initial=<начальное_количество_узлов>
    
  1. Terraform позволяет быстро создать облачную инфраструктуру в Yandex Cloud и управлять ею с помощью файлов конфигураций. В файлах конфигураций хранится описание инфраструктуры на языке HCL (HashiCorp Configuration Language). При изменении файлов конфигураций Terraform автоматически определяет, какая часть вашей конфигурации уже развернута, что следует добавить или удалить.

    Terraform распространяется под лицензией Business Source License, а провайдер Yandex Cloud для Terraform — под лицензией MPL-2.0.

    Подробную информацию о ресурсах провайдера смотрите в документации на сайте Terraform или в зеркале.

    Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.

  2. Откройте актуальный конфигурационный файл Terraform с описанием группы узлов.

    О том, как создать такой файл, см. в разделе Создание группы узлов.

  3. Добавьте описание новой группы узлов, указав настройки автомасштабирования в блоке scale_policy.auto_scale:

    resource "yandex_kubernetes_node_group" "<имя_группы_узлов>" {
    ...
      scale_policy {
        auto_scale {
          min     = <минимальное_количество_узлов_в_группе>
          max     = <максимальное_количество_узлов_в_группе>
          initial = <начальное_количество_узлов_в_группе>
        }
      }
    }
    
  4. Проверьте корректность конфигурационных файлов.

    1. В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.

    2. Выполните команду:

      terraform validate
      

      Если в файлах конфигурации есть ошибки, Terraform на них укажет.

  5. Подтвердите изменение ресурсов.

    1. Выполните команду для просмотра планируемых изменений:

      terraform plan
      

      Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.

    2. Если вас устраивают планируемые изменения, внесите их:

      1. Выполните команду:

        terraform apply
        
      2. Подтвердите изменение ресурсов.

      3. Дождитесь завершения операции.

Управление Cluster Autoscaler выполняется на стороне сервиса Managed Service for Kubernetes.

Подробнее о Cluster Autoscaler см. в разделе Автоматическое масштабирование кластера. Параметры, используемые по умолчанию, приведены в документации Kubernetes.

См. также раздел Вопросы и ответы про автоматическое масштабирование группы узлов в Managed Service for Kubernetes.

Настройка горизонтального автомасштабирования подовНастройка горизонтального автомасштабирования подов

CLI
  1. Создайте Horizontal Pod Autoscaler для вашего приложения, например:

    kubectl autoscale deployment/<имя_приложения> --cpu-percent=50 --min=1 --max=3
    

    Где:

    • --cpu-percent — желаемая нагрузка пода Managed Service for Kubernetes на vCPU.
    • --min — минимальное количество подов Managed Service for Kubernetes.
    • --max — максимальное количество подов Managed Service for Kubernetes.
  2. Проверьте состояние Horizontal Pod Autoscaler:

    kubectl describe hpa/<имя_приложения>
    

Подробнее о Horizontal Pod Autoscaler см. в разделе Горизонтальное автомасштабирование подов.

Настройка вертикального автомасштабирования подовНастройка вертикального автомасштабирования подов

CLI
  1. Установите Vertical Pod Autoscaler из репозитория:

    cd /tmp && \
      git clone https://github.com/kubernetes/autoscaler.git && \
      cd autoscaler/vertical-pod-autoscaler/hack && \
      ./vpa-up.sh
    
  2. Создайте конфигурационный файл vpa.yaml для вашего приложения:

    apiVersion: autoscaling.k8s.io/v1
    kind: VerticalPodAutoscaler
    metadata:
      name: <имя_приложения>
    spec:
      targetRef:
        apiVersion: "apps/v1"
        kind:       Deployment
        name:       <имя_приложения>
    updatePolicy:
      updateMode: "<режим_работы_VPA>"
    

    Где updateMode — режим работы Vertical Pod Autoscaler: Auto или Off.

  3. Создайте Vertical Pod Autoscaler для вашего приложения:

    kubectl apply -f vpa.yaml
    
  4. Проверьте состояние Vertical Pod Autoscaler:

    kubectl describe vpa <имя_приложения>
    

Подробнее о Vertical Pod Autoscaler см. в разделе Вертикальное автомасштабирование подов.

Удаление подов в статусе TerminatedУдаление подов в статусе Terminated

Иногда во время автоматического масштабирования поды узлов Managed Service for Kubernetes не удаляются, а остаются в статусе Terminated. Это происходит из-за того, что контроллер Pod garbage collector (PodGC) не успевает удалять их.

Вы можете удалить зависшие поды Managed Service for Kubernetes:

  • Вручную.
  • Автоматически с помощью CronJob.

ВручнуюВручную

Выполните команду:

kubectl get pods --all-namespaces | grep -i Terminated \
| awk '{print $1, $2}' | xargs -n2 kubectl delete pod -n

Автоматически с помощью CronJobАвтоматически с помощью CronJob

Чтобы автоматически удалять зависшие поды Managed Service for Kubernetes:

  1. Настройте CronJob.
  2. Проверьте результаты заданий CronJob.

Если CronJob больше не нужен, удалите его.

Настройка автоматического удаления в CronJobНастройка автоматического удаления в CronJob

  1. Создайте файл cronjob.yaml со спецификацией для CronJob и ресурсов, необходимых для его выполнения:

    ---
    apiVersion: batch/v1
    kind: CronJob
    metadata:
      name: terminated-pod-cleaner
    spec:
      schedule: "*/5 * * * *"
      jobTemplate:
        spec:
          template:
            spec:
              serviceAccountName: terminated-pod-cleaner
              containers:
              - name: terminated-pod-cleaner
                image: bitnami/kubectl
                imagePullPolicy: IfNotPresent
                command: ["/bin/sh", "-c"]
                args: ["kubectl get pods --all-namespaces | grep -i Terminated | awk '{print $1, $2}' | xargs --no-run-if-empty -n2 kubectl delete pod -n"]
              restartPolicy: Never
    
    ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: terminated-pod-cleaner
    
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      name: terminated-pod-cleaner
    rules:
      - apiGroups: [""]
        resources:
          - pods
        verbs: [list, delete]
    
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: terminated-pod-cleaner
    subjects:
    - kind: ServiceAccount
      name: terminated-pod-cleaner
      namespace: default
    roleRef:
      kind: ClusterRole
      name: terminated-pod-cleaner
      apiGroup: rbac.authorization.k8s.io
    

    В строке schedule: "*/5 * * * *" задано расписание в cron-формате: выполнение задания каждые 5 минут. При необходимости измените интервал.

  2. Создайте CronJob и ресурсы:

    kubectl create -f cronjob.yaml
    

    Результат:

    cronjob.batch/terminated-pod-cleaner created
    serviceaccount/terminated-pod-cleaner created
    clusterrole.rbac.authorization.k8s.io/terminated-pod-cleaner created
    clusterrolebinding.rbac.authorization.k8s.io/terminated-pod-cleaner created
    
  3. Проверьте, что CronJob создался:

    kubectl get cronjob terminated-pod-cleaner
    

    Результат:

    NAME                    SCHEDULE     SUSPEND  ACTIVE  LAST SCHEDULE  AGE
    terminated-pod-cleaner  */5 * * * *  False    0       <none>         4s
    

    Через указанный в SCHEDULE интервал в столбце LAST SCHEDULE появится значение времени. Это означает, что задание было успешно выполнено или завершено с ошибкой.

Проверка результатов заданий CronJobПроверка результатов заданий CronJob

  1. Получите список заданий:

    kubectl get jobs
    

    Результат:

    NAME           COMPLETIONS  DURATION  AGE
    <имя_задания>  1/1          4s        2m1s
    ...
    
  2. Получите имя пода Managed Service for Kubernetes, в котором выполнялось задание:

    kubectl get pods --selector=job-name=<имя_задания> --output=jsonpath={.items[*].metadata.name}
    
  3. Просмотрите логи пода Managed Service for Kubernetes:

    kubectl logs <имя_пода>
    

    В логе будет список удаленных подов Managed Service for Kubernetes. Если лог пустой, подов Managed Service for Kubernetes в статусе Terminated на момент выполнения задания не было.

Удаление CronJobУдаление CronJob

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

kubectl delete cronjob terminated-pod-cleaner && \
kubectl delete serviceaccount terminated-pod-cleaner && \
kubectl delete clusterrole terminated-pod-cleaner && \
kubectl delete clusterrolebinding terminated-pod-cleaner

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

Предыдущая
Обновление Kubernetes
Следующая
Обзор способов подключения
Проект Яндекса
© 2025 ООО «Яндекс.Облако»