Uso de PowerShell para el escalado automático de clústeres en AKS habilitado por Azure Arc
Se aplica a: AKS en Azure Stack HCI 22H2, AKS en Windows Server
Puede usar PowerShell para habilitar el escalador automático y administrar el escalado automático de grupos de nodos en los clústeres de destino en AKS habilitados por Arc. También puede usar PowerShell para configurar y administrar el escalado automático del clúster.
Creación de un nuevo objeto AksHciAutoScalerConfig
Para crear un nuevo objeto AksHciAutoScalerConfig para pasarlo al New-AksHciCluster
comando o Set-AksHciCluster
, use este comando:
New-AksHciAutoScalerProfile -Name asp1 -AutoScalerProfileConfig @{ "min-node-count"=2; "max-node-count"=7; 'scale-down-unneeded-time'='1m'}
Puede proporcionar el objeto autoscalerconfig al crear el clúster. El objeto contiene los parámetros del escalador automático. Para obtener información sobre parámetros, consulte Uso de los perfiles de escalador automático.
Cambio de un objeto de perfil AksHciAutoScalerConfig existente
Al actualizar un objeto de perfil de AksHciAutoScalerConfig existente, los clústeres que usan ese objeto se actualizan para usar los nuevos parámetros:
Set-AksHciAutoScalerProfile -name myProfile -autoScalerProfileConfig @{ "max-node-count"=5; "min-node-count"=2 }
Puede actualizar el objeto autoscalerconfig , que contiene los parámetros del escalador automático. Para obtener información sobre parámetros, consulte Uso de los perfiles de escalador automático.
Habilitación del escalado automático para nuevos clústeres
Para habilitar el escalado automático automáticamente en todos los grupos de nodos recién creados, use los parámetros siguientes con el New-AksHciCluster
comando :
New-AksHciCluster -name mycluster -enableAutoScaler -autoScalerProfileName myAutoScalerProfile
Habilitación del escalado automático en un clúster existente
Para habilitar el escalado automático automáticamente en cada grupo de nodos recién creado en un clúster existente, use el enableAutoScaler
parámetro con el Set-AksHciCluster
comando :
Set-AksHciCluster -Name <string> [-enableAutoScaler <boolean>] [-autoScalerProfileName <String>]
Habilitación del escalado automático en un grupo de nodos existente
Para habilitar el escalado automático en un grupo de nodos existente, use el autoScaler
parámetro con el Set-AksHciNodePool
comando :
Set-AksHciNodePool -clusterName <Your-Cluster-Name> -name <Your-NodePool-Name> -autoScaler $true
Deshabilitación del escalado automático
Para deshabilitar el escalado automático en todos los grupos de nodos existentes y recién creados en un clúster existente, establezca en enableAutoScaler
false mediante el Set-AksHciCluster
comando :
Set-AksHciCluster -Name <string> -enableAutoScaler $false
Uso eficaz del escalador horizontal automático
Ahora que el clúster y el grupo de nodos están configurados para escalar automáticamente, puede configurar una carga de trabajo para que también se escale de una manera que use las funcionalidades del escalador automático horizontal.
Hay dos métodos disponibles para el escalado de cargas de trabajo:
- Escalador automático horizontal de pods de Kubernetes: en función de las características de carga, el escalador automático horizontal de pods (también conocido como escalador automático horizontal) escala los pods de una implementación de aplicación a los nodos disponibles en el clúster de Kubernetes. Si no hay más nodos disponibles para su programación, el escalador automático horizontal crea una instancia de un nuevo nodo al que programar los pods. Si la carga de la aplicación deja de funcionar, los nodos se vuelven a reducir horizontalmente.
- Reglas de antiafinidad de nodo de Kubernetes: las reglas de afinidad para una implementación de Kubernetes pueden especificar que un conjunto de pods no se puede escalar en el mismo nodo y se requiere un nodo diferente para escalar la carga de trabajo. En combinación con las características de carga o el número de pods de destino para las instancias de aplicación, el escalador automático horizontal crea instancias de nuevos nodos en el grupo de nodos para satisfacer las solicitudes. Si la demanda de aplicaciones disminuye, el escalador automático horizontal vuelve a reducir verticalmente el grupo de nodos.
Esta sección contiene algunos ejemplos.
Escalador automático horizontal de pods
Requisitos previos:
- AKS habilitado por Arc está instalado.
- El clúster de destino está instalado y conectado a Azure.
- Se implementa un grupo de nodos de Linux, con al menos un nodo de trabajo activo de Linux.
- El escalador automático de nodos horizontales está habilitado en el clúster de destino y en el grupo de nodos de Linux, como se ha descrito anteriormente.
Usamos el ejemplo tutorial del escalador automático horizontal de pods de Kubernetes para mostrar cómo funciona Horizontal Pod Autoscaler.
Para que el escalador automático horizontal de pods funcione, debe implementar el componente Metrics Server en el clúster de destino.
Para implementar el servidor de métricas en un clúster de destino denominado mycluster
, ejecute los siguientes comandos:
Get-AksHciCredential -name mycluster
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
Una vez implementado el servidor de métricas de Kubernetes, puede implementar una aplicación en el grupo de nodos, que se usa para escalar. Usamos una aplicación de prueba desde el sitio web de la comunidad de Kubernetes para este ejemplo:
kubectl apply -f https://k8s.io/examples/application/php-apache.yaml
deployment.apps/php-apache created
service/php-apache created
Este comando crea una implementación de una aplicación PHP basada en servidor web apache que devolverá un mensaje "Correcto" a un cliente que realiza la llamada.
A continuación, configure Horizontal Pod Autoscaler para programar un nuevo pod cuando el uso de CPU del pod actual alcance el 50 % y escale de 1 a 50 pods:
kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
horizontalpodautoscaler.autoscaling/php-apache autoscaled
Para comprobar el estado actual del escalador automático de pod horizontal recién creado, ejecute el siguiente comando:
kubectl get hpa
NAME REFERENCE TARGET MINPODS MAXPODS REPLICAS AGE
php-apache Deployment/php-apache/scale 0% / 50% 1 10 1 18s
Por último, aumente la carga en el servidor web para verlo escalar horizontalmente. Abra una nueva ventana de PowerShell y ejecute el siguiente comando:
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"
Si vuelve a la ventana anterior de PowerShell y ejecuta el siguiente comando, debería ver que el número de pods cambia en un breve período:
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
En este ejemplo, el número de pods cambia de 1 a 7, como se muestra aquí:
NAME REFERENCE TARGET MINPODS MAXPODS REPLICAS AGE
php-apache Deployment/php-apache/scale 305% / 50% 1 10 7 3m
Si esto no es suficiente para desencadenar el escalador automático de nodos porque todos los pods caben en un nodo, abra más ventanas de PowerShell y ejecute más comandos de generador de carga. Asegúrese de cambiar el nombre del pod que va a crear cada vez que ejecute el comando. Por ejemplo, use load-generator-2
en lugar de load-generator
, como se muestra en el comando siguiente.
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"
A continuación, compruebe el número de nodos creados con el siguiente comando:
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
Para ver una reducción vertical, presione CTRL-C para finalizar los pods del generador de carga y cierre las ventanas de PowerShell asociadas a ellos. Después de unos 30 minutos, debería ver que el número de pods deja de funcionar. Aproximadamente 30 minutos después, los nodos se desaprovisionan.
Para obtener más información sobre el escalador automático horizontal de pods de Kubernetes, consulte Escalado automático horizontal de pods.
Reglas de afinidad de nodos
Puede usar reglas de afinidad de nodo para permitir que el programador de Kubernetes ejecute pods solo en un conjunto específico de nodos de un clúster o grupo de nodos en función de determinadas características del nodo. Para mostrar la función del escalador automático de nodos horizontales, puede usar las mismas reglas para asegurarse de que solo se ejecuta una instancia de un pod determinado en cada nodo.
Requisitos previos:
- AKS Arc está instalado.
- El clúster de destino está instalado y conectado a Azure.
- Se implementa un grupo de nodos de Linux, con al menos un nodo de trabajo de Linux activo.
- Horizontal Node Autoscaler está habilitado en el clúster de destino y el grupo de nodos de Linux, como se ha descrito anteriormente.
Cree un archivo YAML con el siguiente contenido y guárdelo como node-anti-affinity.yaml en una carpeta local.
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
Abra una ventana de PowerShell y cargue las credenciales del clúster de destino. En este ejemplo, el clúster se denomina mycluster
:
Get-AksHciCredential -name mycluster
Ahora, aplique el archivo YAML al clúster de destino:
kubectl apply -f node-anti-affinity.yaml
Después de unos minutos, puede usar el siguiente comando para comprobar que los nuevos nodos se han conectado:
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
Para quitar el nodo, elimine la implementación del servidor redis con este comando:
kubectl delete -f node-anti-affinity.yaml
Para más información sobre las reglas de afinidad de pod de Kubernetes, consulte Asignación de pods a nodos.
Solución de problemas del escalador automático horizontal
Cuando el escalador automático horizontal de pods está habilitado para un clúster de destino, se crea una nueva implementación de Kubernetes denominada <cluster_name>-cluster-autoscaler
en el clúster de administración. Esta implementación supervisa el clúster de destino para asegurarse de que hay suficientes nodos de trabajo para programar pods.
Estas son algunas maneras diferentes de depurar problemas relacionados con el escalador automático:
Los pods de escalado automático de clúster que se ejecutan en el clúster de administración recopilan información útil sobre cómo toma decisiones de escalado, el número de nodos que necesita para mostrar o quitar y los errores generales que puede experimentar. El escalador automático guarda esta información en los registros. Ejecute el siguiente comando para acceder a los registros:
kubectl --kubeconfig $(Get-AksHciConfig).Kva.kubeconfig logs -l app=<cluster_name>-cluster-autoscaler
Los registros de operadores en la nube registran eventos de Kubernetes en el clúster de administración, lo que puede resultar útil comprender cuándo el escalador automático se ha habilitado o deshabilitado para un clúster y un grupo de nodos. Para verlos, ejecute el siguiente comando:
kubectl --kubeconfig $(Get-AksHciConfig).Kva.kubeconfig get events
La implementación de la escalabilidad automática del clúster crea un
configmap
en el clúster de destino que administra. Estoconfigmap
contiene información sobre el nivel de clúster de estado del escalador automático y por grupo de nodos. Ejecute el siguiente comando en el clúster de destino para ver el estado:Nota:
Asegúrese de que se ha ejecutado
Get-AksHciCredentials -Name <clustername>
para recuperar la información dekubeconfig
para acceder al clúster de destino en cuestión.kubectl --kubeconfig ~\.kube\config get configmap cluster-autoscaler-status -o yaml
El escalador automático del clúster registra eventos en el estado
configmap
del escalador automático del clúster cuando escala el grupo de nodos de un clúster. Para ver estos registros, ejecute este comando en el clúster de destino:kubectl --kubeconfig ~\.kube\config describe configmap cluster-autoscaler-status
El escalador automático del clúster emite eventos en pods del clúster de destino cuando toma una decisión de escalado si el pod no se puede programar. Ejecute este comando para ver los eventos en un pod:
kubectl --kubeconfig ~\.kube\config describe pod <pod_name>
Referencia de PowerShell
Consulte las siguientes páginas de referencia para los cmdlets de PowerShell que admiten el escalado automático del clúster:
- Get-AksHciAutoScalerProfile
- Get-AksHciCluster for AKS
- Get-AksHciNodePool for AKS
- New-AksHciAutoScalerProfile
- New-AksHciCluster
- New-AksHciNodePool
- Remove-AksHciAutoScalerProfile
- Set-AksHciAutoScalerProfile
- Set-AksHciCluster
- Set-AksHciNodePool