Yandex Cloud
  • Сервисы
  • Решения
  • Почему Yandex Cloud
  • Сообщество
  • Тарифы
  • Документация
  • Связаться с нами
Подключиться
Language / Region
© 2022 ООО «Яндекс.Облако»
Yandex Managed Service for Kubernetes
  • Сопоставление с другими сервисами Yandex Cloud
  • Начало работы
  • Пошаговые инструкции
    • Все инструкции
    • Подключение к узлу по SSH
    • Обновление Kubernetes
    • Настройка автомасштабирования
    • Подключение к кластеру
      • Обзор способов подключения
      • Настройка групп безопасности
      • Создание статического файла конфигурации
    • Установка приложений
      • Основы работы с Cloud Marketplace
      • Установка Crossplane
      • Установка Fluent Bit
      • Установка Ingress-контроллера Application Load Balancer
      • Установка Jaeger
      • Установка Metrics Provider
      • Установка NodeLocal DNS
    • Сетевые сценарии
      • Обеспечение доступа к приложению, запущенному в кластере Kubernetes
      • Настройка контроллера сетевых политик Calico
      • Настройка контроллера сетевых политик Cilium
      • Настройка NodeLocal DNS для контроллера сетевых политик Cilium
    • Работа с постоянными томами
      • Динамическая подготовка тома
      • Статическая подготовка тома
      • Управление классами хранилищ
      • Увеличение размера тома для подов
      • Увеличение размера тома для контроллера StatefulSet
      • Подключение тома в блочном режиме
      • Интеграция с Object Storage
    • Управление кластером Kubernetes
      • Получение информации о кластере Kubernetes
      • Создание кластера Kubernetes
      • Изменение кластера Kubernetes
      • Создание пространства имен в кластере Kubernetes
      • Удаление кластера Kubernetes
    • Управление группой узлов
      • Информация об имеющихся группах узлов
      • Создание группы узлов
      • Подключение к узлу по SSH
      • Настройка автомасштабирования
      • Изменение группы узлов
      • Управление метками узлов кластера Kubernetes
      • Удаление группы узлов
    • Подключение внешних узлов к кластеру
  • Практические руководства
    • Все руководства
    • Создание нового Kubernetes-проекта в Yandex Cloud
    • Интеграция с Container Registry
    • Запуск рабочих нагрузок с GPU
    • Установка Ingress-контроллера NGINX с Let's Encrypt®
    • Установка Ingress-контроллера NGINX с сертификатом из Certificate Manager
    • Настройка Application Load Balancer Ingress-контроллера
    • Резервное копирование в Object Storage
    • Горизонтальное масштабирование приложения в кластере
    • Вертикальное масштабирование приложения в кластере
    • Работа со снапшотами
    • Интеграция с корпоративной зоной DNS
    • Автоматическое масштабирование DNS по размеру кластера
    • Настройка локального кеширования DNS
    • Настройка Fluent Bit для работы с 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. Вертикальное масштабирование приложения в кластере

Вертикальное масштабирование приложения в кластере

Статья создана
Yandex Cloud
  • Перед началом работы
  • Создайте Vertical Pod Autoscaler и тестовое приложение
  • Проверьте работу Vertical Pod Autoscaler
  • Удалите созданные ресурсы

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

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

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

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

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

  2. Создайте группы безопасности для мастера Kubernetes и узлов:

    • sg-k8s — для мастера и группы узлов.
    • k8s-public-services — для публичного доступа к сервисам из интернета.
    • k8s-master-whitelist — для доступа к API Kubernetes.
  3. Создайте кластер Managed Service for Kubernetes и группу узлов любой подходящей конфигурации. При создании кластера и группы узлов:

    • Используйте созданные ранее группы безопасности.
    • Выберите автоматический тип назначения публичного адреса.
  4. Установите kubectl и настройте его на работу с созданным кластером.

Создайте 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: k8s.gcr.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"
    
  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-58cf99779c-qmxtv  1/1  Running  0  44h
    vpa-recommender-678f4f6d4b-jqvgt           1/1  Running  0  44h
    vpa-updater-64ddd67787-xqsts               1/1  Running  0  44h
    nginx-6c5cbfc6d9-62j7w                     1/1  Running  0  42h
    nginx-6c5cbfc6d9-6t4nz                     1/1  Running  0  42h
    

    Примечание

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

Проверьте работу 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
    

    Совет

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

  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-адреса, освободите и удалите их.

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

Language / Region
© 2022 ООО «Яндекс.Облако»
В этой статье:
  • Перед началом работы
  • Создайте Vertical Pod Autoscaler и тестовое приложение
  • Проверьте работу Vertical Pod Autoscaler
  • Удалите созданные ресурсы