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개 이상이면 스케일링되게 구성했다.