練習 - 將縮放物件部署到您的 Azure Kubernetes Service 叢集中

已完成

在本練習中,您會將縮放物件自訂資源定義 (CRD) 部署到您的 AKS 叢集中。 Scaler 物件包含了可將您已部署的應用程式連接到 KEDA 的觸發程序。 部署到 AKS 之後,KEDA 會監視 Redis 清單,如果清單長度超過定義的閾值則會擴大,如果清單長度低於定義的閾值則會縮小。

ScaledObject 資訊清單概觀

  • scaleTargetRef:本區段描述 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]
    
  • minReplicaCountmaxReplicaCount:這些屬性可決定 KEDA 用於縮放調整的複本範圍。 在這種情況下,您會指示 KEDA 從最小值 0 放大調整到最大值 20。

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

    注意

    minReplicaCount: 0 會將部署的預設複本計數從 1 變為 0。 如果服務閒置且未在處理任何事件,便會發生這種情況。 在這種情況下,如果 Redis 清單中沒有任何項目,而且服務仍處於閒置狀態,則 KEDA 會調整為零。

  • advanced:本區段與 KEDA 的進階自訂有關。 restoreToOriginalReplicaCount 會指示 KEDA 在擴增事件數後將複本計數返回到原始值。 在這種情況下,您會將其設為 false (這會導致 minReplicaCount 值縮小為零)。

      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:本區段使用 scalers 來偵測是否應該啟用或停用物件,並為特定的事件來源提供自訂計量。 listLength 計量會指示 KEDA 在清單中有十個項目時進行擴增。

      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
    

如需詳細資訊,請參閱 KEDA Scaler

建立 ScaledObject 資訊清單

  1. 在 Cloud Shell 中,使用 touch 命令,為 Kubernetes 部署建立稱為 scaled-object.yaml 的資訊清單檔:

    touch scaled-object.yaml
    
  2. 輸入 code .,在 Cloud Shell 中開啟整合式編輯器

  3. 開啟 scaled-object.yaml 檔案,並新增下列 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. 儲存資訊清單檔 (CTRL + S) 並關閉編輯器 (CTRL + Q)。

套用資訊清單

  1. 使用 kubectl apply 命令將資訊清單部署至叢集:

    kubectl apply -f ./scaled-object.yaml
    

    您的輸出看起來應類似下列範例輸出:

    scaledobject.keda.sh/scaled-contoso created
    
  2. 使用 kubectl get pods 命令來檢查執行中的 Pod 數目:

    kubectl get pods
    

    您的輸出看起來應類似下列的範例輸出,其中一個 Pod 正在執行:

    NAME                                  READY   STATUS    RESTARTS   AGE
    contoso-microservice-794d98b5-4flvg   1/1     Running   0          2m1s
    
  3. 定期執行 kubectl get pods 命令,以確認部署將根據工作的待處理項目 (Backlog) 來調整 Pod 數目。

    注意

    如果您已安裝 Linux 公用程式監視,則可以使用 watch kubectl get pods 命令來查看 Pod 數的縮放調整以處理 Redis 清單項目。 如果沒有,您可以使用 kubectl get pods -w 命令。

    您的輸出看起來應類似下列範例輸出:

      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
    

在處理所有項目且 cooldownPeriod 到期之後,您將會看到 Pod 的數目為零。 這是因為 KEDA 已移除所有執行中的複本,而且沒有任何剩餘的項目可供處理。