Поделиться через


Использование 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

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

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

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

  • Автомасштабирование горизонтального 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

Чтобы просмотреть горизонтальное масштабирование, нажмите клавиши 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 для целевого кластера в <cluster_name>-cluster-autoscaler кластере управления создается новое развертывание Kubernetes. Это развертывание отслеживает целевой кластер, чтобы обеспечить достаточно рабочих узлов для планирования модулей 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 содержит сведения о уровне кластера состояния автомасштабирования и пуле узлов. Выполните следующую команду в целевом кластере, чтобы просмотреть состояние:

    Примечание.

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

    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, поддерживающих автомасштабирование кластера:

Следующие шаги