演習 - スケール オブジェクトを 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]
minReplicaCount
とmaxReplicaCount
:これらの属性により、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
マニフェストを作成する
Cloud Shell で、
touch
コマンドを使って、scaled-object.yaml
という Kubernetes の Deployment 用のマニフェスト ファイルを作成してください。touch scaled-object.yaml
「
code .
」と入力して、Cloud Shell で統合エディターを開きます。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
マニフェスト ファイルを保存し (Ctrl + S)、エディターを閉じてください (Ctrl + Q)。
マニフェストを適用する
kubectl apply
コマンドを使って、マニフェストをクラスターにデプロイしてください。kubectl apply -f ./scaled-object.yaml
出力は次の出力例のようになります。
scaledobject.keda.sh/scaled-contoso created
kubectl get pods
コマンドを使って実行中のポッド数を確認してください。kubectl get pods
次の出力例のように、出力には実行中のポッドが 1 つと示されます。
NAME READY STATUS RESTARTS AGE contoso-microservice-794d98b5-4flvg 1/1 Running 0 2m1s
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 によってすべて削除され、処理する項目が残っていないためです。