メインコンテンツまでスキップ

KEDAの設定

KEDAがインストールされると、複数のカスタムリソースが作成されます。これらのリソースの1つであるScaledObjectを使用すると、外部イベントソースをDeploymentまたはStatefulSetにマッピングしてスケーリングできます。このラボでは、ui DeploymentをターゲットとするScaledObjectを作成し、CloudWatchのRequestCountPerTargetメトリクスに基づいてこのワークロードをスケールします。

~/environment/eks-workshop/modules/autoscaling/workloads/keda/scaledobject/scaledobject.yaml
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
A

これはKEDAがスケールするリソースです。nameはターゲットとするdeploymentの名前であり、ScaledObjectはDeploymentと同じnamespaceに存在する必要があります

B

KEDAがdeploymentをスケールする最小レプリカ数

C

KEDAがdeploymentをスケールする最大レプリカ数

D

expressionCloudWatch Metrics Insights構文を使用してターゲットメトリクスを選択します。targetMetricValueを超えると、KEDAは負荷の増加に対応するためにワークロードをスケールアウトします。この場合、RequestCountPerTargetが100を超えると、KEDAはdeploymentをスケールします。

AWS CloudWatchスケーラーの詳細についてはこちらをご覧ください。

まず、ラボの前提条件として作成されたApplication Load Balancer(ALB)とTarget Groupに関する情報を収集する必要があります。

~$export ALB_ARN=$(aws elbv2 describe-load-balancers --query 'LoadBalancers[?contains(LoadBalancerName, `k8s-ui-ui`) == `true`]' | jq -r .[0].LoadBalancerArn)
~$export ALB_ID=$(aws elbv2 describe-load-balancers --query 'LoadBalancers[?contains(LoadBalancerName, `k8s-ui-ui`) == `true`]' | jq -r .[0].LoadBalancerArn | awk -F "loadbalancer/" '{print $2}')
~$export TARGETGROUP_ID=$(aws elbv2 describe-target-groups --load-balancer-arn $ALB_ARN | jq -r '.TargetGroups[0].TargetGroupArn' | awk -F ":" '{print $6}')

これらの値を使用して、ScaledObjectの設定を更新し、クラスターにリソースを作成できます。

~$kubectl kustomize ~/environment/eks-workshop/modules/autoscaling/workloads/keda/scaledobject \
| envsubst | kubectl apply -f-