새소식

AWS/EKS

[EKS Study 5주차] EKS AutoScaling - KEDA

  • -

CloudNet@ 팀의 가시다님께서 Leading 하시는 AEWS Study 5주차 스터디 내용 정리

이번 포스팅에서는 EKS AutoScaling 중 Event 기반의 HPA 를 가능하게 해주는 KEDA 에 대해 알아보겠습니다.

 

1. KEDA

 

 

KEDA

Application autoscaling made simple

keda.sh

Kubernetes based Event Driven Autoscaler 의 약자로 k8s 환경에서 특정 이벤트를 기반으로 스케일 여부를 결정할 수 있게 해주는 도구입니다.

기존 HPA 의 기능인 메트릭 기반의 스케일링을 확장시켜 보다 유연한 Pod Scaling 이 가능합니다.

 

KEDA 에 사용할 수 있는 Event 로는 다음 공식 문서에 나와있습니다.

 

KEDA | Scalers

KEDA scalers can both detect if a deployment should be activated or deactivated, and feed custom metrics for a specific event source. Currently available scalers for KEDA Built-in External External scaler information is pulled from Artifact Hub. External s

keda.sh



1.1. KEDA 개요

 

KEDA Architecture

KEDA 3가지 핵심 컴포넌트

a. Agent

- Kubernetes Deployment의 Scale 을 확장하고 축소하는 핵심 역할

- KEDA 설치 시 'keda-operator' 라는 이름으로 표현

 

b. Metrics

- HPA 를 실행시키기 위한 Metrics 수집 서버

- KEDA 설치 시 'keda-operator-metrics-apiserver' 이름으로 표현

 

c. Admission Webhooks

- HPA 실행 시, 잘못된 구성으로 인한 스케일링을 방지하기 위한 유효성 검사 처리.

- KEDA 설치 시 'admission controller' 이름으로 표현

 

Admission Controllers Reference

This page provides an overview of Admission Controllers. What are they? An admission controller is a piece of code that intercepts requests to the Kubernetes API server prior to persistence of the object, but after the request is authenticated and authoriz

kubernetes.io

 

KEDA CRD

KEDA 설치 시 다음과 같은 CRD 가 생성됩니다.

 

a. ScaledObjects

- Event Sourcek8s Object (Deployment, StatefulSet 등) 을 매핑시켜주는 리소스

 

b. ScaledJobs

- Event Sourcek8s Job시켜주는 리소스

 

c. TriggerAuthentication / ClusterTriggerAuthentication

- ScaledObjects와 ScaledJobs이 스케일링을 위해 참조하는 Event Source 에 대한 Secret 구성이나 인증에 대한 권한을 나타내는 리소스

 

1.2. KEDA 설치

 

Helm 설치가 가능하기 때문에 Helm 으로 설치했습니다.

 

keda 2.10.2 · helm/kedacore

Event-based autoscaler for workloads on Kubernetes

artifacthub.io

 

helm repo add kedacore https://kedacore.github.io/charts
helm repo update
kubectl create namespace keda
helm install keda kedacore/keda --namespace keda --version 2.10.2

 

1.3. 테스트 앱 배포

 

apiVersion: apps/v1
kind: Deployment
metadata:
  name: php-apache
spec:
  selector:
    matchLabels:
      run: php-apache
  template:
    metadata:
      labels:
        run: php-apache
    spec:
      containers:
      - name: php-apache
        image: registry.k8s.io/hpa-example
        ports:
        - containerPort: 80
        resources:
          limits:
            cpu: 500m
          requests:
            cpu: 200m
---
apiVersion: v1
kind: Service
metadata:
  name: php-apache
  labels:
    run: php-apache
spec:
  ports:
  - port: 80
  selector:
    run: php-apache

 

1.4. KEDA 정책 생성

 

  • 생성한 php-apache Deployment 대해 Cron Job 형태의 이벤트 기반 Scaling 정책 생성
cat <<EOT > keda-cron.yaml
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
  name: php-apache-cron-scaled
spec:
  minReplicaCount: 0
  maxReplicaCount: 2
  pollingInterval: 30
  cooldownPeriod: 300
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: php-apache
  triggers:
  - type: cron
    metadata:
      timezone: Asia/Seoul
      start: 00,15,30,45 * * * *
      end: 05,20,35,50 * * * *
      desiredReplicas: "1"
EOT
kubectl apply -f keda-cron.yaml -n keda

 

이후 특정 시간에 맞춰 Pod Scaling 이 되는 것을 확인할 수 있습니다.

 


참고 문서

https://devocean.sk.com/blog/techBoardDetail.do?ID=164800

 

https://keda.sh/

Contents

포스팅 주소를 복사했습니다