Übung: Aktivieren der Clusterskalierbarkeit in AKS

Abgeschlossen

Aktivieren der Autoskalierung für Cluster in einem AKS-Cluster

  1. Öffnen Sie die Azure Cloud Shell in Ihrem Browser, und wählen Sie Bashaus.

  2. Erstellen Sie mithilfe des Befehls az group create eine Azure-Ressourcengruppe.

    az group create --name myResourceGroup --location eastus
    
  3. Erstellen Sie ein Azure Kubernetes Service-Cluster (AKS) mit aktivierter Autoskalierung für Cluster anhand des Befehls az aks create und dem Flag --enable-cluster-autoscaler.

    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
    

    Die Erstellung des Clusters dauert einige Minuten.

  4. Verbinden Sie sich mit Ihrem Cluster mithilfe des Befehls az aks get-credentials.

    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    
  5. Sehen Sie sich die Knoten in Ihrem Cluster mithilfe des Befehls kubectl get nodes an.

    kubectl get nodes
    

    Ihre Ausgabe sollte in etwa dem folgendem Beispiel entsprechen:

    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
    

Bereitstellen der Beispielanwendung

  1. Erstellen Sie in Cloud Shell eine Manifestdatei für die Kubernetes-Bereitstellung namens deployment.yml mit dem Befehl touch.

    touch deployment.yml
    
  2. Öffnen Sie die Manifestdatei mit dem Befehl code.

    code deployment.yml
    
  3. Fügen Sie den folgenden Code in die Manifestdatei ein.

    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. Speichern Sie die Datei, und schließen Sie den Editor.

Aktualisieren des Profils der Autoskalierung für Cluster

Sie können die Profile der Autoskalierung durch Festlegen mehrerer Flags in der Konfiguration optimieren. Zeigen Sie die Liste der verfügbaren Flags in Verwenden des Profils der Autoskalierung für Cluster an. In diesem Beispiel aktualisieren Sie die Autoskalierung, um die Abrufzeit zu reduzieren und nach ausstehenden Pods zu suchen. Außerdem verkürzen Sie die Wartezeit, bis eine Herunterskalierung von einem vorherigen Zustand erfolgt.

  1. Aktualisieren Sie das Profil der Autoskalierung für Cluster mithilfe des Befehls az aks update mit dem Flag --cluster-autoscaler-profile.

    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. Skalieren Sie die Bereitstellung mithilfe des Befehls kubectl scale deployment herunter.

    kubectl scale deployment contoso-website --replicas 5
    
  3. Überprüfen Sie die Protokolle und Abfragen der Autoskalierung für Cluster für die ConfigMap der Autoskalierung für Cluster mithilfe des Befehls kubectl describe cm.

    kubectl describe cm cluster-autoscaler-status -n kube-system
    

    Vor dem Herunterskalieren sollte Ihre Ausgabe in etwa wie im folgenden Beispiel aussehen:

    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. Warten Sie etwa fünf Minuten, bis die Autoskalierung das Herunterskalieren abgeschlossen hat, und führen Sie dann die vorherige kubectl describe cm erneut aus.

    Nach dem Herunterskalieren sollte Ihre Ausgabe in etwa wie im folgenden Beispiel aussehen:

    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. Sehen Sie sich die Knoten in Ihrem Cluster mithilfe des Befehls kubectl get nodes an.

    kubectl get nodes
    

    Ihre Ausgabe sollte in etwa wie im folgenden Beispiel aussehen, und die Anzahl der Knoten sollte auf einen reduziert sein:

    NAME                                STATUS   ROLES   AGE   VERSION
    aks-nodepool1-12345678-vmss000000   Ready    agent   37m    v1.26.6