Esercizio - Abilitare la scalabilità del cluster nel servizio Azure Kubernetes

Completato

Abilitare il ridimensionamento automatico del cluster in un cluster del servizio Azure Kubernetes

  1. Aprire Azure Cloud Shell nel browser e selezionare Bash.

  2. Creare un gruppo di risorse di Azure usando il az group create comando .

    az group create --name myResourceGroup --location eastus
    
  3. 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.

  4. Connessione al cluster usando il az aks get-credentials comando .

    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    
  5. 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

  1. In Cloud Shell creare un file manifesto per la distribuzione kubernetes denominata deployment.yml usando il touch comando .

    touch deployment.yml
    
  2. Aprire il file manifesto usando il code comando .

    code deployment.yml
    
  3. 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
    
  4. 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.

  1. 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
    
  2. Ridurre la distribuzione usando il kubectl scale deployment comando .

    kubectl scale deployment contoso-website --replicas 5
    
  3. 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
    
  4. 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
    
  5. 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