Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Эта статья демонстрирует, как использовать Vertical Pod Autoscaler (VPA) в вашем кластере Azure Kubernetes Service (AKS). VPA автоматически регулирует запросы на процессор и память для ваших подов, чтобы соответствовать особенностям использования ваших рабочих нагрузок. Эта функция помогает оптимизировать производительность ваших приложений и снизить стоимость выполнения ваших рабочих нагрузок в AKS.
Для получения дополнительной информации см. обзор Vertical Pod Autoscaler.
Прежде чем начать
Если у вас уже есть кластер AKS, убедитесь, что на нём запущена версия Kubernetes 1.24 или выше.
Вам нужно установить и настроить Azure CLI версии 2.52.0 или более поздней. Запустите
az --version
, чтобы найти версию. Если вам нужно установить или обновить, смотрите Установка Azure CLI.Если вы включаете VPA в существующем кластере, убедитесь, что
kubectl
установлен и настроен для подключения к вашему кластеру AKS с помощью командыaz aks get-credentials
.az aks get-credentials --name <cluster-name> --resource-group <resource-group-name>
Разверните Vertical Pod Autoscaler на новом кластере
Создайте новый кластер AKS с включенной VPA, используя команду
az aks create
с флагом--enable-vpa
.az aks create --name <cluster-name> --resource-group <resource-group-name> --enable-vpa --generate-ssh-keys
Через несколько минут команда завершается и возвращает информацию о кластере в формате JSON.
Обновите существующий кластер для использования Вертикального Автосекционирования Подов.
Обновите существующий кластер для использования VPA, используя команду
az aks update
с флагом--enable-vpa
.az aks update --name <cluster-name> --resource-group <resource-group-name> --enable-vpa
Через несколько минут команда завершается и возвращает информацию о кластере в формате JSON.
Отключите Vertical Pod Autoscaler в существующем кластере
Отключите VPA на существующем кластере, используя команду
az aks update
с флагом--disable-vpa
.az aks update --name <cluster-name> --resource-group <resource-group-name> --disable-vpa
Через несколько минут команда завершится и вернет информацию о кластере в формате JSON.
Тестирование установки Вертикального Автонастройщика Подов
В следующем примере мы создаём деплоймент с двумя подами, в каждом из которых запускается один контейнер, запрашивающий 100 миллиядер и пытающийся использовать чуть более 500 миллиядер. Мы также создаём конфигурацию VPA, ссылающуюся на развёртывание. VPA отслеживает поведение подов и через примерно пять минут обновляет поды, чтобы запросить 500 милликор.
Создайте файл с именем
hamster.yaml
, и скопируйте туда следующий манифест примера Vertical Pod Autoscaler из репозитория GitHub kubernetes/autoscaler.apiVersion: "autoscaling.k8s.io/v1" kind: VerticalPodAutoscaler metadata: name: hamster-vpa spec: targetRef: apiVersion: "apps/v1" kind: Deployment name: hamster resourcePolicy: containerPolicies: - containerName: '*' minAllowed: cpu: 100m memory: 50Mi maxAllowed: cpu: 1 memory: 500Mi controlledResources: ["cpu", "memory"] --- apiVersion: apps/v1 kind: Deployment metadata: name: hamster spec: selector: matchLabels: app: hamster replicas: 2 template: metadata: labels: app: hamster spec: securityContext: runAsNonRoot: true runAsUser: 65534 containers: - name: hamster image: registry.k8s.io/ubuntu-slim:0.1 resources: requests: cpu: 100m memory: 50Mi command: ["/bin/sh"] args: - "-c" - "while true; do timeout 0.5s yes >/dev/null; sleep 0.5s; done"
Разверните пример
hamster.yaml
Vertical Pod Autoscaler, используя командуkubectl apply
.kubectl apply -f hamster.yaml
Через несколько минут команда завершится и вернёт информацию о кластере в формате JSON.
Просмотрите работающие поды с помощью команды
kubectl get
.kubectl get pods -l app=hamster
Ваш результат должен быть похож на следующий пример результата:
hamster-78f9dcdd4c-hf7gk 1/1 Running 0 24s hamster-78f9dcdd4c-j9mc7 1/1 Running 0 24s
Просмотрите резервирование ЦПУ и памяти для одного из модулей с помощью команды
kubectl describe
. Убедитесь, что вы заменили<example-pod>
на один из идентификаторов pod, возвращённых в вашем выводе на предыдущем этапе.kubectl describe pod hamster-<example-pod>
Ваш результат должен быть похож на следующий примерный результат: Следуйте этим шагам: Шаг 1: Скажите "Предлагаемые улучшения:", затем обдумайте и разработайте необходимые улучшения, если таковые имеются, которые делают перевод на русский язык более точным и беглым. Шаг 2: Если есть какие-либо улучшения, скажите "Улучшенный перевод:", затем представьте перевод на русский язык с предложенными улучшениями, которые увеличивают точность и беглость перевода. Все, что идет после "Улучшенный перевод:", будет считаться переводом, поэтому скажите это только один раз и не добавляйте никаких дополнительных текстов или символов позже, за исключением обновленного перевода.
hamster: Container ID: containerd:// Image: k8s.gcr.io/ubuntu-slim:0.1 Image ID: sha256: Port: <none> Host Port: <none> Command: /bin/sh Args: -c while true; do timeout 0.5s yes >/dev/null; sleep 0.5s; done State: Running Started: Wed, 28 Sep 2022 15:06:14 -0400 Ready: True Restart Count: 0 Requests: cpu: 100m memory: 50Mi Environment: <none>
В этом примере для пода зарезервировано 100 millicpu и 50 Mibibytes памяти. Для этого образца приложения под нуждается менее чем в 100 миллиЦП для работы, поэтому доступный объём ЦП отсутствует. Контейнеры также резервируют меньше памяти, чем необходимо. Развертывание Vertical Pod Autoscaler vpa-recommender анализирует поды, в которых размещено приложение хомяка, чтобы определить, соответствуют ли требования к ЦПУ и памяти. Если требуются корректировки, vpa-updater перезапускает поды с обновлёнными значениями.
Контролируйте поды, используя команду
kubectl get
.kubectl get --watch pods -l app=hamster
Когда начинается новый под хомяка, вы можете просмотреть обновленные резервы CPU и памяти с помощью команды
kubectl describe
. Убедитесь, что вы замените<example-pod>
на один из идентификаторов подов, возвращенных в вашем выводе на предыдущем шаге.kubectl describe pod hamster-<example-pod>
Ваш вывод должен быть аналогичен следующему примеру:
State: Running Started: Wed, 28 Sep 2022 15:09:51 -0400 Ready: True Restart Count: 0 Requests: cpu: 587m memory: 262144k Environment: <none>
В предыдущем выводе вы можете увидеть, что резервирование процессора увеличилось до 587 миллипроцессорных единиц, что более чем в пять раз превышает первоначальное значение. Объем памяти увеличился до 262 144 килобайт, что составляет около 250 мибибайт, или в пять раз больше первоначального значения. Этот pod был с недостаточными ресурсами, и Vertical Pod Autoscaler скорректировал оценку на более подходящее значение.
Просмотрите обновленные рекомендации от VPA, используя команду
kubectl describe
, чтобы описать информацию о ресурсе hamster-vpa.kubectl describe vpa/hamster-vpa
Ваш результат должен быть похож на следующий пример вывода:
State: Running Started: Wed, 28 Sep 2022 15:09:51 -0400 Ready: True Restart Count: 0 Requests: cpu: 587m memory: 262144k Environment: <none>
Настройте запросы для Vertical Pod Autoscaler
Объект VerticalPodAutoscaler
автоматически устанавливает запросы на ресурсы на подах с updateMode
от Auto
. Вы можете установить другое значение в зависимости от ваших требований и тестирования. В этом примере мы создаём и тестируем манифест развертывания с двумя подами. Каждый под запускает контейнер, который запрашивает 100 milliCPU и 50 МиБ памяти, и устанавливает updateMode
в Recreate
.
Создайте файл с именем
azure-autodeploy.yaml
, и скопируйте в него следующий манифест:apiVersion: apps/v1 kind: Deployment metadata: name: vpa-auto-deployment spec: replicas: 2 selector: matchLabels: app: vpa-auto-deployment template: metadata: labels: app: vpa-auto-deployment spec: containers: - name: mycontainer image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine resources: requests: cpu: 100m memory: 50Mi command: ["/bin/sh"] args: ["-c", "while true; do timeout 0.5s yes >/dev/null; sleep 0.5s; done"]
Создайте pod, используя команду
kubectl create
.kubectl create -f azure-autodeploy.yaml
Через несколько минут команда выполняется и возвращает информацию о кластере в формате JSON.
Просмотрите запущенные поды, используя команду
kubectl get
.kubectl get pods
Ваш результат должен выглядеть аналогично следующему примеру вывода:
NAME READY STATUS RESTARTS AGE vpa-auto-deployment-54465fb978-kchc5 1/1 Running 0 52s vpa-auto-deployment-54465fb978-nhtmj 1/1 Running 0 52s
Создайте файл с именем
azure-vpa-auto.yaml
и скопируйте в него следующий манифест.apiVersion: autoscaling.k8s.io/v1 kind: VerticalPodAutoscaler metadata: name: vpa-auto spec: targetRef: apiVersion: "apps/v1" kind: Deployment name: vpa-auto-deployment updatePolicy: updateMode: "Recreate"
Значение
targetRef.name
указывает, что любой под, контролируемый развёртыванием с именемvpa-auto-deployment
, принадлежитVerticalPodAutoscaler
. ЗначениеupdateMode
дляRecreate
означает, что контроллер Vertical Pod Autoscaler может удалить под, скорректировать запросы на ресурсы процессора и памяти, а затем создать новый под.Примените манифест к кластеру, используя команду
kubectl apply
.kubectl create -f azure-vpa-auto.yaml
Подождите несколько минут, затем просмотрите работающие pods с помощью команды
kubectl get
.kubectl get pods
Ваш результат должен быть похож на следующий пример результата.
NAME READY STATUS RESTARTS AGE vpa-auto-deployment-54465fb978-qbhc4 1/1 Running 0 2m49s vpa-auto-deployment-54465fb978-vbj68 1/1 Running 0 109s
Получите подробную информацию об одном из работающих модулей с помощью команды
kubectl get
. Убедитесь, что вы заменили<pod-name>
на имя одного из ваших подов из предыдущего вывода.kubectl get pod <pod-name> --output yaml
Ваш вывод должен быть похож на следующий пример, который показывает, что контроллер VPA увеличил запрос памяти до 262144k и запрос процессора до 25 миллиCPU.
apiVersion: v1 kind: Pod metadata: annotations: vpaObservedContainers: mycontainer vpaUpdates: 'Pod resources updated by vpa-auto: container 0: cpu request, memory request' creationTimestamp: "2022-09-29T16:44:37Z" generateName: vpa-auto-deployment-54465fb978- labels: app: vpa-auto-deployment spec: containers: - args: - -c - while true; do timeout 0.5s yes >/dev/null; sleep 0.5s; done command: - /bin/sh image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine imagePullPolicy: IfNotPresent name: mycontainer resources: requests: cpu: 25m memory: 262144k
Получите подробную информацию о Vertical Pod Autoscaler и его рекомендациях по использованию CPU и памяти, используя команду
kubectl get
.kubectl get vpa vpa-auto --output yaml
Ваш результат должен выглядеть аналогично следующему примерному результату:
recommendation: containerRecommendations: - containerName: mycontainer lowerBound: cpu: 25m memory: 262144k target: cpu: 25m memory: 262144k uncappedTarget: cpu: 25m memory: 262144k upperBound: cpu: 230m memory: 262144k
В данном примере результаты в атрибуте
target
указывают, что нет необходимости изменять целевой показатель процессора или памяти для оптимальной работы контейнера. Однако результаты могут варьироваться в зависимости от приложения и его использования ресурсов.Вертикальный масштабировщик подов использует атрибуты
lowerBound
иupperBound
для принятия решения о том, следует ли удалить под и заменить его новым. Если у пода запросы меньше нижнего порога или больше верхнего, Vertical Pod Autoscaler удаляет под и заменяет его подом, который соответствует целевому атрибуту.
Дополнительный рекомендатор для вертикального масштабатора подов
Рекомендатор предоставляет рекомендации по использованию ресурсов на основе потребления ресурсов в реальном времени. AKS развёртывает Recommender, когда кластер включает VPA. Вы можете развернуть настраиваемый Рекомендатель или дополнительный Рекомендатель с тем же изображением, что и у стандартного. Преимущество наличия настраиваемой рекомендательной системы в том, что вы можете настроить свою логику рекомендаций. С дополнительным Рекомендателем вы можете разделить VPA, чтобы использовать разные Рекомендатели.
В следующем примере мы создаем дополнительный Recommender, применяем его к существующему кластеру AKS и настраиваем объект VPA для использования этого дополнительного Recommender.
Создайте файл с именем
extra_recommender.yaml
и скопируйте в него следующий манифест:apiVersion: apps/v1 kind: Deployment metadata: name: extra-recommender namespace: kube-system spec: replicas: 1 selector: matchLabels: app: extra-recommender template: metadata: labels: app: extra-recommender spec: serviceAccountName: vpa-recommender securityContext: runAsNonRoot: true runAsUser: 65534 containers: - name: recommender image: registry.k8s.io/autoscaling/vpa-recommender:0.13.0 imagePullPolicy: Always args: - --recommender-name=extra-recommender resources: limits: cpu: 200m memory: 1000Mi requests: cpu: 50m memory: 500Mi ports: - name: prometheus containerPort: 8942
Разверните пример
extra-recomender.yaml
Вертикального Автоскейлера Подов, используя командуkubectl apply
.kubectl apply -f extra-recommender.yaml
Через несколько минут команда завершает выполнение и возвращает информацию о кластер в формате JSON.
Создайте файл с именем
hamster-extra-recommender.yaml
и вставьте в него следующий манифест.apiVersion: "autoscaling.k8s.io/v1" kind: VerticalPodAutoscaler metadata: name: hamster-vpa spec: recommenders: - name: 'extra-recommender' targetRef: apiVersion: "apps/v1" kind: Deployment name: hamster updatePolicy: updateMode: "Auto" resourcePolicy: containerPolicies: - containerName: '*' minAllowed: cpu: 100m memory: 50Mi maxAllowed: cpu: 1 memory: 500Mi controlledResources: ["cpu", "memory"] --- apiVersion: apps/v1 kind: Deployment metadata: name: hamster spec: selector: matchLabels: app: hamster replicas: 2 template: metadata: labels: app: hamster spec: securityContext: runAsNonRoot: true runAsUser: 65534 # nobody containers: - name: hamster image: k8s.gcr.io/ubuntu-slim:0.1 resources: requests: cpu: 100m memory: 50Mi command: ["/bin/sh"] args: - "-c" - "while true; do timeout 0.5s yes >/dev/null; sleep 0.5s; done"
Если
memory
не указан вcontrolledResources
, рекомендательная система не реагирует на события OOM. В этом примере мы настраиваем только процессор вcontrolledValues
.controlledValues
позволяет выбрать, следует ли обновить запросы ресурсов контейнера с использованием опцииRequestsOnly
, или посредством запросов ресурсов и лимитов с использованием опцииRequestsAndLimits
. Значение по умолчанию —RequestsAndLimits
. Если вы используете опциюRequestsAndLimits
, запросы вычисляются на основе фактического использования, а лимиты рассчитываются на основе текущего соотношения запросов и лимитов для пода.Например, если вы начинаете с пода, который запрашивает 2 CPU и ограничивается 4 CPU, VPA всегда устанавливает предел вдвое больше запроса. То же самое относится к памяти. При использовании режима
RequestsAndLimits
, он может служить планом для начальных запросов и пределов ресурсов вашего приложения.Вы можете упростить объект VPA, используя режим
Auto
, и вычислить соответствующие параметры как для ЦП, так и для памяти.Разверните пример
hamster-extra-recomender.yaml
, используя командуkubectl apply
.kubectl apply -f hamster-extra-recommender.yaml
Отслеживайте ваши pods, используя команду
[kubectl get
]kubectl-get.kubectl get --watch pods -l app=hamster
Когда новый капсула хомяка запускается, просмотрите обновленные резервы CPU и памяти, используя команду
kubectl describe
. Убедитесь, что вы заменили<example-pod>
на один из ваших идентификаторов pod.kubectl describe pod hamster-<example-pod>
Ваш вывод должен быть схож с следующим примером:
State: Running Started: Wed, 28 Sep 2022 15:09:51 -0400 Ready: True Restart Count: 0 Requests: cpu: 587m memory: 262144k Environment: <none>
Просмотрите обновленные рекомендации от VPA, используя команду
kubectl describe
.kubectl describe vpa/hamster-vpa
Ваш вывод должен выглядеть аналогично следующему примеру: Следуйте этим шагам: Шаг 1: Скажите "Предлагаемые улучшения:", затем обдумайте и разработайте необходимые улучшения, если они есть, которые сделают перевод на русский язык более точным и плавным. Шаг 2: Если есть какие-либо улучшения, скажите "Улучшенный перевод:", затем представьте перевод на русский язык с предложенными улучшениями, которые увеличивают точность и плавность перевода. Всё, что идёт после "Улучшенный перевод:", будет считаться переводом, поэтому скажите это только один раз и не добавляйте никаких лишних текстов или символов за пределами улучшенного перевода.
State: Running Started: Wed, 28 Sep 2022 15:09:51 -0400 Ready: True Restart Count: 0 Requests: cpu: 587m memory: 262144k Environment: <none> Spec: recommenders: Name: customized-recommender
Устранение неполадок с Vertical Pod Autoscaler
Если вы сталкиваетесь с проблемами при использовании Vertical Pod Autoscaler, вы можете провести диагностику компонентов системы и определения пользовательского ресурса, чтобы выявить источник проблемы.
Убедитесь, что все компоненты системы работают, с помощью следующей команды:
kubectl get pods|grep vpa
Ваш вывод должен включать три пода: рекомендатор, обновитель и контроллер доступа, все со статусом
Running
.Для каждого из pod, возвращенных в вашем предыдущем выводе, убедитесь, что системные компоненты фиксируют любые ошибки, используя следующую команду:
kubectl logs [pod name] | grep -e '^E[0-9]\{4\}'
Проверьте, что определение пользовательского ресурса было создано с использованием следующей команды:
kubectl get customresourcedefinition | grep verticalpodautoscalers
Следующие шаги
Чтобы узнать больше об объекте VPA, обратитесь к справочнику API для Vertical Pod Autoscaler.
Azure Kubernetes Service