Knative와 Kubernetes 연동

Knative와 Kubernetes 연동

1️⃣ Knative와 Kubernetes의 통합 (Kubernetes와 Knative의 관계 이해)

Knative는 Kubernetes 위에서 동작하는 서버리스 컴퓨팅 플랫폼입니다.
Kubernetes는 컨테이너 실행을 담당하고, Knative는 이를 확장하여 자동 스케일링, 이벤트 기반 실행, 빌드 자동화 등의 기능을 제공합니다.

💡 Knative와 Kubernetes의 관계

  • Kubernetes는 Knative의 기반 플랫폼 역할을 수행.
  • Knative는 추가적인 컨트롤러리소스(Custom Resource Definition, CRD) 를 제공하여 서버리스 기능을 확장.
  • Kubernetes의 기존 Pod, Service, Deployment, Ingress 등의 개념을 그대로 활용.

아키텍처 개요
Knative와 Kubernetes 통합


2️⃣ Kubernetes 리소스와의 상호작용

Knative는 Kubernetes의 기본 리소스를 활용하여 동작합니다.

1. Knative와 Kubernetes 리소스 비교

Knative 리소스 Kubernetes 리소스 설명
Service Deployment + Service 배포 및 트래픽 관리
Revision ReplicaSet 버전 관리
Route Ingress 트래픽 라우팅
Configuration ConfigMap 설정 관리
EventSource CRD(Custom Resource) 이벤트 처리

2. Knative에서 생성되는 Kubernetes 리소스 예제

Knative Service를 생성하면 내부적으로 Kubernetes의 Deployment, Service, Pod 등이 자동 생성됩니다.

kubectl get pods,svc,deploy -n knative-serving

3️⃣ Knative와 Helm (Helm을 이용한 Knative 배포)

Helm을 사용하면 Knative를 더욱 쉽게 설치 및 관리할 수 있습니다.

1. Helm을 이용한 Knative Serving 배포

helm repo add knative https://knative.dev/charts
helm install knative-serving knative/serving --namespace knative-serving --create-namespace

2. Helm을 이용한 Knative Eventing 배포

helm install knative-eventing knative/eventing --namespace knative-eventing --create-namespace
  • Helm Chart를 사용하면 Knative의 버전 업그레이드 및 설정 변경이 용이함.

4️⃣ Pod, Service, Ingress 리소스와의 연동

Knative는 Kubernetes의 기본 네트워크 리소스와 통합됩니다.

1. Knative Service와 Kubernetes Service 연동

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: my-knative-service
spec:
  template:
    spec:
      containers:
        - image: gcr.io/my-project/my-app
  • 위 서비스는 Kubernetes의 ServicePod 리소스를 자동 생성.

2. Knative Ingress 설정

Knative는 기본적으로 Kubernetes Ingress를 사용하여 외부 트래픽을 관리합니다.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: knative-ingress
spec:
  rules:
    - host: my-app.example.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: my-knative-service
                port:
                  number: 80
  • Ingress를 통해 Knative Service에 대한 외부 트래픽을 관리 가능.

5️⃣ 클러스터 네트워크 설정 (Knative의 네트워크 처리 방식)

Knative는 내부적으로 Istio, Contour, Kourier 등의 네트워크 레이어를 활용하여 요청을 처리합니다.

1. Knative 네트워크 옵션

네트워크 프로바이더 설명
Istio 강력한 트래픽 관리 및 서비스 메시 기능 제공
Contour 경량 HTTP 프록시 기반의 네트워크 관리
Kourier 간단한 Knative 전용 Ingress 컨트롤러

2. Istio를 활용한 Knative 네트워크 설정

kubectl get svc -n istio-system
  • Knative가 Istio의 GatewayVirtualService 를 활용하여 네트워크를 관리하는지 확인 가능.

6️⃣ Knative Ingress, Service, Route 설정

Knative에서 Ingress, Service, Route는 트래픽을 관리하는 핵심 요소입니다.

1. Knative Route 설정

apiVersion: serving.knative.dev/v1
kind: Route
metadata:
  name: my-route
spec:
  traffic:
    - revisionName: my-app-v1
      percent: 70
    - revisionName: my-app-v2
      percent: 30
  • v1과 v2 리비전에 대해 트래픽을 70:30 비율로 분배.

2. Knative Service와 Route 연동

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: my-app
spec:
  template:
    metadata:
      annotations:
        autoscaling.knative.dev/minScale: "1"
    spec:
      containers:
        - image: gcr.io/my-project/my-app
  • RouteService에 연결되어 트래픽을 배포하며, 새로운 Revision 이 생성될 때 자동으로 업데이트됨.

7️⃣ 네임스페이스 분리 및 리소스 할당

Knative는 네임스페이스를 활용하여 여러 팀이 독립적인 서버리스 애플리케이션을 운영할 수 있도록 지원합니다.

1. Knative 네임스페이스 분리

kubectl create namespace team-a
kubectl create namespace team-b
  • 팀별로 개별 네임스페이스를 생성하여 서비스 격리 가능.

2. Knative 리소스 할당 (ResourceQuota 설정)

apiVersion: v1
kind: ResourceQuota
metadata:
  name: knative-quota
  namespace: team-a
spec:
  hard:
    pods: "10"
    requests.cpu: "2"
    requests.memory: "4Gi"
    limits.cpu: "4"
    limits.memory: "8Gi"
  • team-a 네임스페이스 내에서 Knative 서비스가 사용할 수 있는 리소스를 제한.

RSS Feed
마지막 수정일자