KEDA는 HPA와 달리 여러 종류의 스케일링을 지원하는데, 원하는 metadata를 선택하면 그에 해당 하는 조건의 autoscaler를 생성할 수 있다.
Scaling을 위한 HPA를 KEDA가 생성하고 참조하기에 기존 HPA가 있을 경우 충돌할 수 있다.
기존 HPA 소유권 이전도 된다고 한다.
KEDA 설치
설치 방법 (Helm)
$ helm repo add kedacore <https://kedacore.github.io/charts>
$ helm repo update
$ helm install keda kedacore/keda --namespace keda --create-namespace --set installCRDs=true
잘 설치 되었는지 helm list -A 명령어로 확인할 수 있다. 또한 yaml 설치도 가능하다.
KEDA ScaledObject 예시 (cron job)
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
name: cron-scaledobject # ScaledObject 이름
namespace: default # target resource namespace와 같게 설정하자
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: ui
pollingInterval: 30 # KEDA가 메트릭을 모니터링하는 주기
cooldownPeriod: 300 # scale-in 시 해당 시간안에 천천히 감소
minReplicaCount: 2
maxReplicaCount: 10
triggers:
- type: cron
metadata:
timezone: Asia/Seoul
start: "3 * * * *"
end: "4 * * * *"
desiredReplicas: "4" # cron 동작 시 pod count
- type: cpu
metricType: Utilization # CPU 사용률을 기반으로 스케일링
metadata:
value: "30" # CPU 사용률 30% 이상일 때 스케일 아웃
advanced:
horizontalPodAutoscalerConfig: # HPA 관련 설정
behavior:
scaleDown:
stabilizationWindowSeconds: 300 # 5분 동안 scale-in을 유예
policies:
- type: Pods
value: 1 # 한 번에 1개만 줄어들도록 제한
periodSeconds: 60 # 1분마다 스케일 인을 적용
scaleUp:
stabilizationWindowSeconds: 60 # 1분 동안 scale-out을 유예 (스파이크를 피하기 위한 설정)
policies:
- type: Percent
value: 100 # 한 번에 최대 100% 스케일 아웃
periodSeconds: 60 # 1분마다 스케일 아웃을 적용
cron scheduler가 필요해서 만든 sample이다. 계속 min 값을 유지하다가 cron 시간에만 desire값을 유지한다.
max 값은 어디다 쓰느냐 할 수 있는데 KEDA scaledObejct가 hpa를 만들어서 참조한다.
KEDA | ScaledObject specification
원하는 metadata의 scale을 위해 keda를 사용해보자
'INFRA > DevOps' 카테고리의 다른 글
Karpenter의 k8s 효율적인 자원관리 (0) | 2024.09.27 |
---|---|
Teams Workflow 생성하기 (0) | 2024.08.20 |
Deployments 와 StatefulSets (0) | 2024.04.17 |
[Git] switch/restore (0) | 2024.02.28 |
[K8S] Rollout (0) | 2024.01.08 |
댓글