Knative 아키텍처

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 클러스터 설정을 통해 안정성 강화

RSS Feed
마지막 수정일자