Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье представлен обзор масштабирования надстроек, оптимизированных по затратам, в Службе Kubernetes в Azure (AKS). С помощью масштабирования надстроек, оптимизированного по затратам, можно управлять надстройками, которые требуют пользовательского ЦП и памяти, переопределяя конфигурации по умолчанию или включая автомасштабирование. Эта функция гарантирует, что ресурсы не чрезмерно выделяются для подключаемых модулей, что увеличивает экономию затрат и эффективность использования кластера.
Обзор
Включение масштабирования дополнений с оптимизацией затрат устанавливает дополнение Vertical Pod Autoscaler (VPA), позволяя поддерживаемым дополнениям автоматически масштабироваться в зависимости от использования.
Эта функция также позволяет настраивать запросы и лимиты ЦП и памяти ресурсов по умолчанию в Развертываниях и DaemonSets, пределы максимального и минимального разрешенного ЦП и памяти, а также режим обновления VPA в пользовательских ресурсах VPA. Дополнительные сведения см. в статье о настройке конфигурации ресурсов для надстроек AKS.
Поддерживаемые надстройки AKS
Следующие управляемые надстройки AKS поддерживают оптимизированную для затрат функцию масштабирования надстроек:
| Дополнение | Поведение активации | Имя настраиваемого ресурса VPA | Команда для проверки настраиваемого ресурса VPA |
|---|---|---|---|
| CoreDNS | Включен по умолчанию в новых кластерах AKS. | coredns |
kubectl get vpa coredns --namespace kube-system |
| Идентификация рабочей нагрузки | Необязательная надстройка, требующая ручного включения. | azure-wi-webhook-controller-manager |
kubectl get vpa azure-wi-webhook-controller-manager --namespace kube-system |
| Целостность изображений | Необязательная надстройка, требующая ручного включения. | ratify |
kubectl get vpa ratify --namespace gatekeeper-system |
| Наблюдаемость сети (Сетчатка) | Необязательная надстройка, требующая ручного включения. |
retina-agent и retina-operator. |
kubectl get vpa retina-agent --namespace kube-system и kubectl get vpa retina-operator --namespace kube-system. |
Поддерживаемые режимы VPA для масштабирования дополнений, оптимизированных по затратам.
В настоящее время VPA поддерживает следующие режимы масштабирования дополнений, оптимизированных для снижения затрат:
- Отключено. VPA предоставляет данные рекомендаций по ресурсам, но не применяет их к целевому поду.
- Начальный (режим по умолчанию): VPA автоматически применяет рекомендации по ЦП и памяти к целевому модулю при перезапуске, но не инициирует сам перезапуск.
- Авто: VPA автоматически обновляет запросы ЦП и памяти для модулей pod на основе рекомендаций.
Замечание
При включении масштабирования дополнений, оптимизированного по затратам, рассмотрите следующие сведения:
- При удалении настраиваемого ресурса Deployment, DaemonSet или VPA изменения возвращаются к начальной конфигурации надстройки AKS.
- Оптимизированная для затрат функция масштабирования надстроек позволяет надстройке VPA автоматически масштабировать поддерживаемые надстройки AKS. Он не работает с локально размещенным VPA.
- AKS перезапускает pod надстройки при включении масштабирования надстроек, оптимизированного для затрат. CoreDNS в настоящее время является единственным исключением, чтобы избежать потенциальных сбоев во время перезапуска. Дополнительные сведения см. в разделе "Поведение автомасштабирования CoreDNS".
Предупреждение
Убедитесь, что в пуле системных узлов достаточно вычислительных ресурсов для ваших надстроек при включении масштабирования надстроек с оптимизацией затрат. AKS рекомендует включить автомасштабирование кластера или автоматическую подготовку узла , чтобы обеспечить оптимальное распределение вычислительных ресурсов. Отслеживайте ожидающие pods надстроек при использовании функции масштабирования, оптимизированной по стоимости. VPA может рекомендовать запросы ресурсов, превышающие доступную емкость узла, что может привести к невозможности планирования подов. Это поведение можно контролировать, настраивая значения min/max для запросов и ограничений поддерживаемых надстроек.
Предпосылки
- Кластер AKS под управлением Kubernetes версии 1.25 или более поздней.
- Установленная и настроенная Azure CLI версии 2.60.0 или более поздней. Чтобы узнать версию, выполните команду
az --version. Если вам нужно установить или обновить, см. статью "Установка Azure CLI". -
aks-previewи зарегистрируйте функцию предварительной версии надстройки, оптимизированной для затрат.
Это важно
Предварительные версии функций AKS доступны на условиях самообслуживания и добровольного выбора. Предварительные версии предоставляются "как есть" и "при наличии". На них не распространяются соглашения об уровне обслуживания и ограниченная гарантия. Предварительные версии AKS сопровождаются частичной поддержкой клиентов на основе принципа лучших усилий. Как таковые, эти функции не предназначены для использования в производстве. Для получения дополнительной информации ознакомьтесь со следующими статьями поддержки:
Установка расширения Azure CLI aks-preview
aks-previewУстановите расширение с помощьюaz extension addкоманды.az extension add --name aks-previewОбновите до последней версии расширения с помощью
az extension updateкоманды.az extension update --name aks-preview
Зарегистрировать предварительную версию функции масштабирования, оптимизированную по затратам.
Зарегистрируйте оптимизированную для оптимизации затрат функцию предварительной версии надстройки с помощью
az feature registerкоманды.az feature register --namespace "Microsoft.ContainerService" --name "AKS-AddonAutoscalingPreview"В течение нескольких минут состояние отображается как зарегистрированное.
Проверьте состояние регистрации с помощью
az feature showкоманды.az feature show --namespace "Microsoft.ContainerService" --name "AKS-AddonAutoscalingPreview"Когда состояние отображается как зарегистрированное, обновите регистрацию поставщика Microsoft.ContainerService с помощью
az provider registerкоманды.az provider register --namespace Microsoft.ContainerService
Включение масштабирования надстроек, оптимизированного по затратам, в кластере AKS
При включении надстройки кластер AKS автоматически устанавливает надстройку VPA. Надстройки AKS, поддерживающие оптимизированную для затрат функцию масштабирования надстроек, имеют другое поведение включения.
Замечание
Если вы используете Bicep, шаблоны ARM или Terraform, установите VerticalPodAutoscaler на "True", а AddonAutoscaling на "enabled".
Включите оптимизированное по затратам масштабирование надстроек в новом кластере
Включите масштабирование с оптимизацией затрат для надстроек в новом кластере AKS, используя команду
az aks createс флагом--enable-optimized-addon-scaling.az aks create --resource-group $RESOURCE_GROUP_NAME --name $CLUSTER_NAME --enable-optimized-addon-scaling
Включение оптимизированной для затрат надстройки масштабирования в существующем кластере
Включите масштабирование надстройки, оптимизированное для затрат, в существующем кластере AKS с помощью команды
az aks updateс флагом--enable-optimized-addon-scaling.az aks update --resource-group $RESOURCE_GROUP_NAME --name $CLUSTER_NAME --enable-optimized-addon-scaling
Отключение масштабирования дополнения, оптимизированного по затратам, в кластере AKS
Отключите масштабирование дополнения, оптимизированного для затрат, в кластере AKS с помощью команды
az aks updateи флага--disable-optimized-addon-scaling.az aks update --resource-group $RESOURCE_GROUP_NAME --name $CLUSTER_NAME --disable-optimized-addon-scaling
Замечание
Отключение оптимизированной для затрат функции масштабирования надстройки не отключает надстройку VPA по умолчанию. Сведения об отключении VPA см. в разделе "Отключить VPA" в кластере AKS.
Настройка конфигурации ресурсов по умолчанию
С функцией масштабирования надстройки, оптимизированной для затрат, включенной в вашем кластере, вы можете настроить стандартные настройки ЦП и памяти для ресурсов надстроек, а также конфигурацию VPA по умолчанию для поддерживаемых надстроек платформы AKS. Дополнительные сведения см. в статье о настройке конфигурации ресурсов для надстроек AKS.
Применение рекомендуемых значений VPA вручную
Замечание
В начальном режиме VPA применяет рекомендуемые запросы ЦП и памяти только при создании или обновлении модуля pod. Если вы хотите, чтобы рекомендации вступили в силу немедленно, обновите поды вручную. Перед применением рекомендуемых значений вручную убедитесь, что для режима обновления VPA задано значение Initial или Auto в пользовательском ресурсе VPA.
Проверьте состояние pod и загрузку ЦП или памяти, чтобы убедиться, что модуль pod работает должным образом.
В следующем примере используется
kubectl get podкоманда для проверки состояния pod CoreDNS:kubectl get pod <coredns-pod-name> --namespace kube-system -o yamlВ следующих выходных данных показан пример состояния модуля Pod CoreDNS:
apiVersion: v1 kind: Pod metadata: name: <coredns-pod-name> namespace: kube-system spec: ... containers: - name: coredns resources: limits: cpu: "3" memory: "500Mi" requests: cpu: "100m" memory: "70Mi"Получите рекомендуемое значение VPA с помощью
kubectl get vpaкоманды.kubectl get vpa coredns --namespace kube-systemВ следующих выходных данных показан пример рекомендуемого значения VPA для модуля Pod CoreDNS:
NAME MODE CPU MEM PROVIDED AGE coredns Initial 11m 23574998 True 44mЕсли вы хотите использовать значения, рекомендуемые VPA, вручную удалите модуль pod с помощью
kubectl delete podкоманды, чтобы перезапустить pod с рекомендуемыми значениями VPA.kubectl delete pod <coredns-pod-name> --namespace kube-systemПосле перезапуска модуля pod проверьте состояние pod и обновления ЦП/памяти с помощью
kubectl get podкоманды.kubectl get pod <coredns-pod-name> --namespace kube-system -o yamlВ следующих выходных данных показан пример состояния модуля pod CoreDNS после применения рекомендуемых значений VPA:
apiVersion: v1 kind: Pod metadata: name: <coredns-pod-name> namespace: kube-system spec: ... containers: - name: coredns resources: limits: cpu: "330m" memory: "168392842" requests: cpu: "11m" memory: "23574998"
Устранение неполадок
С активированной функцией масштабирования надстроек, оптимизированных по затратам, в вашем кластере можно настраивать параметры ЦП и памяти по умолчанию для ресурсов надстроек, а также изменять конфигурацию VPA по умолчанию для поддерживаемых управляемых надстроек AKS.
Если модули pod дополнений с поддержкой автомасштабирования находятся в состоянии ожидания или если вы не видите рекомендаций по VPA для дополнений с поддержкой автомасштабирования, выполните следующие действия для устранения проблемы.
Проверка состояния надстройки VPA, управляемой AKS
Проверьте, выполняются ли все системные компоненты VPA с помощью
kubectl get podsкоманды.kubectl get pods --namespace kube-system | grep vpaВыходные данные должны отображать три модуля pod (vpa-admission-controller, vpa-recommender и vpa-updater), выполняемые в пространстве имен, как показано в
kube-systemследующем примере:vpa-admission-controller 2/2 2 2 4m11s vpa-recommender 1/1 1 1 4m11s vpa-updater 1/1 1 1 4m11sДля каждого из трех модулей VPA проверьте журналы на ошибки, используя команду
kubectl logs. Обязательно замените<pod-name>именами модулей VPA pod.kubectl logs <pod-name> --namespace kube-system | grep -e '^E[0-9]\{4\}'Подтвердите создание пользовательского определения ресурсов (CRD) с помощью
kubectl getкоманды.kubectl get customresourcedefinition | grep verticalpodautoscalers
Проверьте состояние подов и использование ЦП и памяти
Проверьте состояние pod с помощью
kubectl get podкоманды.kubectl get pod <pod-name> --namespace=kube-systemЕсли модуль pod имеет состояние
Pending, проверьте свойство состояния pod, чтобы определить причину, по которой модуль pod не выполняется.kubectl describe pod <pod-name> --namespace kube-system -o yamlВ следующих выходных данных показан пример состояния pod с состоянием
Pending:apiVersion: v1 kind: Pod ... status: conditions: - lastProbeTime: null lastTransitionTime: "2023-05-03T17:05:26Z" message: '0/1 nodes are available: 1 Insufficient cpu, 1 Insufficient memory. preemption: 0/1 nodes are available: 1 Insufficient cpu, 1 Insufficient memory..' reason: Unschedulable status: "False" type: PodScheduled phase: Pending qosClass: GuaranteedЕсли выходные данные показывают, что модуль pod находится в состоянии
Pendingиз-за нехватки ЦП или памяти, рассмотрите следующие действия:- Добавьте больше узлов, чтобы поды можно было размещать на узлах с более низкой загрузкой ресурсов.
- Отключите VPA для целевого подключаемого модуля pod, изменив режим обновления на Off, а затем вручную обновите запросы и ограничения до значений доступных ресурсов на узле. Будьте осторожны при установке ограничений ресурсов на крайне низкие значения, так как это может привести к возникновению ошибки OOM или регулирования ЦП, если он пытается использовать больше ресурсов, чем доступно на узле.
Дальнейшие шаги
- Настройте автомасштабирование кластера или автоматическую подготовку узла в кластере для автоматического масштабирования кластера.