Esercizio - Abilitare la scalabilità del cluster nel servizio Azure Kubernetes
Abilitare il ridimensionamento automatico del cluster in un cluster del servizio Azure Kubernetes
Aprire Azure Cloud Shell nel browser e selezionare Bash.
Creare un gruppo di risorse di Azure usando il
az group create
comando .az group create --name myResourceGroup --location eastus
Creare un nuovo cluster del servizio Azure Kubernetes con il ridimensionamento automatico del cluster abilitato usando il
az aks create
comando e il--enable-cluster-autoscaler
flag .az aks create --resource-group myResourceGroup --name myAKSCluster --enable-addons monitoring --enable-msi-auth-for-monitoring --enable-cluster-autoscaler --min-count 1 --max-count 10 --generate-ssh-keys
La creazione del cluster richiede alcuni minuti.
Connessione al cluster usando il
az aks get-credentials
comando .az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
Visualizzare i nodi nel cluster usando il
kubectl get nodes
comando .kubectl get nodes
L'output dovrebbe essere simile all'output di esempio seguente:
NAME STATUS ROLES AGE VERSION aks-nodepool1-12345678-vmss000000 Ready agent 1m v1.26.6 aks-nodepool1-12345678-vmss000001 Ready agent 1m v1.26.6 aks-nodepool1-12345678-vmss000002 Ready agent 1m v1.26.6
Distribuire l'applicazione di esempio
In Cloud Shell creare un file manifesto per la distribuzione kubernetes denominata deployment.yml usando il
touch
comando .touch deployment.yml
Aprire il file manifesto usando il
code
comando .code deployment.yml
Incollare il codice seguente nel file manifesto.
apiVersion: apps/v1 kind: Deployment metadata: name: contoso-website spec: replicas: 35 selector: matchLabels: app: contoso-website template: metadata: labels: app: contoso-website spec: containers: - image: mcr.microsoft.com/mslearn/samples/contoso-website name: contoso-website resources: requests: cpu: 100m memory: 128Mi limits: cpu: 250m memory: 256Mi ports: - containerPort: 80 name: http
Salvare il file e chiudere l'editor.
Aggiornare il profilo di scalabilità automatica del cluster
È possibile ottimizzare i profili di scalabilità automatica impostando una serie di flag nella configurazione. Visualizzare l'elenco dei flag disponibili in Usare il profilo di scalabilità automatica del cluster. Per questo esempio, si aggiorna il ridimensionamento automatico per ridurre il tempo di polling per verificare la presenza di pod in sospeso e ridurre il tempo necessario per attendere prima di ridurre il numero di istanze rispetto a uno stato precedente.
Aggiornare il profilo di scalabilità automatica del cluster usando il
az aks update
comando con il--cluster-autoscaler-profile
flag .az aks update --resource-group myResourceGroup --name myAKSCluster --cluster-autoscaler-profile scan-interval=5s scale-down-unready-time=5m scale-down-delay-after-add=5m
Ridurre la distribuzione usando il
kubectl scale deployment
comando .kubectl scale deployment contoso-website --replicas 5
Controllare i log e la query del ridimensionamento automatico del cluster per la mappa di configurazione cluster-autoscaler-status usando il
kubectl describe cm
comando .kubectl describe cm cluster-autoscaler-status -n kube-system
Prima della riduzione, l'output dovrebbe essere simile all'output di esempio seguente:
Cluster-autoscaler status at 2023-11-09 20:08:14.892961701 +0000 UTC: Cluster-wide: Health: Healthy (ready=3 unready=0 notStarted=0 longNotStarted=0 registered=3 longUnregistered=0) LastProbeTime: 2023-11-09 19:56:57.890988498 +0000 UTC m=+1673.465985892 LastTransitionTime: 2023-11-09 19:45:09.593593337 +0000 UTC m=+774.168590731 ScaleUp: NoActivity (ready=3 registered=3) LastProbeTime: 2023-11-09 19:56:57.890988498 +0000 UTC m=+1673.465985892 LastTransitionTime: 2023-11-09 19:45:09.593593337 +0000 UTC m=+774.168590731 ScaleDown: CandidatesPresent (candidates=3) LastProbeTime: 2023-11-09 19:56:57.890988498 +0000 UTC m=+1673.465985892 LastTransitionTime: 2023-11-09 19:56:52.440038763 +0000 UTC m=+1101.015036157
Attendere circa cinque minuti prima che il ridimensionamento automatico completi la riduzione delle prestazioni e quindi eseguire di nuovo l'oggetto precedente
kubectl describe cm
.Dopo la riduzione, l'output dovrebbe essere simile all'output di esempio seguente:
Cluster-autoscaler status at 2023-11-09 20:14:39.123206413 +0000 UTC: Cluster-wide: Health: Healthy (ready=1 unready=0 (resourceUnready=0) notStarted=0 longNotStarted=0 registered=1 longUnregistered=0) LastProbeTime: 2023-11-09 20:14:39.113206413 +0000 UTC m=+2150.697175601 LastTransitionTime: 2023-11-09 19:45:09.593593337 +0000 UTC m=+774.168590731 ScaleUp: NoActivity (ready=1 registered=1) LastProbeTime: 2023-11-09 20:14:39.113206413 +0000 UTC m=+2150.697175601 LastTransitionTime: 2023-11-09 19:45:09.593593337 +0000 UTC m=+774.168590731 ScaleDown: NoCandidates (candidates=0) LastProbeTime: 2023-11-09 20:14:39.113206413 +0000 UTC m=+2150.697175601 LastTransitionTime: 2023-11-09 20:07:08.79828656 +0000 UTC m=+1718.924760896
Visualizzare i nodi nel cluster usando il
kubectl get nodes
comando .kubectl get nodes
L'output dovrebbe essere simile all'output di esempio seguente, con il numero di nodi ridotto a uno:
NAME STATUS ROLES AGE VERSION aks-nodepool1-12345678-vmss000000 Ready agent 37m v1.26.6