演習 - スケール オブジェクトを Azure Kubernetes Service クラスターにデプロイする

完了

この演習では、スケール オブジェクト カスタム リソース定義 (CRD) を AKS クラスターにデプロイします。 スケーラー オブジェクトには、デプロイされたアプリケーションを 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 でスケーリングに使われるレプリカの範囲が決まります。 この場合、最小 0 から最大 20 の範囲でスケーリングするように KEDA に指示します。

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

    Note

    minReplicaCount: 0 の場合、Deployment の既定のレプリカ数は 1 から 0 になります。 これは、サービスがアイドル状態で、イベントを処理していない場合に発生します。 この場合、Redis リストに項目がなく、サービスがアイドル状態のままになっている場合に、KEDA で 0 にスケーリングされます。

  • 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 メトリックを使い、リストに 10 個の項目がある場合はスケールアップするように 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 のスケーラーに関する記事を参照してください。

ScaledObject マニフェストを作成する

  1. Cloud Shell で、touch コマンドを使って、scaled-object.yaml という Kubernetes の Deployment 用のマニフェスト ファイルを作成してください。

    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 コマンドを使って実行中のポッド数を確認してください。

    kubectl get pods
    

    次の出力例のように、出力には実行中のポッドが 1 つと示されます。

    NAME                                  READY   STATUS    RESTARTS   AGE
    contoso-microservice-794d98b5-4flvg   1/1     Running   0          2m1s
    
  3. kubectl get pods コマンドを定期的に実行して、Deployment で作業のバックログに従ってポッドの数をスケーリングしていることを確認します。

    Note

    Linux ユーティリティ ウォッチがインストールされている場合は、watch kubectl get pods コマンドを使用してポッドのスケールを確認し、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 の有効期限が切れると、ポッド数が 0 になることがわかります。 これは、実行中のレプリカが KEDA によってすべて削除され、処理する項目が残っていないためです。