Utiliser PowerShell pour la mise à l’échelle automatique du cluster dans AKS activé par Azure Arc
S’applique à : AKS sur Azure Stack HCI 22H2, AKS sur Windows Server
Vous pouvez utiliser PowerShell pour activer la mise à l’échelle automatique et gérer la mise à l’échelle automatique des pools de nœuds dans vos clusters cibles dans AKS activé par Arc. Vous pouvez également utiliser PowerShell pour configurer et gérer la mise à l’échelle automatique du cluster.
Créer un objet AksHciAutoScalerConfig
Pour créer un objet AksHciAutoScalerConfig à transmettre à la ou Set-AksHciCluster
la New-AksHciCluster
commande, utilisez cette commande :
New-AksHciAutoScalerProfile -Name asp1 -AutoScalerProfileConfig @{ "min-node-count"=2; "max-node-count"=7; 'scale-down-unneeded-time'='1m'}
Vous pouvez fournir l’objet autoscalerconfig lors de la création de votre cluster. L’objet contient les paramètres de votre autoscaler. Pour plus d’informations sur les paramètres, consultez Comment utiliser les profils de mise à l’échelle automatique.
Modifier un objet de profil AksHciAutoScalerConfig existant
Lorsque vous mettez à jour un objet de profil AksHciAutoScalerConfig existant, les clusters utilisant cet objet sont mis à jour pour utiliser les nouveaux paramètres :
Set-AksHciAutoScalerProfile -name myProfile -autoScalerProfileConfig @{ "max-node-count"=5; "min-node-count"=2 }
Vous pouvez mettre à jour l’objet de mise à l’échelle automatique, qui contient les paramètres de votre autoscaler. Pour plus d’informations sur les paramètres, consultez Comment utiliser les profils de mise à l’échelle automatique.
Activer la mise à l’échelle automatique pour les nouveaux clusters
Pour activer la mise à l’échelle automatique automatiquement sur tous les pools de nœuds nouvellement créés, utilisez les paramètres suivants avec la New-AksHciCluster
commande :
New-AksHciCluster -name mycluster -enableAutoScaler -autoScalerProfileName myAutoScalerProfile
Activer la mise à l’échelle automatique sur un cluster existant
Pour activer la mise à l’échelle automatique automatiquement sur chaque pool de nœuds nouvellement créé sur un cluster existant, utilisez le paramètre avec la enableAutoScaler
Set-AksHciCluster
commande :
Set-AksHciCluster -Name <string> [-enableAutoScaler <boolean>] [-autoScalerProfileName <String>]
Activer la mise à l’échelle automatique sur un pool de nœuds existant
Pour activer la mise à l’échelle automatique sur un pool de nœuds existant, utilisez le autoScaler
paramètre avec la Set-AksHciNodePool
commande :
Set-AksHciNodePool -clusterName <Your-Cluster-Name> -name <Your-NodePool-Name> -autoScaler $true
Désactiver la mise à l’échelle automatique
Pour désactiver la mise à l’échelle automatique sur tous les pools de nœuds existants et nouvellement créés sur un cluster existant, définissez la enableAutoScaler
valeur false à l’aide de la Set-AksHciCluster
commande :
Set-AksHciCluster -Name <string> -enableAutoScaler $false
Utilisation efficace de la mise à l’échelle automatique horizontale
Maintenant que le cluster et le pool de nœuds sont configurés pour être mis à l’échelle automatiquement, vous pouvez configurer une charge de travail pour qu’elle soit également mise à l’échelle de manière à utiliser les fonctionnalités de mise à l’échelle automatique horizontale.
Deux méthodes sont disponibles pour la mise à l’échelle de la charge de travail :
- Mise à l’échelle automatique des pods horizontaux Kubernetes : en fonction des caractéristiques de charge, l’autoscaler de pod horizontal (également appelé autoscaler horizontal) met à l’échelle les pods d’un déploiement d’application vers les nœuds disponibles dans le cluster Kubernetes. Si aucun autre nœud n’est disponible pour être planifié, l’autoscaler horizontal instancie un nouveau nœud auquel planifier les pods. Si la charge de l’application tombe en panne, les nœuds sont redimensionné.
- Règles d’anti-affinité des nœuds Kubernetes : les règles d’anti-affinité pour un déploiement Kubernetes peuvent spécifier qu’un ensemble de pods ne peut pas être mis à l’échelle sur le même nœud et qu’un autre nœud est nécessaire pour mettre à l’échelle la charge de travail. En combinaison avec les caractéristiques de charge ou le nombre de pods cibles pour les instances d’application, le mise à l’échelle automatique horizontale instancie de nouveaux nœuds dans le pool de nœuds pour répondre aux demandes. Si la demande d’application diminue, l’autoscaler horizontal effectue une nouvelle mise à l’échelle vers le bas du pool de nœuds.
Cette section contient quelques exemples.
Autoscaler de pods horizontaux
Configuration requise :
- AKS activé par Arc est installé.
- Le cluster cible est installé et connecté à Azure.
- Un pool de nœuds Linux est déployé, avec au moins un nœud Worker Linux actif.
- L’autoscaler de nœud horizontal est activé sur le cluster cible et le pool de nœuds Linux, comme décrit précédemment.
Nous utilisons l’exemple de procédure pas à pas de la mise à l’échelle automatique des pods horizontaux Kubernetes pour montrer comment fonctionne l’autoscaler de pod horizontal.
Pour que l’autoscaler de pod horizontal fonctionne, vous devez déployer le composant Metrics Server dans votre cluster cible.
Pour déployer le serveur de métriques sur un cluster cible appelé mycluster
, exécutez les commandes suivantes :
Get-AksHciCredential -name mycluster
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
Une fois le serveur de métriques Kubernetes déployé, vous pouvez déployer une application sur le pool de nœuds, que vous utilisez pour effectuer une mise à l’échelle. Nous utilisons une application de test à partir du site web de la communauté Kubernetes pour cet exemple :
kubectl apply -f https://k8s.io/examples/application/php-apache.yaml
deployment.apps/php-apache created
service/php-apache created
Cette commande crée un déploiement d’une application PHP basée sur un serveur web Apache qui renvoie un message « OK » à un client appelant.
Ensuite, configurez l’autoscaler de pod horizontal pour planifier un nouveau pod lorsque l’utilisation du processeur du pod actuel atteint 50 pour cent et passez de 1 à 50 pods :
kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
horizontalpodautoscaler.autoscaling/php-apache autoscaled
Vous pouvez vérifier l’état actuel de l’autoscaler de pod horizontal nouvellement créé en exécutant la commande suivante :
kubectl get hpa
NAME REFERENCE TARGET MINPODS MAXPODS REPLICAS AGE
php-apache Deployment/php-apache/scale 0% / 50% 1 10 1 18s
Enfin, augmentez la charge sur le serveur web pour la voir monter en puissance. Ouvrez une nouvelle fenêtre PowerShell et exécutez la commande suivante :
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 vous revenez à la fenêtre PowerShell précédente et exécutez la commande suivante, vous devez voir le nombre de pods changer dans une courte période :
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
Dans cet exemple, le nombre de pods passe de 1 à 7, comme illustré ici :
NAME REFERENCE TARGET MINPODS MAXPODS REPLICAS AGE
php-apache Deployment/php-apache/scale 305% / 50% 1 10 7 3m
Si cela n’est pas suffisant pour déclencher la mise à l’échelle automatique du nœud, car tous les pods s’adaptent à un nœud, ouvrez plus de fenêtres PowerShell et exécutez plus de commandes de générateur de charge. Veillez à modifier le nom du pod que vous créez chaque fois que vous exécutez la commande. Par exemple, utilisez load-generator-2
plutôt load-generator
que , comme indiqué dans la commande suivante.
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"
Vérifiez ensuite le nombre de nœuds instanciés avec la commande suivante :
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
Pour regarder un scale-down, appuyez sur Ctrl-C pour mettre fin aux pods du générateur de charge et fermer les fenêtres PowerShell associées à ces pods. Après environ 30 minutes, vous devriez voir le nombre de pods descendre. Environ 30 minutes plus tard, les nœuds sont déprovisionnés.
Pour plus d’informations sur la mise à l’échelle automatique des pods horizontaux Kubernetes, consultez la mise à l’échelle automatique des pods horizontaux.
Règles d’affinité des nœuds
Vous pouvez utiliser des règles d’affinité de nœud pour permettre au planificateur Kubernetes d’exécuter des pods uniquement sur un ensemble spécifique de nœuds dans un cluster ou un pool de nœuds en fonction de certaines caractéristiques du nœud. Pour afficher la fonction de mise à l’échelle automatique de nœud horizontal, vous pouvez utiliser les mêmes règles pour vous assurer qu’une seule instance d’un pod donné s’exécute sur chaque nœud.
Configuration requise :
- AKS Arc est installé.
- Le cluster cible est installé et connecté à Azure.
- Un pool de nœuds Linux est déployé, avec au moins un nœud Worker Linux actif.
- La mise à l’échelle automatique de nœud horizontal est activée sur le cluster cible et le pool de nœuds Linux, comme décrit précédemment.
Créez un fichier YAML avec le contenu suivant, puis enregistrez-le en tant que node-anti-affinity.yaml dans un dossier 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
Ouvrez une fenêtre PowerShell et chargez les informations d’identification de votre cluster cible. Dans cet exemple, le cluster est nommé mycluster
:
Get-AksHciCredential -name mycluster
À présent, appliquez le fichier YAML au cluster cible :
kubectl apply -f node-anti-affinity.yaml
Après quelques minutes, vous pouvez utiliser la commande suivante pour vérifier que les nouveaux nœuds sont en ligne :
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
Pour supprimer le nœud, supprimez le déploiement du serveur redis avec cette commande :
kubectl delete -f node-anti-affinity.yaml
Pour plus d’informations sur les règles d’affinité des pods Kubernetes, consultez Affectation de pods à des nœuds.
Résoudre les problèmes d’autoscaler horizontal
Lorsque l’autoscaler de pod horizontal est activé pour un cluster cible, un nouveau déploiement Kubernetes appelé <cluster_name>-cluster-autoscaler
est créé dans le cluster de gestion. Ce déploiement surveille le cluster cible pour s’assurer qu’il y a suffisamment de nœuds Worker pour planifier des pods.
Voici différentes façons de déboguer les problèmes liés à la mise à l’échelle automatique :
Les pods de mise à l’échelle automatique de cluster s’exécutant sur le cluster de gestion collectent des informations utiles sur la façon dont il prend des décisions de mise à l’échelle, le nombre de nœuds dont il a besoin pour afficher ou supprimer, et toutes les erreurs générales qu’il peut rencontrer. Le générateur de mise à l’échelle automatique enregistre ces informations dans les journaux. Exécutez la commande suivante pour accéder aux journaux :
kubectl --kubeconfig $(Get-AksHciConfig).Kva.kubeconfig logs -l app=<cluster_name>-cluster-autoscaler
Les journaux des opérateurs cloud enregistrent les événements Kubernetes dans le cluster de gestion, ce qui peut être utile pour comprendre quand le générateur de mise à l’échelle automatique a été activé ou désactivé pour un cluster et un pool de nœuds. Celles-ci peuvent être consultées en exécutant la commande suivante :
kubectl --kubeconfig $(Get-AksHciConfig).Kva.kubeconfig get events
Le déploiement de l’autoscaler de cluster crée un
configmap
dans le cluster cible qu’il gère. Celaconfigmap
contient des informations sur le niveau de cluster d’état de l’autoscaler et sur chaque pool de nœuds. Exécutez la commande suivante sur le cluster cible pour afficher l’état :Remarque
Vérifiez que vous avez exécuté
Get-AksHciCredentials -Name <clustername>
pour récupérer les informationskubeconfig
permettant d’accéder au cluster cible en question.kubectl --kubeconfig ~\.kube\config get configmap cluster-autoscaler-status -o yaml
Le générateur de mise à l’échelle automatique du cluster journalise les événements sur l’état
configmap
de mise à l’échelle automatique du cluster lorsqu’il met à l’échelle le pool de nœuds d’un cluster. Vous pouvez afficher ces journaux en exécutant cette commande sur le cluster cible :kubectl --kubeconfig ~\.kube\config describe configmap cluster-autoscaler-status
Le programme d’autoscaler du cluster émet des événements sur les pods du cluster cible lorsqu’il prend une décision de mise à l’échelle si le pod ne peut pas être planifié. Exécutez cette commande pour afficher les événements sur un pod :
kubectl --kubeconfig ~\.kube\config describe pod <pod_name>
Informations de référence sur PowerShell
Consultez les pages de référence suivantes pour les applets de commande PowerShell qui prennent en charge la mise à l’échelle automatique du cluster :
- Get-AksHciAutoScalerProfile
- Get-AksHciCluster pour AKS
- Get-AksHciNodePool pour AKS
- New-AksHciAutoScalerProfile
- New-AksHciCluster
- New-AksHciNodePool
- Remove-AksHciAutoScalerProfile
- Set-AksHciAutoScalerProfile
- Set-AksHciCluster
- Set-AksHciNodePool