Использование PowerShell для автомасштабирования кластера в AKS, включенном Azure Arc

Область применения: AKS в Azure Stack HCI 22H2, AKS в Windows Server

PowerShell можно использовать для включения средства автомасштабирования и управления автоматическим масштабированием пулов узлов в целевых кластерах в AKS, включенных Arc. Вы также можете использовать PowerShell для настройки автомасштабирования кластера и управления им.

Создание объекта AksHciAutoScalerConfig

Чтобы создать объект AksHciAutoScalerConfig для передачи New-AksHciCluster в команду или Set-AksHciCluster , используйте следующую команду:

New-AksHciAutoScalerProfile -Name asp1 -AutoScalerProfileConfig @{ "min-node-count"=2; "max-node-count"=7; 'scale-down-unneeded-time'='1m'}

При создании кластера можно указать объект autoscalerconfig . Объект содержит параметры для вашего автомасштабирования. Сведения о параметрах см. в статье Использование профилей средства автомасштабирования.

Изменение существующего объекта профиля AksHciAutoScalerConfig

При обновлении существующего объекта профиля AksHciAutoScalerConfig кластеры, использующие этот объект, обновляются для использования новых параметров.

Set-AksHciAutoScalerProfile -name myProfile -autoScalerProfileConfig @{ "max-node-count"=5; "min-node-count"=2 }

Вы можете обновить объект autoscalerconfig , который содержит параметры для вашего автомасштабирования. Сведения о параметрах см. в статье Использование профилей средства автомасштабирования.

Включение автомасштабирования для новых кластеров

Чтобы включить автоматическое масштабирование для всех вновь созданных пулов узлов, используйте следующие параметры с командой New-AksHciCluster :

New-AksHciCluster -name mycluster -enableAutoScaler -autoScalerProfileName myAutoScalerProfile

Включение автомасштабирования в существующем кластере

Чтобы включить автоматическое масштабирование для каждого только что созданного пула узлов в существующем кластере enableAutoScaler , используйте параметр с командой Set-AksHciCluster :

Set-AksHciCluster -Name <string> [-enableAutoScaler <boolean>] [-autoScalerProfileName <String>] 

Включение автомасштабирования в существующем пуле узлов

Чтобы включить автомасштабирование в существующем пуле autoScaler узлов, используйте параметр с командой Set-AksHciNodePool :

Set-AksHciNodePool -clusterName <Your-Cluster-Name> -name <Your-NodePool-Name> -autoScaler $true

Отключение автомасштабирования

Чтобы отключить автомасштабирование для всех существующих и вновь созданных пулов узлов в существующем кластере, задайте для параметра enableAutoScaler значение false с помощью Set-AksHciCluster команды :

Set-AksHciCluster -Name <string> -enableAutoScaler $false

Эффективное использование средства горизонтального автомасштабирования

Теперь, когда кластер и пул узлов настроены на автоматическое масштабирование, можно настроить рабочую нагрузку для масштабирования таким образом, чтобы использовать возможности горизонтального автомасштабирования.

Для масштабирования рабочей нагрузки доступны два метода main:

  • Горизонтальное автомасштабирование pod Kubernetes. В зависимости от характеристик нагрузки средство горизонтального автомасштабирования pod (также известное как средство горизонтального автомасштабирования) масштабирует модули pod развертывания приложения до доступных узлов в кластере Kubernetes. Если больше нет доступных узлов для планирования, средство горизонтального автомасштабирования создает экземпляр нового узла, на который планируется запланировать модули pod. Если нагрузка приложения падает, узлы снова масштабируются.
  • Правила защиты от сходства узлов Kubernetes. Правила защиты от сходства для развертывания Kubernetes могут указывать, что набор модулей pod нельзя масштабировать на одном узле, а для масштабирования рабочей нагрузки требуется другой узел. В сочетании с характеристиками нагрузки или количеством целевых модулей pod для экземпляров приложения средство горизонтального автомасштабирования создает экземпляры новых узлов в пуле узлов для удовлетворения запросов. Если спрос на приложения ослабевает, горизонтальное средство автомасштабирования снова масштабирует пул узлов.

В этом разделе приведены некоторые примеры.

Средство горизонтального автомасштабирования объектов pod

Предварительные требования:

  • Установлен AKS, включенный с помощью Arc.
  • Целевой кластер установлен и подключен к Azure.
  • Развернут один пул узлов Linux с по крайней мере одним активным рабочим узлом Linux.
  • Средство горизонтального автомасштабирования узлов включено в целевом кластере и пуле узлов Linux, как описано выше.

Мы используем пример пошагового руководства по средству горизонтального автомасштабирования pod Kubernetes , чтобы показать, как работает средство горизонтального автомасштабирования pod.

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

Чтобы развернуть сервер метрик в целевом кластере с именем mycluster, выполните следующие команды:

Get-AksHciCredential -name mycluster
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

После развертывания сервера метрик Kubernetes можно развернуть приложение в пуле узлов, который используется для масштабирования. Для этого примера мы используем тестовое приложение с веб-сайта сообщества Kubernetes.

kubectl apply -f https://k8s.io/examples/application/php-apache.yaml
deployment.apps/php-apache created
service/php-apache created

Эта команда создает развертывание приложения PHP на основе веб-сервера Apache, которое возвращает сообщение "ОК" вызывающей клиенту.

Затем настройте средство горизонтального автомасштабирования pod, чтобы запланировать новый модуль pod, когда загрузка ЦП текущего модуля pod достигнет 50 %, и масштабировать от 1 до 50 модулей pod.

kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
horizontalpodautoscaler.autoscaling/php-apache autoscaled

Вы можете проверка текущее состояние созданного горизонтального автомасштабирования pod, выполнив следующую команду:

kubectl get hpa
NAME         REFERENCE                     TARGET    MINPODS   MAXPODS   REPLICAS   AGE
php-apache   Deployment/php-apache/scale   0% / 50%  1         10        1          18s

Наконец, увеличьте нагрузку на веб-сервер, чтобы увидеть его горизонтальное масштабирование. Откройте новое окно PowerShell и выполните следующую команду:

kubectl run -i --tty load-generator --rm --image=busybox:1.28 --restart=Never -- /bin/sh -c "while sleep 0.01; do wget -q -O- http://php-apache; done"

Если вернуться к предыдущему окну PowerShell и выполнить следующую команду, вы увидите, что количество модулей pod изменится в течение короткого периода:

kubectl get hpa php-apache --watch
NAME         REFERENCE                     TARGET      MINPODS   MAXPODS   REPLICAS   AGE
php-apache   Deployment/php-apache/scale   305% / 50%  1         10        1          3m

В этом примере количество модулей pod изменяется с 1 на 7, как показано ниже:

NAME         REFERENCE                     TARGET      MINPODS   MAXPODS   REPLICAS   AGE
php-apache   Deployment/php-apache/scale   305% / 50%  1         10        7          3m

Если этого недостаточно для активации средства автомасштабирования узла, так как все модули pod помещаются на одном узле, откройте дополнительные окна PowerShell и выполните дополнительные команды генератора нагрузки. Обязательно изменяйте имя создаваемого модуля pod при каждом выполнении команды. Например, используйте load-generator-2 вместо load-generator, как показано в следующей команде.

kubectl run -i --tty load-generator-2 --rm --image=busybox:1.28 --restart=Never -- /bin/sh -c "while sleep 0.01; do wget -q -O- http://php-apache; done"

Затем проверка количество узлов, созданных с помощью следующей команды:

kubectl get nodes
NAME              STATUS   ROLES                  AGE    VERSION
moc-laondkmydzp   Ready    control-plane,master   3d4h   v1.22.4
moc-lorl6k76q01   Ready    <none>                 3d4h   v1.22.4
moc-lorl4323d02   Ready    <none>                   9m   v1.22.4
moc-lorl43bc3c3   Ready    <none>                   2m   v1.22.4

Чтобы watch уменьшение масштаба, нажмите клавиши CTRL+C, чтобы завершить модули pod генератора нагрузки и закрыть связанные с ними окна PowerShell. Примерно через 30 минут вы увидите, что количество модулей pod сойдет на нет. Примерно через 30 минут узлы будут отозваны.

Дополнительные сведения о горизонтальном автомасштабировании pod Kubernetes см. в разделе Горизонтальное автомасштабирование pod.

Правила сходства узлов

С помощью правил сопоставления узлов можно разрешить планировщику Kubernetes запускать модули pod только на определенном наборе узлов в кластере или пуле узлов в зависимости от определенных характеристик узла. Чтобы отобразить функцию средства автомасштабирования горизонтального узла, можно использовать те же правила, чтобы гарантировать, что на каждом узле выполняется только один экземпляр заданного модуля pod.

Предварительные требования:

  • Установлен AKS Arc.
  • Целевой кластер установлен и подключен к Azure.
  • Развернут один пул узлов Linux с по крайней мере одним активным рабочим узлом Linux.
  • Средство горизонтального автомасштабирования узлов включено в целевом кластере и пуле узлов Linux, как описано выше.

Создайте ФАЙЛ YAML со следующим содержимым и сохраните его как node-anti-affinity.yaml в локальной папке.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis-cache
spec:
  selector:
    matchLabels:
      app: store
  replicas: 4
  template:
    metadata:
      labels:
        app: store
    spec:
      nodeSelector:
        kubernetes.io/os: linux
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
              - key: app
                operator: In
                values:
                - store
            topologyKey: "kubernetes.io/hostname"
      containers:
      - name: redis-server
        image: redis:3.2-alpine

Откройте окно PowerShell и загрузите учетные данные для целевого кластера. В этом примере кластер имеет имя mycluster:

Get-AksHciCredential -name mycluster

Теперь примените файл YAML к целевому кластеру:

kubectl apply -f node-anti-affinity.yaml

Через несколько минут можно использовать следующую команду, чтобы проверка, что новые узлы подключены:

kubectl get nodes
NAME              STATUS   ROLES                  AGE    VERSION
moc-laondkmydzp   Ready    control-plane,master   3d4h   v1.22.4
moc-lorl6k76q01   Ready    <none>                 3d4h   v1.22.4
moc-lorl4323d02   Ready    <none>                   9m   v1.22.4
moc-lorl43bc3c3   Ready    <none>                   9m   v1.22.4
moc-lorl44ef56c   Ready    <none>                   9m   v1.22.4

Чтобы удалить узел, удалите развертывание сервера Redis с помощью следующей команды:

kubectl delete -f node-anti-affinity.yaml

Дополнительные сведения о правилах сходства pod Kubernetes см. в статье Назначение объектов pod узлам.

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

Если средство горизонтального автомасштабирования pod включено для целевого кластера, в кластере управления создается новое развертывание Kubernetes с именем <cluster_name>-cluster-autoscaler . Это развертывание отслеживает целевой кластер, чтобы убедиться в наличии достаточного количества рабочих узлов для планирования модулей pod.

Ниже приведены несколько различных способов отладки проблем, связанных с автомасштабированием.

  • Модули pod для автомасштабирования кластера, работающие в кластере управления, собирают полезные сведения о том, как он принимает решения о масштабировании, о количестве узлов, которые необходимо вызвать или удалить, а также о любых общих ошибках, которые могут возникнуть. Средство автомасштабирования сохраняет эти сведения в журналах. Выполните следующую команду, чтобы получить доступ к журналам:

    kubectl --kubeconfig $(Get-AksHciConfig).Kva.kubeconfig logs -l app=<cluster_name>-cluster-autoscaler
    
  • Оператор облака записывает события Kubernetes в кластере управления, что может быть полезно, чтобы понять, когда средство автомасштабирования было включено или отключено для кластера и пула узлов. Их можно просмотреть, выполнив следующую команду:

    kubectl --kubeconfig $(Get-AksHciConfig).Kva.kubeconfig get events
    
  • Развертывание средства автомасштабирования кластера создает в целевом configmap кластере, которым оно управляет. В ней configmap содержатся сведения о состоянии автомасштабирования на уровне кластера и пуле узлов. Выполните следующую команду в целевом кластере, чтобы просмотреть состояние:

    Примечание

    Убедитесь, что вы выполнили kubeconfig команду Get-AksHciCredentials -Name <clustername> , чтобы получить сведения для доступа к целевому кластеру.

    kubectl --kubeconfig ~\.kube\config get configmap cluster-autoscaler-status -o yaml
    
  • Средство автомасштабирования кластера регистрирует события в состоянии configmap автомасштабирования кластера при масштабировании пула узлов кластера. Эти журналы можно просмотреть, выполнив следующую команду в целевом кластере:

    kubectl --kubeconfig ~\.kube\config describe configmap cluster-autoscaler-status
    
  • Средство автомасштабирования кластера создает события для модулей pod в целевом кластере, когда принимает решение о масштабировании, если модуль pod не может быть запланирован. Выполните следующую команду, чтобы просмотреть события в модуле pod:

    kubectl --kubeconfig ~\.kube\config describe pod <pod_name>
    

Справочник по PowerShell

См. следующие справочные страницы для командлетов PowerShell, которые поддерживают автомасштабирование кластера:

Дальнейшие действия