Использование 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, которые поддерживают автомасштабирование кластера:
- Get-AksHciAutoScalerProfile
- Get-AksHciCluster для AKS
- Get-AksHciNodePool для AKS
- New-AksHciAutoScalerProfile
- New-AksHciCluster
- New-AksHciNodePool
- Remove-AksHciAutoScalerProfile
- Set-AksHciAutoScalerProfile
- Set-AksHciCluster
- Set-AksHciNodePool
Дальнейшие действия
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по