KEDA Install
helm repo add kedacore <https://kedacore.github.io/charts>
helm repo update
kubectl create namespace keda
helm install keda kedacore/keda --namespace keda
여기도 마찬가지로 원래 권한이 필요하지만 administrator 써서 딱히 구성하지 않았다.
Scaler manifest
apiVersion: v1
kind: Secret
metadata:
name: eda-secrets
namespace: eda-app
type: Opaque
data:
AWS_ACCESS_KEY_ID: QUtJQVFCTzZERlE2Tk9VRUEzRUc= # Required.
AWS_SECRET_ACCESS_KEY: Y1pLVStMcExITjNGZndVVDV2R1p1RW80aG5nMUVtTGxkaCsyQnJTUw== # Required.
---
apiVersion: keda.sh/v1alpha1
kind: TriggerAuthentication
metadata:
name: keda-trigger-auth-aws-credentials
namespace: eda-app
spec:
secretTargetRef:
- parameter: awsAccessKeyID
name: eda-secrets
key: AWS_ACCESS_KEY_ID
- parameter: awsSecretAccessKey
name: eda-secrets
key: AWS_SECRET_ACCESS_KEY
---
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
name: aws-sqs-queue-scaledobject
namespace: eda-app
spec:
scaleTargetRef:
name: eda-nginx
pollingInterval: 30 # 30초마다 SQS 상태 확인
cooldownPeriod: 30 # scale-in 되기 전 대기 시간
minReplicaCount: 2
maxReplicaCount: 10
advanced:
horizontalPodAutoscalerConfig:
behavior:
scaleDown:
stabilizationWindowSeconds: 30 # 최근 30초간 메트릭 참고
policies:
- type: Percent
value: 100 # 최대 100%까지 줄일 수 있음
periodSeconds: 15 # 15초마다 스케일 인 평가
triggers:
- type: aws-sqs-queue
authenticationRef:
name: keda-trigger-auth-aws-credentials
metadata:
queueURL: <https://sqs.ap-northeast-2.amazonaws.com/003150130236/eda-scaling-queue>
queueLength: "10"
awsRegion: "ap-northeast-2"
Secret
AWS에 sqs와 연동하기 위해 액세스키와 시크릿키를 사용해 secret를 생성했다. 저 값은 echo -n '<Key>' | base64로 추출이 가능하다.
---
ScaledObject
spec에 scaleTargetRef에서 스케일링할 파드를 골라주는데, 내가 생성한 deployment인 eda-nginx를 써줬다.
triggers 설정에선 type으로 aws-sqs-queue를 작성해 queue와 연동했고, authenticationRef에서 TriggerAuthentication을 지정했다.
metadata에서 queueURL에서 AWS SQS에 URL을 적어주고 queueLength를 10으로 설정해 메시지가 10개 이상이면 스케일링되게 구성했다.