KEDAの設定
KEDAをインストールすると、いくつかのカスタムリソースが作成されます。これらのリソースの1つであるScaledObjectを使用すると、外部イベントソースをDeploymentまたはStatefulSetにマッピングしてスケーリングすることができます。このラボでは、ui Deploymentをターゲットとし、CloudWatchのRequestCountPerTargetメトリクスに基づいてこのワークロードをスケーリングするScaledObjectを作成します。
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
name: ui-hpa
namespace: ui
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: ui
pollingInterval: 30
cooldownPeriod: 300
minReplicaCount: 1
maxReplicaCount: 10
triggers:
- type: aws-cloudwatch
metadata:
namespace: AWS/ApplicationELB
expression: SELECT COUNT(RequestCountPerTarget) FROM SCHEMA("AWS/ApplicationELB", LoadBalancer, TargetGroup) WHERE TargetGroup = '${TARGETGROUP_ID}' AND LoadBalancer = '${ALB_ID}'
metricStat: Sum
metricStatPeriod: "60"
metricUnit: Count
targetMetricValue: "100"
minMetricValue: "0"
awsRegion: "${AWS_REGION}"
identityOwner: operator
これはKEDAがスケーリングするリソースです。nameはターゲットとするDeploymentの名前で、ScaledObjectはDeploymentと同じNamespaceに存在する必要があります
KEDAがDeploymentをスケーリングする際の最小レプリカ数
KEDAがDeploymentをスケーリングする際の最大レプリカ数
expressionはCloudWatch Metrics Insights構文を使用してターゲットメトリクスを選択します。targetMetricValueを超えると、KEDAはワークロードをスケールアウトして増加した負荷に対応します。この例では、RequestCountPerTargetが100を超えると、KEDAはDeploymentをスケーリングします。
AWS CloudWatch scalerの詳細については、こちらをご覧ください。
まず、ラボの前提条件の一部として作成されたApplication Load Balancer (ALB)とTarget Groupに関する情報を収集する必要があります。
これらの値を使用して、ScaledObjectの設定を更新し、クラスターにリソースを作成できます。