Knative 아키텍처
1️⃣ Knative Serving (배포, 스케일링, 라우팅)
Knative Serving은 컨테이너 기반 서버리스 애플리케이션을 배포하고, 자동으로 확장 및 라우팅을 관리하는 컴포넌트입니다.
1. Knative Serving 개요
Serving은 애플리케이션을 자동으로 배포하고 확장하며, 트래픽을 효과적으로 라우팅하는 역할을 합니다.
주요 기능:
- 자동 확장(Auto-scaling, Scale-to-zero)
- 버전 관리(Rollout, Traffic Splitting)
- 고급 트래픽 관리 (A/B 테스트, Canary 배포)
2. Knative Serving의 주요 리소스
Knative Serving은 Service, Route, Configuration, Revision이라는 주요 리소스로 구성됩니다.
📝 Knative Serving 리소스 구조
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: example-service
spec:
template:
spec:
containers:
- image: gcr.io/knative-samples/helloworld-go
리소스 | 설명 |
---|---|
Service | Knative 애플리케이션의 진입점 (자동 배포, 트래픽 관리) |
Route | 트래픽을 특정 Revision으로 라우팅 |
Configuration | 배포 설정을 관리하며 새로운 Revision을 생성 |
Revision | 변경된 코드나 설정이 배포될 때마다 생성되는 불변(Immutable) 버전 |
3. Knative Serving의 동작 방식
1️⃣ 서비스(Service) 배포 → 애플리케이션을 실행할 컨테이너를 정의
2️⃣ 리비전(Revision) 생성 → 새로운 코드나 설정 변경 시 새로운 Revision 생성
3️⃣ 라우팅(Route) 설정 → 특정 Revision으로 트래픽을 분배
4️⃣ 자동 확장(Auto-scaling) → 요청이 없으면 Scale-to-zero, 트래픽 증가 시 자동 확장
✅ Knative Serving의 확장 메커니즘
Knative Pod Autoscaler(KPA)
를 통해 트래픽에 따라 Pod 개수를 자동 조정HPA(Horizontal Pod Autoscaler)
와 함께 활용 가능
2️⃣ Knative Eventing (이벤트 생산자 및 소비자, 트리거, 버스)
Knative Eventing은 이벤트 기반 아키텍처를 구현할 수 있도록 도와주는 컴포넌트입니다.
즉, 이벤트 생산자(Producer)와 소비자(Consumer)를 연결하여 이벤트를 처리할 수 있도록 합니다.
1. Knative Eventing 개요
- CloudEvents 표준을 지원하여 이벤트 기반 애플리케이션 개발이 용이
- 다양한 이벤트 소스를 연결할 수 있으며, HTTP 기반으로 메시지를 전달
- 이벤트 필터링 및 라우팅 가능
2. Knative Eventing의 주요 리소스
리소스 | 설명 |
---|---|
Broker | 이벤트를 관리하는 메시지 브로커 |
Trigger | 특정 이벤트를 필터링하여 소비자에게 전달 |
Sink | 이벤트를 수신하는 애플리케이션 (Kubernetes Service, Knative Service 등) |
Event Source | 외부 이벤트(Kafka, AWS SQS 등)를 Knative로 가져옴 |
3. Knative Eventing의 동작 방식
1️⃣ 이벤트 소스(Event Source) → Kafka, Pub/Sub 등에서 이벤트를 수집
2️⃣ 브로커(Broker) → 이벤트를 중앙에서 관리
3️⃣ 트리거(Trigger) → 특정 이벤트를 필터링하여 소비자(Consumer)에게 전달
4️⃣ 소비자(Sink) → HTTP 서비스, Knative Service, Kubernetes Service 등에서 이벤트를 처리
📝 Knative Eventing 구성 예시
apiVersion: eventing.knative.dev/v1
kind: Broker
metadata:
name: default
---
apiVersion: eventing.knative.dev/v1
kind: Trigger
metadata:
name: my-trigger
spec:
broker: default
filter:
attributes:
type: dev.knative.example
subscriber:
ref:
apiVersion: serving.knative.dev/v1
kind: Service
name: event-display
3️⃣ Knative Build (컨테이너 이미지 빌드 및 배포 자동화)
Knative Build는 컨테이너 이미지를 자동으로 빌드하고 배포하는 기능을 제공합니다.
하지만 현재 Knative Build는 Tekton CI/CD로 대체되고 있습니다.
1. Knative Build 개요
- Git 저장소에서 직접 애플리케이션을 빌드 가능
- Dockerfile 없이 소스 코드에서 컨테이너 이미지 생성
- Kubernetes 네이티브 CI/CD 파이프라인과 통합 가능
✅ 현재는 Tekton이 Knative Build의 역할을 수행
- Tekton을 사용하면 빌드, 테스트, 배포까지 자동화 가능
- Knative와 통합하여 서버리스 CI/CD 파이프라인 구축 가능
4️⃣ Knative Event Sources (외부 이벤트를 Knative로 통합)
Knative Event Sources는 외부 이벤트(Kafka, AWS SQS, Google Pub/Sub 등)를 Knative 환경으로 통합하는 역할을 합니다.
1. Knative Event Sources 개요
- 다양한 외부 이벤트 소스를 Knative 환경에서 활용 가능
- HTTP 기반 이벤트 전송을 지원
- CloudEvents 표준을 따르므로, 이벤트의 형식을 통합하여 활용 가능
✅ 지원하는 Event Sources
- KafkaSource (Kafka 스트림 처리)
- AwsSqsSource (AWS SQS 메시지 큐)
- GoogleCloudPubSubSource (Google Pub/Sub)
- GitHubSource (GitHub Webhook 이벤트)
📝 KafkaSource를 활용한 예제
apiVersion: sources.knative.dev/v1beta1
kind: KafkaSource
metadata:
name: my-kafka-source
spec:
consumerGroup: knative-group
bootstrapServers: my-cluster-kafka-bootstrap.kafka:9092
topics: my-topic
sink:
ref:
apiVersion: serving.knative.dev/v1
kind: Service
name: event-display
5️⃣ Knative의 확장성과 가용성 고려사항
Knative는 대규모 트래픽 처리와 높은 가용성을 보장할 수 있도록 설계되었습니다.
1. 확장성(Scalability)
- Knative Serving은 HPA, KPA를 활용한 자동 확장을 지원
- Istio, Kourier, Contour 등 다양한 네트워크 레이어와 연동 가능
- 멀티 클러스터 환경에서도 실행 가능
2. 가용성(Availability)
- Knative는 Kubernetes의 고가용성(HA) 전략을 따름
- Istio 등 서비스 메시에 기반한 트래픽 관리 가능
- Pod Disruption Budget(PDB) 및 Kubernetes 클러스터 설정을 통해 안정성 강화