Использование 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, поддерживающих автомасштабирование кластера:
- Get-AksHciAutoScalerProfile
- Get-AksHciCluster для AKS
- Get-AksHciNodePool для AKS
- New-AksHciAutoScalerProfile
- New-AksHciCluster
- New-AksHciNodePool
- Remove-AksHciAutoScalerProfile
- Set-AksHciAutoScalerProfile
- Set-AksHciCluster
- Set-AksHciNodePool