Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Практические руководства
    • Все руководства
    • Настройка подключения к Managed Service for PostgreSQL из контейнера Serverless Containers
    • Создать ВМ с Container Optimized Image
    • Создать ВМ с Container Optimized Image и дополнительным томом для Docker-контейнера
    • Создать группу ВМ с Container Optimized Image и несколькими Docker-контейнерами
    • Создать группу ВМ с Container Optimized Image
    • Создать ВМ с Container Optimized Image и несколькими Docker-контейнерами
    • Изменить ВМ с Container Optimized Image
    • Настройка вывода информации из Docker-контейнера в серийный порт
      • Создание нового Kubernetes-проекта
      • Создание кластера Kubernetes без доступа в интернет
      • Запуск рабочих нагрузок с GPU
      • Использование групп узлов c GPU без предустановленных драйверов
      • Установка Time-Slicing GPUs
      • Миграция ресурсов в другую зону доступности
      • Шифрование секретов
        • Горизонтальное масштабирование приложения в кластере
        • Вертикальное масштабирование приложения в кластере
        • Изменение параметров сервера метрик (Metrics Server)
        • Развертывание и нагрузочное тестирование gRPC-сервиса с масштабированием

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

  • Необходимые платные ресурсы
  • Перед началом работы
  • Создайте Vertical Pod Autoscaler и тестовое приложение
  • Проверьте работу Vertical Pod Autoscaler
  • Удалите созданные ресурсы
  1. Контейнерная инфраструктура
  2. Managed Service for Kubernetes
  3. Настройка и тестирование масштабирования
  4. Вертикальное масштабирование приложения в кластере

Вертикальное масштабирование приложения в кластере Yandex Managed Service for Kubernetes

Статья создана
Yandex Cloud
Улучшена
mmerihsesh
Обновлена 21 апреля 2025 г.
  • Необходимые платные ресурсы
  • Перед началом работы
  • Создайте Vertical Pod Autoscaler и тестовое приложение
  • Проверьте работу Vertical Pod Autoscaler
  • Удалите созданные ресурсы

Managed Service for Kubernetes поддерживает несколько видов автоматического масштабирования. Из этой статьи вы узнаете, как настроить автоматическое управление ресурсами пода с помощью Vertical Pod Autoscaler:

  • Создайте Vertical Pod Autoscaler и тестовое приложение.
  • Проверьте работу Vertical Pod Autoscaler.

Если созданные ресурсы вам больше не нужны, удалите их.

Необходимые платные ресурсыНеобходимые платные ресурсы

В стоимость поддержки описываемого решения входят:

  • Плата за кластер Managed Service for Kubernetes: использование мастера и исходящий трафик (см. тарифы Managed Service for Kubernetes).
  • Плата за узлы кластера (ВМ): использование вычислительных ресурсов, операционной системы и хранилища (см. тарифы Compute Cloud).
  • Плата за публичный IP-адрес для узлов кластера (см. тарифы Virtual Private Cloud).

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

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

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

  2. Создайте группы безопасности для кластера Managed Service for Kubernetes и входящих в него групп узлов.

    Важно

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

  3. Создайте кластер Managed Service for Kubernetes. При создании задайте настройки:

    • Используйте созданные ранее группы безопасности.
    • Если вы планируете работать с кластером в пределах сети Yandex Cloud, выделять кластеру публичный IP-адрес не нужно. Для подключений извне предоставьте кластеру публичный адрес.
  4. Создайте группу узлов. При создании задайте настройки:

    • Используйте созданные ранее группы безопасности.
    • Выделите публичный IP-адрес, чтобы предоставить группе узлов доступ в интернет и возможность скачивать Docker-образы и компоненты.
  5. Установите kubectl и настройте его на работу с созданным кластером.

    Если для кластера не предоставлен публичный адрес и kubectl настроен через внутренний адрес кластера, выполняйте команды kubectl на ВМ Yandex Cloud, находящейся в одной сети с кластером.

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

    cd /tmp && \
      git clone https://github.com/kubernetes/autoscaler.git && \
      cd autoscaler/vertical-pod-autoscaler/hack && \
      ./vpa-up.sh
    

Создайте Vertical Pod Autoscaler и тестовое приложениеСоздайте Vertical Pod Autoscaler и тестовое приложение

  1. Создайте файл app.yaml, содержащий настройки тестового приложения nginx и балансировщика нагрузки:

    app.yaml
    ---
    ### Deployment
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx
      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
    spec:
      selector:
        app: nginx
      ports:
        - protocol: TCP
          port: 80
          targetPort: 80
      type: LoadBalancer
    
  2. Создайте файл vpa.yaml, содержащий настройки Vertical Pod Autoscaler:

    vpa.yaml
    ---
    apiVersion: autoscaling.k8s.io/v1
    kind: VerticalPodAutoscaler
    metadata:
      name: nginx
    spec:
      targetRef:
        apiVersion: "apps/v1"
        kind:       Deployment
        name:       nginx
      updatePolicy:
        updateMode:  "Auto"
        minReplicas: 1
    
  3. Создайте объекты:

    kubectl apply -f app.yaml && \
    kubectl apply -f vpa.yaml
    
  4. Убедитесь, что поды Vertical Pod Autoscaler и nginx перешли в состояние Running:

    kubectl get pods -n kube-system | grep vpa && \
    kubectl get pods | grep nginx
    

    Результат:

    vpa-admission-controller-58********-qmxtv  1/1  Running  0  44h
    vpa-recommender-67********-jqvgt           1/1  Running  0  44h
    vpa-updater-64********-xqsts               1/1  Running  0  44h
    nginx-6c********-62j7w                     1/1  Running  0  42h
    

Проверьте работу Vertical Pod AutoscalerПроверьте работу Vertical Pod Autoscaler

Для проверки работы Vertical Pod Autoscaler будет создана имитация рабочей нагрузки на приложение nginx.

  1. Изучите рекомендации, которые предоставляет Vertical Pod Autoscaler до создания нагрузки:

    kubectl describe vpa nginx
    

    Обратите внимание на низкие значения Cpu в метриках Status.Recommendation.Container Recommendations:

    Name:         nginx
    Namespace:    default
    Labels:       <none>
    Annotations:  <none>
    API Version:  autoscaling.k8s.io/v1
    Kind:         VerticalPodAutoscaler
    ...
    Status:
      Conditions:
        Last Transition Time:  2022-03-18T08:02:04Z
        Status:                True
        Type:                  RecommendationProvided
      Recommendation:
        Container Recommendations:
          Container Name:  nginx
          Lower Bound:
            Cpu:     25m
            Memory:  262144k
          Target:
            Cpu:     25m
            Memory:  262144k
          Uncapped Target:
            Cpu:     25m
            Memory:  262144k
          Upper Bound:
            Cpu:     25m
            Memory:  262144k
    
  2. Убедитесь, что Vertical Pod Autoscaler управляет ресурсами подов приложения nginx:

    kubectl get pod <имя_пода_nginx> --output yaml
    

    Результат:

    apiVersion: v1
    kind: Pod
    metadata:
      annotations:
        vpaObservedContainers: nginx
        vpaUpdates: 'Pod resources updated by nginx: container 0: cpu request, memory
          request, cpu limit, memory limit'
    ...
    spec:
      containers:
      ...
        name: nginx
        resources:
          limits:
            cpu: 50m
            memory: 500000Ki
          requests:
            cpu: 25m
            memory: 262144k
    
  3. В отдельном окне запустите процесс, имитирующий рабочую нагрузку:

    URL=$(kubectl get service nginx -o json \
      | jq -r '.status.loadBalancer.ingress[0].ip') && \
      while true; do wget -q -O- http://$URL; done
    

    Совет

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

    Примечание

    Если ресурс недоступен по указанному URL, то убедитесь, что группы безопасности для кластера Managed Service for Kubernetes и его групп узлов настроены корректно. Если отсутствует какое-либо из правил — добавьте его.

  4. Через несколько минут изучите рекомендации, которые предоставляет Vertical Pod Autoscaler после создания нагрузки:

    kubectl describe vpa nginx
    

    Vertical Pod Autoscaler выделил дополнительные ресурсы подам при повышении нагрузки. Обратите внимание на повышение значений Cpu в метриках Status.Recommendation.Container Recommendations:

    Name:         nginx
    Namespace:    default
    Labels:       <none>
    Annotations:  <none>
    API Version:  autoscaling.k8s.io/v1
    Kind:         VerticalPodAutoscaler
    ...
    Status:
     Conditions:
        Last Transition Time:  2022-03-18T08:02:04Z
        Status:                True
        Type:                  RecommendationProvided
      Recommendation:
        Container Recommendations:
          Container Name:  nginx
          Lower Bound:
            Cpu:     25m
            Memory:  262144k
          Target:
            Cpu:     410m
            Memory:  262144k
          Uncapped Target:
            Cpu:     410m
            Memory:  262144k
          Upper Bound:
            Cpu:     28897m
            Memory:  1431232100
    
  5. Завершите процесс имитации рабочей нагрузки. В течение нескольких минут значения метрик Status.Recommendation.Container Recommendations вернутся к первоначальным.

Удалите созданные ресурсыУдалите созданные ресурсы

Удалите ресурсы, которые вы больше не будете использовать, чтобы за них не списывалась плата:

  1. Удалите кластер Kubernetes.
  2. Если для доступа к кластеру или узлам использовались статические публичные IP-адреса, освободите и удалите их.

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

Предыдущая
Горизонтальное масштабирование приложения в кластере
Следующая
Изменение параметров сервера метрик (Metrics Server)
Проект Яндекса
© 2025 ООО «Яндекс.Облако»