Esercizio - Distribuire un oggetto scale nel cluster del servizio Azure Kubernetes

Completato

In questo esercizio, si distribuirà una definizione di risorsa personalizzata (CRD) dell'oggetto scale nel cluster del servizio Azure Kubernetes. L'oggetto scale contiene il trigger che connette l'applicazione distribuita a KEDA. Dopo la distribuzione nel servizio Azure Kubernetes, KEDA monitora l'elenco Redis e aumenta le prestazioni, se la lunghezza dell'elenco supera la soglia definita o le riduce, se la lunghezza dell'elenco scende al di sotto della soglia definita.

ScaledObject panoramica del manifesto

  • scaleTargetRef: Questa sezione descrive il carico di lavoro osservato da KEDA.

      scaleTargetRef:
        apiVersion: apps/v1                           # Optional. Default: apps/v1
        kind: deployment                              # Optional. Default: Deployment
        name: contoso-microservice                    # Mandatory. Must be in the same namespace as the ScaledObject
        envSourceContainerName: contoso-microservice  # Optional. Default: .spec.template.spec.containers[0]
    
  • minReplicaCount e maxReplicaCount: Questi attributi determinano l'intervallo di repliche usate da KEDA per il ridimensionamento. In questo caso, si indica a KEDA di ridimensionare da un minimo di zero a un massimo di 20.

      minReplicaCount: 0            # Optional. Default: 0
      maxReplicaCount: 20           # Optional. Default: 100
    

    Nota

    minReplicaCount: 0 porta il numero di repliche predefinito della distribuzione da uno a zero. Ciò si verifica se il servizio è inattivo e non elabora eventi. In questo caso, se sono presenti elementi nell'elenco Redis e il servizio rimane inattivo, KEDA si ridimensiona a zero.

  • advanced: Questa sezione è correlata alle personalizzazioni avanzate di KEDA. restoreToOriginalReplicaCount indica a KEDA di restituire il conteggio delle repliche al valore originale dopo gli eventi di aumento delle prestazioni. In questo caso, lo si imposta su false, che causa una riduzione del minReplicaCount valore pari a zero.

      restoreToOriginalReplicaCount: false        # Optional. Default: false
      horizontalPodAutoscalerConfig:              # Optional. Section to specify HPA related options
        behavior:                                 # Optional. Use to modify HPA's scaling behavior
          scaleDown:
            stabilizationWindowSeconds: 300
            policies:
            - type: Percent
              value: 100
              periodSeconds: 15
    
  • triggers: Questa sezione usa scalers per rilevare se l'oggetto deve essere attivato o disattivato e per fornire metriche personalizzate per origini evento specifiche. La metrica listLength specifica a KEDA di aumentare le prestazioni quando sono presenti dieci elementi nell'elenco.

      triggers:
      - type: redis
        metadata:
          # address:                  # Format must be host:port
          passwordFromEnv: REDIS_KEY
          listName: keda              # Required
          listLength: "10"            # Required
          enableTLS: "false"          # optional
          databaseIndex: "0"          # optional
          hostFromEnv: REDIS_HOST
          portFromEnv: REDIS_PORT
    

Per altre informazioni, vedere Utilità di scalabilità automatica KEDA.

Creare il manifesto ScaledObject

  1. In Cloud Shell creare un file manifesto per la distribuzione Kubernetes con nome scaled-object.yaml usando il comando touch:

    touch scaled-object.yaml
    
  2. Aprire l'editor integrato in Cloud Shell immettendo code .

  3. Aprire il file scaled-object.yaml e aggiungere la sezione di codice YAML seguente:

    apiVersion: keda.sh/v1alpha1
    kind: ScaledObject
    metadata:
      name: scaled-contoso
    spec:
      scaleTargetRef:
        apiVersion: apps/v1                             # Optional. Default: apps/v1
        kind: deployment                                # Optional. Default: Deployment
        name: contoso-microservice                      # Mandatory. Must be in the same namespace as the ScaledObject
        envSourceContainerName: contoso-microservice    # Optional. Default: .spec.template.spec.containers[0]
      pollingInterval: 30                               # Optional. Default: 30 seconds
      cooldownPeriod:  120                              # Optional. Default: 300 seconds
      minReplicaCount: 0                                # Optional. Default: 0
      maxReplicaCount: 20                               # Optional. Default: 100
      advanced:                                         # Optional. Section to specify advanced options
        restoreToOriginalReplicaCount: false            # Optional. Default: false
        horizontalPodAutoscalerConfig:                  # Optional. Section to specify HPA related options
          behavior:                                     # Optional. Use to modify HPA's scaling behavior
            scaleDown:
              stabilizationWindowSeconds: 300
              policies:
              - type: Percent
                value: 100
                periodSeconds: 15
      triggers:
      - type: redis
        metadata:
          # address:                  # Format must be host:port
          passwordFromEnv: REDIS_KEY
          listName: keda              # Required
          listLength: "10"            # Required
          enableTLS: "false"          # optional
          databaseIndex: "0"          # optional
          hostFromEnv: REDIS_HOST
          portFromEnv: REDIS_PORT
    
  4. Salvare il file manifesto (CTRL + S) e chiudere l'editor(CTRL + Q).

Applicare il manifesto

  1. Distribuire il manifesto nel cluster usando il comando kubectl apply:

    kubectl apply -f ./scaled-object.yaml
    

    L'output dovrebbe essere simile all'esempio di output seguente:

    scaledobject.keda.sh/scaled-contoso created
    
  2. Controllare il numero di pod in esecuzione usando il comando kubectl get pods:

    kubectl get pods
    

    L'output dovrebbe essere simile all'output di esempio seguente, con un pod in esecuzione:

    NAME                                  READY   STATUS    RESTARTS   AGE
    contoso-microservice-794d98b5-4flvg   1/1     Running   0          2m1s
    
  3. Eseguire periodicamente il comando kubectl get pods per verificare che la distribuzione ridimensioni il numero di pod in base al backlog di lavoro.

    Nota

    Se è installata l'utilità Linux Watch, è possibile usare il comando watch kubectl get pods per visualizzare la scalabilità dei pod per elaborare gli elementi elenco Redis. In caso contrario, è possibile usare il comando kubectl get pods -w.

    L'output dovrebbe essere simile all'esempio di output seguente:

      NAME                                  READY   STATUS    RESTARTS   AGE
      contoso-microservice-794d98b5-4flvg   1/1     Running   0          3m
      contoso-microservice-794d98b5-4jpxp   1/1     Running   0          3m
      contoso-microservice-794d98b5-4lw7b   1/1     Running   0          2m15s
      contoso-microservice-794d98b5-5fqj5   1/1     Running   0          3m
      contoso-microservice-794d98b5-5kdbw   1/1     Running   0          2m15s
    

Dopo l'elaborazione di tutti gli elementi e la scadenza di cooldownPeriod, si noterà che il numero di pod è zero. Ciò avviene perché KEDA ha rimosso tutte le repliche in esecuzione e non ha più elementi da elaborare.