記事概要
EKSにてKEDAを利用してAutoScalingをCloudWatchMetricsをもとに組む
対象読者
- EKSを使用してAutoScalingが組みたい
- KEDAを使用したサービスを作りたい
KEDAを使用したスケーリング
前提条件
- EKSのバージョンが1.29
- EKSにてアプリケーションロードバランサーが実装されている
- Metrics Serverが実装されている
- クラスターオートスケーラーが実装されている
構築方法
- KEDA公式ドキュメントに従ってKEDA(1.24)をデプロイ(YAMLもしくはHelm)
- kedaのネームスペース内にkeda-operatorというサービスアカウントが作成されるのでロールをアノテートする。
ロールのポリシーは公式サイトを参照し、GetMetricsのアクションを許可。 - kedaというnamespaceのkeda-operatorという名前のデプロイメントを再作成する
kubectl rollout restart deployments/keda-operator -n keda
- TriggreAuthenticationとScaledObjectのYAMLを作成し、applyする
※spec.advanced.behavior
はサンプルです。このままやるとよ謎の挙動になります。
HPAのスケーリングポリシーを参考に自分で調節してみてください
apiVersion: keda.sh/v1alpha1
kind: TriggerAuthentication
metadata:
name: auth-keda
namespace: {アプリの名前空間}
spec:
podIdentity:
provider: aws
identityOwner: keda
---
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
name: aws-cloudwatch-scaledobject
namespace: {アプリの名前空間}
spec:
scaleTargetRef:
name: {スケーリング対象のデプロイメント}
minReplicaCount: 0
advanced:
horizontalPodAutoscalerConfig:
behavior:
scaleDown:
stabilizationWindowSeconds: 60
policies:
- type: Percent
value: 100
periodSeconds: 15
scaleUp:
stabilizationWindowSeconds: 0
policies:
- type: Percent
value: 20
periodSeconds: 30
- type: Pods
value: 1
periodSeconds: 30
selectPolicy: Max
triggers:
- type: aws-cloudwatch
metadata:
namespace: AWS/ApplicationELB
dimensionName: TargetGroup
dimensionValue: {対象となるメトリクスのディメンション名}
metricName: RequestCountPerTarget
targetMetricValue: "6"
minMetricValue: "0"
metricCollectionTime: "120"
metricStat: "Sum"
metricStatPeriod: "60"
awsRegion: {リージョン}
authenticationRef:
name: auth-keda