Cvičení – nasazení objektu škálování do clusteru Azure Kubernetes Service

Dokončeno

V tomto cvičení nasadíte do clusteru AKS definici vlastního prostředku objektu škálování (CRD). Objekt scaleru obsahuje trigger, který připojí nasazenou aplikaci ke SLUŽBĚ KEDA. Po nasazení do AKS KEDA monitoruje seznam Redis a zvětší kapacitu, pokud délka seznamu překročí definovanou prahovou hodnotu, a sníží kapacitu, pokud délka seznamu klesne pod tuto hodnotu.

Přehled manifestu ScaledObject

  • scaleTargetRef: Tato část popisuje, které pracovní zátěže KEDA sleduje.

      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 a maxReplicaCount: Tyto atributy určují rozsah replik, které KEDA používá ke škálování. V takovém případě dáte KEDA pokyn, aby škáloval od minimální nuly na maximum 20.

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

    Poznámka

    minReplicaCount: 0 vezme výchozí počet replik nasazení z jedné na nulu. K tomu dochází, pokud je služba nečinná a nezpracovává žádné události. Pokud v tomto případě nejsou v seznamu Redis žádné položky a služba zůstane nečinná, keDA se škáluje na nulu.

  • advanced: Tato část se týká pokročilých přizpůsobení KEDA. restoreToOriginalReplicaCount dá KEDA pokyn, aby po událostech navýšení škálování vrátil počet replik na původní hodnotu. V tomto případě ji nastavíte na false, což způsobí snížení na minReplicaCount nulu.

      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: Tato část používá scalers k detekci, jestli má být objekt aktivován nebo deaktivován, a podává vlastní metriky pro konkrétní zdroje událostí. Metrika listLength přikazuje KEDA zvýšit měřítko, když je v seznamu deset položek.

      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
    

Další informace najdete v tématu KEDA skalery.

Vytvoření manifestu ScaledObject

  1. V Cloud Shellu vytvořte soubor manifestu pro nasazení Kubernetes s názvem scaled-object.yaml pomocí příkazu touch:

    touch scaled-object.yaml
    
  2. Zadáním code . otevřete integrovaný editor v Cloud Shellu.

  3. Otevřete soubor scaled-object.yaml a přidejte následující část kódu YAML:

    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. Uložte soubor manifestu (CTRL + S) a zavřete editor(CTRL + Q).

Použití manifestu

  1. Pomocí příkazu kubectl apply nasaďte manifest do clusteru:

    kubectl apply -f ./scaled-object.yaml
    

    Výstup by měl vypadat podobně jako v následujícím příkladu výstupu:

    scaledobject.keda.sh/scaled-contoso created
    
  2. Pomocí příkazu kubectl get pods zkontrolujte počet spuštěných podů:

    kubectl get pods
    

    Výstup by měl vypadat podobně jako v následujícím příkladu výstupu s jedním spuštěným podem:

    NAME                                  READY   STATUS    RESTARTS   AGE
    contoso-microservice-794d98b5-4flvg   1/1     Running   0          2m1s
    
  3. Pravidelně spusťte příkaz kubectl get pods, abyste ověřili, že nasazení škáluje počet podů podle backlogu práce.

    Poznámka

    Pokud máte nainstalovanou utilitu Linux watch, můžete pomocí příkazu watch kubectl get pods zobrazit škálování podů pro zpracování položek seznamu Redis. Pokud ne, můžete použít příkaz kubectl get pods -w.

    Výstup by měl vypadat podobně jako v následujícím příkladu výstupu:

      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
    

Po zpracování všech položek a vypršení platnosti cooldownPeriod uvidíte, že počet podů je nula. Důvodem je to, že KEDA odstranil všechny spuštěné repliky a neexistují žádné položky k zpracování.