Ćwiczenie — wdrażanie obiektu skalowania w klastrze usługi Azure Kubernetes Service

Ukończone

W tym ćwiczeniu wdrożysz niestandardową definicję zasobu obiektu skalowania (CRD) w klastrze usługi AKS. Obiekt skalowania zawiera wyzwalacz, który łączy wdrożona aplikację z usługą KEDA. Po wdrożeniu w usłudze AKS usługa KEDA monitoruje listę usługi Redis i skaluje w górę, jeśli długość listy przekracza zdefiniowany próg i skaluje w dół, jeśli długość listy spadnie poniżej zdefiniowanego progu.

ScaledObject omówienie manifestu

  • scaleTargetRef: W tej sekcji opisano, które obciążenie obserwuje 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 i maxReplicaCount: Te atrybuty określają zakres replik KEDA używanych do skalowania. W takim przypadku należy poinstruować KEDA, aby skalować z minimum zera do maksimum 20.

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

    Uwaga

    minReplicaCount: 0 przyjmuje domyślną liczbę replik wdrożenia z jednej do zera. Dzieje się tak, jeśli usługa jest bezczynna i nie przetwarza żadnych zdarzeń. W takim przypadku, jeśli na liście redis nie ma żadnych elementów, a usługa pozostaje bezczynna, KEDA skaluje do zera.

  • advanced: Ta sekcja jest związana z zaawansowanymi dostosowaniami usługi KEDA. Polecenie restoreToOriginalReplicaCount nakazuje KEDA zwrócenie liczby replik do oryginalnej wartości po zdarzeń skalowania w górę. W takim przypadku należy ustawić falsewartość , co powoduje, że skalowanie w minReplicaCount dół do wartości 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: Ta sekcja służy scalers do wykrywania, czy obiekt powinien zostać aktywowany lub zdezaktywowany, i przekaż metryki niestandardowe dla określonych źródeł zdarzeń. listLength Metryka nakazuje usłudze KEDA skalowanie w górę, gdy na liście znajduje się dziesięć elementów.

      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
    

Aby uzyskać więcej informacji, zobacz KEDA Scalers.

Tworzenie manifestu ScaledObject

  1. W usłudze Cloud Shell utwórz plik manifestu dla wdrożenia kubernetes o nazwie scaled-object.yaml przy użyciu touch polecenia :

    touch scaled-object.yaml
    
  2. Otwórz edytor zintegrowany w usłudze Cloud Shell, wprowadzając polecenie code .

  3. Otwórz plik i dodaj następującą sekcję scaled-object.yaml kodu 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. Zapisz plik manifestu (CTRL + S) i zamknij edytor (CTRL + Q).

Stosowanie manifestu

  1. Wdróż manifest w klastrze przy użyciu kubectl apply polecenia :

    kubectl apply -f ./scaled-object.yaml
    

    Dane wyjściowe powinny wyglądać podobnie do następujących przykładowych danych wyjściowych:

    scaledobject.keda.sh/scaled-contoso created
    
  2. Sprawdź liczbę uruchomionych zasobników przy użyciu kubectl get pods polecenia :

    kubectl get pods
    

    Dane wyjściowe powinny wyglądać podobnie do poniższych przykładowych danych wyjściowych z uruchomionym jednym zasobnikiem:

    NAME                                  READY   STATUS    RESTARTS   AGE
    contoso-microservice-794d98b5-4flvg   1/1     Running   0          2m1s
    
  3. Okresowo uruchamiaj polecenie , kubectl get pods aby sprawdzić, czy wdrożenie skaluje liczbę zasobników zgodnie z listą prac.

    Uwaga

    Jeśli zainstalowano narzędzie systemu Linux, możesz użyć watch kubectl get pods polecenia , aby wyświetlić skalowanie zasobników w celu przetworzenia elementów listy usługi Redis. Jeśli nie, możesz użyć kubectl get pods -w polecenia .

    Dane wyjściowe powinny wyglądać podobnie do następujących przykładowych danych wyjściowych:

      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 przetworzeniu cooldownPeriod wszystkich elementów i wygaśnięciu zobaczysz, że liczba zasobników wynosi zero. Dzieje się tak, ponieważ KEDA usunęła wszystkie uruchomione repliki i nie ma elementów do przetworzenia.