KEDA

목차

소개

KEDA(Kubernetes Event-driven Autoscaling)는 Kubernetes 애플리케이션을 이벤트 기반으로 자동 확장할 수 있게 해주는 오픈 소스 프로젝트입니다. KEDA는 Kubernetes의 기본 Horizontal Pod Autoscaler(HPA)를 확장하여 CPU 및 메모리 사용량 외에도 다양한 이벤트 소스와 메트릭을 기반으로 워크로드를 확장할 수 있게 해줍니다.

KEDA의 주요 이점

  1. 이벤트 기반 스케일링: 다양한 이벤트 소스(메시지 큐, 데이터베이스, 스트림 등)에 기반한 스케일링

  2. 제로 스케일링: 활동이 없을 때 0개의 복제본으로 스케일 다운하여 비용 절감

  3. 다양한 스케일러 지원: 50개 이상의 내장 스케일러와 커스텀 스케일러 지원

  4. Kubernetes 네이티브: 기존 Kubernetes HPA와 통합

  5. 클라우드 중립적: 모든 Kubernetes 환경에서 작동

  6. 간단한 배포 모델: 단일 오퍼레이터로 쉽게 배포 가능

기존 스케일링 방식과의 비교

기능
KEDA
Kubernetes HPA
Cloud Provider Autoscaler

메트릭 소스

50+ 스케일러

CPU, 메모리, 커스텀 메트릭

제한된 메트릭

제로 스케일링

일부 지원

이벤트 기반

일부 지원

클라우드 중립적

배포 복잡성

낮음

매우 낮음

중간

커스텀 메트릭

쉬움

복잡함

제한적

아키텍처

KEDA는 Kubernetes 오퍼레이터 패턴을 기반으로 하며, 외부 메트릭 소스를 모니터링하고 Kubernetes HPA를 자동으로 관리합니다.

spinner

주요 구성 요소

  1. KEDA 오퍼레이터: ScaledObject 및 ScaledJob 리소스를 감시하고 HPA를 관리

  2. KEDA 메트릭 서버: 외부 메트릭 소스에서 메트릭을 수집하여 Kubernetes API로 노출

  3. ScaledObject: 배포(Deployment), 상태 저장 세트(StatefulSet) 등의 스케일링 구성을 정의

  4. ScaledJob: Kubernetes Job의 스케일링 구성을 정의

  5. 트리거/스케일러: 다양한 이벤트 소스에 대한 스케일링 로직 구현

작동 방식

  1. 사용자가 ScaledObject 또는 ScaledJob을 생성하여 스케일링 대상과 트리거를 정의

  2. KEDA 오퍼레이터가 이를 감지하고 해당 HPA를 생성

  3. KEDA 메트릭 서버가 외부 메트릭 소스를 폴링하여 메트릭 수집

  4. HPA가 메트릭 서버에서 제공하는 메트릭을 기반으로 워크로드 스케일링

  5. 활동이 없을 경우 KEDA가 복제본을 0으로 스케일 다운 (HPA는 할 수 없음)

설치 및 구성

사전 요구 사항

  • Kubernetes 클러스터 (v1.16 이상)

  • kubectl 설정

  • Helm (선택 사항)

설치 방법

1. Helm을 사용한 설치

2. YAML 매니페스트를 사용한 설치

3. 설치 확인

예상 출력:

기본 구성

KEDA는 기본적으로 최소한의 구성으로 작동하지만, 필요에 따라 다양한 설정을 조정할 수 있습니다.

Helm 값 파일을 사용한 사용자 정의 구성

스케일러

KEDA는 다양한 이벤트 소스에 대한 스케일러를 제공합니다. 각 스케일러는 특정 이벤트 소스에서 메트릭을 수집하고 이를 기반으로 워크로드를 스케일링합니다.

주요 스케일러

KEDA는 50개 이상의 스케일러를 지원하며, 주요 스케일러는 다음과 같습니다:

  1. 메시지 큐:

    • Apache Kafka

    • RabbitMQ

    • AWS SQS

    • Azure Service Bus

    • Google Cloud Pub/Sub

  2. 데이터베이스:

    • MySQL

    • PostgreSQL

    • MongoDB

    • Redis

  3. 스트리밍 플랫폼:

    • Apache Kafka

    • AWS Kinesis

    • Azure Event Hubs

  4. 클라우드 서비스:

    • AWS CloudWatch

    • Azure Monitor

    • Google Cloud Monitoring

  5. 기타:

    • Prometheus

    • Influxdb

    • Cron

    • CPU/Memory

기본 ScaledObject 예시

기본 ScaledJob 예시

커스텀 메트릭 스케일링

KEDA는 다양한 내장 스케일러 외에도 커스텀 메트릭을 기반으로 스케일링할 수 있는 유연성을 제공합니다. 이를 통해 비즈니스 요구사항에 맞는 고유한 스케일링 로직을 구현할 수 있습니다.

외부 메트릭 API 사용

Prometheus와 같은 외부 메트릭 소스를 사용하여 커스텀 메트릭 기반 스케일링을 구현할 수 있습니다:

HTTP 스케일러 사용

HTTP 엔드포인트에서 메트릭을 가져와 스케일링할 수 있습니다:

커스텀 스케일러 개발

자체 스케일러를 개발하여 KEDA와 통합할 수 있습니다. 이를 위해서는 External Metrics API를 구현하는 서비스를 개발해야 합니다:

  1. 메트릭 서버 구현:

  1. KEDA와 통합:

Twitter 메트릭 스케일링

Twitter API를 사용하여 특정 해시태그나 키워드의 언급 빈도에 따라 애플리케이션을 스케일링하는 예제입니다.

사전 요구 사항

  • Twitter API 키 및 액세스 토큰

  • 메트릭을 수집하고 노출하는 서비스

구현 단계

  1. Twitter 메트릭 수집기 서비스 구현:

  1. 메트릭 수집기 서비스 배포:

  1. KEDA ScaledObject 구성:

Google Calendar 스케일링

Google Calendar API를 사용하여 예정된 이벤트에 따라 애플리케이션을 스케일링하는 예제입니다.

사전 요구 사항

  • Google Calendar API 자격 증명

  • 메트릭을 수집하고 노출하는 서비스

구현 단계

  1. Google Calendar 메트릭 수집기 서비스 구현:

  1. 메트릭 수집기 서비스 배포:

  1. KEDA ScaledObject 구성:

Istio 메트릭 스케일링

Istio 서비스 메시에서 수집된 메트릭을 기반으로 애플리케이션을 스케일링하는 예제입니다. 특히 초당 요청 수(requests per second, RPS)를 기반으로 스케일링하는 방법을 살펴보겠습니다.

사전 요구 사항

  • Istio 서비스 메시 설치

  • Prometheus 설치 및 Istio와 통합

구현 단계

  1. Istio 서비스 메시 설정:

  1. 샘플 애플리케이션 배포:

  1. KEDA ScaledObject 구성:

이 구성은 Istio에서 수집한 초당 요청 수를 기반으로 sample-app 배포를 스케일링합니다. 초당 요청 수가 10을 초과하면 KEDA는 복제본을 추가하고, 요청 수가 감소하면 복제본을 줄입니다.

고급 구성

더 복잡한 시나리오에서는 특정 경로나 HTTP 메서드에 대한 요청 수를 기반으로 스케일링할 수 있습니다:

또한 오류율이나 지연 시간과 같은 다른 Istio 메트릭을 기반으로 스케일링할 수도 있습니다:

Cron 기반 스케일링

KEDA는 Cron 표현식을 사용하여 시간 기반 스케일링을 지원합니다. 이를 통해 예측 가능한 트래픽 패턴이나 일정에 따라 애플리케이션을 사전에 스케일링할 수 있습니다.

기본 Cron 스케일러

이 구성은 매시간 30분에 sample-app 배포를 5개의 복제본으로 스케일 업하고, 45분에 다시 스케일 다운합니다.

여러 시간대 스케일링

여러 Cron 트리거를 사용하여 다양한 시간대에 다른 스케일링 동작을 구성할 수 있습니다:

Cron과 다른 스케일러 결합

Cron 스케일러를 다른 스케일러와 결합하여 기본 스케일링 동작을 설정하고 실제 부하에 따라 추가로 스케일링할 수 있습니다:

Amazon EKS와의 통합

KEDA는 Amazon EKS와 원활하게 통합되어 AWS 서비스 기반 스케일링을 제공합니다.

EKS에 KEDA 설치

AWS 서비스 기반 스케일링

SQS 대기열 기반 스케일링

CloudWatch 메트릭 기반 스케일링

IRSA(IAM Roles for Service Accounts) 통합

EKS에서 KEDA를 사용할 때 IRSA를 활용하여 AWS 서비스에 대한 권한을 관리할 수 있습니다:

모범 사례

성능 최적화

  1. 적절한 폴링 간격 설정: 워크로드 특성에 맞는 폴링 간격 설정

  2. 쿨다운 기간 최적화: 불필요한 스케일링 진동 방지

  3. 리소스 요청 및 제한 설정: KEDA 구성 요소에 적절한 리소스 할당

  4. 효율적인 쿼리 작성: 메트릭 쿼리 최적화

안정성 향상

  1. 다중 트리거 사용: 여러 메트릭 소스를 기반으로 스케일링

  2. 적절한 최소 및 최대 복제본 설정: 워크로드 요구사항에 맞는 범위 설정

  3. 장애 처리 전략: 메트릭 소스 장애 시 대응 방안 마련

  4. 모니터링 및 알림 설정: KEDA 작동 상태 모니터링

보안 강화

  1. 최소 권한 원칙 적용: 필요한 권한만 부여

  2. 시크릿 관리: 민감한 정보 안전하게 관리

  3. 네트워크 정책 적용: KEDA 구성 요소에 대한 액세스 제한

  4. RBAC 설정: 적절한 역할 기반 액세스 제어 구성

문제 해결

일반적인 문제

1. 스케일링이 작동하지 않음

증상: 메트릭이 임계값을 초과해도 파드가 스케일링되지 않음

해결 방법:

  • KEDA 로그 확인

  • 메트릭 소스 연결 확인

  • 인증 구성 확인

2. 제로 스케일링 문제

증상: 활동이 없을 때 0으로 스케일 다운되지 않음

해결 방법:

  • minReplicaCount 설정 확인

  • 메트릭 값 확인

  • HPA 상태 확인

3. 인증 문제

증상: 메트릭 소스에 연결할 수 없음

해결 방법:

  • TriggerAuthentication 구성 확인

  • 시크릿 또는 환경 변수 확인

  • 권한 확인

디버깅 도구

결론

KEDA(Kubernetes Event-driven Autoscaling)는 Kubernetes 환경에서 이벤트 기반 자동 확장을 제공하는 강력한 도구입니다. 기본 Kubernetes HPA를 확장하여 다양한 이벤트 소스와 메트릭을 기반으로 워크로드를 스케일링할 수 있게 해줍니다.

이 문서에서는 KEDA의 기본 개념, 설치 방법, 다양한 스케일러 사용법, 커스텀 메트릭 스케일링, Twitter 및 Google Calendar와 같은 외부 서비스 통합, Istio 메트릭 기반 스케일링, Cron 기반 스케일링, Amazon EKS와의 통합, 모범 사례 및 문제 해결에 대해 살펴보았습니다.

KEDA를 사용하면 애플리케이션을 더 효율적으로 스케일링하고, 리소스 사용을 최적화하며, 비용을 절감할 수 있습니다. 특히 이벤트 기반 아키텍처와 서버리스 패턴을 구현하는 데 매우 유용합니다.

다음 단계

  • KEDA를 사용한 서버리스 아키텍처 구현

  • 다양한 이벤트 소스와의 통합 탐색

  • 커스텀 스케일러 개발

  • 멀티 클러스터 환경에서의 KEDA 활용

  • KEDA와 다른 클라우드 네이티브 도구와의 통합

참고 자료

퀴즈

이 장에서 배운 내용을 테스트하려면 주제 퀴즈를 풀어보세요.

마지막 업데이트