본문 바로가기
INFRA/DevOps

k8s KEDA 사용하기

by HemMu 2024. 11. 25.

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 | Deploying KEDA

 

KEDA | Deploying KEDA

We provide a few approaches to deploy KEDA runtime in your Kubernetes clusters: Helm chartsOperator HubYAML declarations 💡 NOTE: KEDA requires Kubernetes cluster version 1.27 and higher Don’t see what you need? Feel free to create an issue on our GitH

keda.sh

 

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

 

KEDA | ScaledObject specification

Overview This specification describes the ScaledObject Custom Resource definition that defines the triggers and scaling behaviors used by KEDA to scale Deployment, StatefulSet and Custom Resource target resources. The .spec.ScaleTargetRef section holds the

keda.sh

 

원하는 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

댓글