Skip to main content

Serverless on K8s — Knative

트래픽이 없으면 Pod도 없다 — K8s 위에서 Serverless를 구현


1. Serverless란

1.1 핵심 개념

원칙설명
서버 관리 없음인프라를 신경 쓰지 않고 코드에만 집중
이벤트 기반요청/이벤트가 올 때만 실행
자동 스케일링트래픽에 따라 0 → N 자동 조절
종량 과금실행 시간만큼만 비용

1.2 K8s 위의 Serverless

클라우드 네이티브K8s 기반
AWS Lambda, Azure Functions, GCP Cloud FunctionsKnative, OpenFaaS, KEDA
완전 관리형, 벤더 종속K8s 위에서 동작, 벤더 중립

💡 왜 K8s Serverless인가? 벤더 종속 없이, 온프레미스에서도, 기존 K8s 인프라를 활용하여 Serverless 패턴을 적용할 수 있음.


2. Knative

2.1 구성

컴포넌트역할
Knative ServingHTTP 기반 워크로드의 자동 스케일링 (0까지)
Knative Eventing이벤트 기반 아키텍처 (이벤트 소스 → 브로커 → 트리거)

2.2 Knative Serving

flowchart LR
Request["HTTP 요청"] --> Activator["Activator<br/>(Pod 0일 때 대기)"]
Activator --> Pod["Pod<br/>(자동 생성)"]
Pod -->|"트래픽 없으면"| Zero["Scale to 0"]

Scale-to-Zero:

  • 설정 가능한 유휴 시간(기본 60초) 후 Pod를 0으로 스케일 다운
  • 새 요청이 오면 Activator가 감지 → Pod를 빠르게 생성 → 요청 전달
  • ⚠️ 콜드 스타트: Pod 0 → 1로 올라올 때 수 초의 지연 발생
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: hello
spec:
template:
metadata:
annotations:
autoscaling.knative.dev/min-scale: "0" # 최소 0 (Scale-to-Zero)
autoscaling.knative.dev/max-scale: "10" # 최대 10
autoscaling.knative.dev/target: "100" # Pod당 동시 요청 100
spec:
containers:
- image: gcr.io/knative-samples/helloworld-go
env:
- name: TARGET
value: "World"

2.3 Knative Eventing

이벤트 소스(Kafka, Cloud Events, Cron)에서 이벤트를 받아 처리.

flowchart LR
Source["이벤트 소스<br/>(Kafka, S3, Cron)"]
Broker["Broker<br/>(이벤트 라우터)"]
Trigger["Trigger<br/>(필터 조건)"]
Consumer["처리 서비스<br/>(Knative Service)"]

Source --> Broker --> Trigger --> Consumer

3. KEDA (Kubernetes Event-Driven Autoscaling)

HPA를 이벤트 기반으로 확장. Kafka 큐 길이, HTTP 요청 수, Cron 등을 기반으로 Pod를 스케일링.

apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
name: kafka-consumer
spec:
scaleTargetRef:
name: kafka-consumer-deployment
minReplicaCount: 0 # Scale-to-Zero 가능
maxReplicaCount: 20
triggers:
- type: kafka
metadata:
bootstrapServers: kafka:9092
consumerGroup: my-group
topic: my-topic
lagThreshold: "100" # 메시지 지연 100개 이상이면 스케일 아웃
KnativeKEDA
초점HTTP Serverless + 이벤트이벤트 기반 오토스케일링
Scale-to-Zero✅ (핵심 기능)
복잡도높음 (전체 프레임워크)✅ 낮음 (HPA 확장)
이벤트 소스Cloud Events 표준✅ 60+ scaler (Kafka, SQS, Redis...)
설치무거움✅ 가벼움
추천풀 Serverless 플랫폼이벤트 기반 스케일링만 필요하면

4. 적합한 워크로드

Serverless가 적합한 경우

워크로드이유
웹훅 처리간헐적 호출, Scale-to-Zero로 비용 절약
이벤트 처리Kafka/SQS 메시지 소비
배치 작업주기적 실행, 유휴 시 자원 0
API 게이트웨이트래픽 변동이 큰 API
CI/CD 빌드빌드 요청 시만 실행

Serverless가 부적합한 경우

워크로드이유
DB, 상태 서비스상시 실행 필요, 콜드 스타트 불가
상시 트래픽 앱Scale-to-Zero 의미 없음, 오히려 오버헤드
저지연 필수콜드 스타트(수 초)가 문제
복잡한 상태 관리Serverless는 무상태에 적합

정리

이것으로 심화편(#13~#18) 완료.

심화편핵심
#13 Service Mesh마이크로서비스 통신을 인프라로. Istio(풍부) vs Linkerd(간결)
#14 OperatorCRD + Controller = 운영 자동화. K8s API 확장의 핵심
#15 보안 심화OPA/Gatekeeper(정책), Falco(런타임), Supply Chain(이미지)
#16 멀티클러스터장애 격리, 환경 분리. Rancher, ArgoCD, Cluster API
#17 FinOps비용 가시성(Kubecost), 리소스 최적화, Spot, Karpenter
#18 ServerlessScale-to-Zero. Knative(풀 플랫폼) vs KEDA(이벤트 스케일링)

🔗 관련 문서