Kubernetes/Kubernetes Basics

📌 Kubernetes에서 서버리스(Serverless) 운영: Knative & OpenFaaS 비교

ygtoken 2025. 3. 4. 12:48
728x90

 

1️⃣ Kubernetes에서 서버리스(Serverless)가 필요한 이유?

 

클라우드 환경에서 애플리케이션을 실행할 때 서버 인프라를 직접 관리하지 않고, 필요한 순간에만 실행되는 서버리스(Serverless) 모델이 점점 더 많이 활용되고 있습니다.

Kubernetes에서도 서버리스 아키텍처를 구현할 수 있으며, 대표적인 솔루션으로 KnativeOpenFaaS가 있습니다.

 

서버리스의 주요 장점

자동 확장(Auto-Scaling) → 요청이 많을 때만 자동으로 확장됨

비용 절감 → 사용한 만큼만 리소스를 소비하여 비용 절감 가능

운영 부담 감소 → 애플리케이션 코드에 집중 가능 (서버 관리 불필요)

 

이 글에서는 Kubernetes에서 Knative와 OpenFaaS를 활용하여 서버리스 애플리케이션을 운영하는 방법을 비교하고 설정하는 방법을 다룹니다. 🚀

 


 

2️⃣ Kubernetes에서 서버리스를 구현하는 두 가지 방식

 

📌 Kubernetes에서 서버리스(Serverless)를 구현하는 대표적인 방식은 KnativeOpenFaaS입니다.

 

비교 항목                     

  - Knative vs OpenFaaS

설치 복잡도 비교적 복잡 (여러 컴포넌트 필요) 간단한 Helm Chart 설치
자동 확장(Scale-to-Zero) 지원 (사용량 없을 때 Pod 0) 지원 (FAAS_SCALING 설정 필요)
트래픽 관리 Istio와 연동하여 트래픽 관리 기본적인 HTTP 트래픽 관리
FaaS (Function as a Service) 지원 기본적으로 지원하지 않음 함수(Function) 기반 실행 가능
사용 사례 마이크로서비스 자동 확장 단순한 함수 실행 환경 구축

Knative는 마이크로서비스를 자동 확장하고 트래픽을 효율적으로 제어하는 데 적합

OpenFaaS는 단순한 FaaS(Function as a Service) 환경을 구축하는 데 적합

 


 

3️⃣ Knative를 활용한 서버리스 애플리케이션 운영

 

📌 Knative는 Kubernetes에서 서버리스 애플리케이션을 실행할 수 있도록 도와주는 프레임워크입니다.

📌 자동 확장(Scale-to-Zero)과 트래픽 분배를 지원하며, Istio 또는 Kourier와 연동하여 Ingress를 처리할 수 있습니다.

 


 

✅ Step 1: Knative 설치 (Helm 사용)

 

📌 Helm을 사용하여 Knative를 설치합니다.

kubectl create namespace knative-serving
kubectl apply -f https://github.com/knative/serving/releases/latest/download/serving-crds.yaml
kubectl apply -f https://github.com/knative/serving/releases/latest/download/serving-core.yaml

 

📌 Kourier(간단한 Ingress 컨트롤러) 설치

kubectl apply -f https://github.com/knative/net-kourier/releases/latest/download/kourier.yaml
kubectl patch configmap/config-network \
  --namespace knative-serving \
  --type merge \
  --patch '{"data":{"ingress-class":"kourier.ingress.networking.knative.dev"}}'

 

📌 설치 확인

kubectl get pods -n knative-serving

Knative가 정상적으로 실행되는지 확인!

 


 

✅ Step 2: Knative Service 배포

 

📌 Knative Service를 배포하면 애플리케이션이 자동 확장되며, 트래픽이 없을 경우 Pod 개수가 0이 됩니다.

 

📌 knative-service.yaml

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: knative-app  # Knative에서 실행할 애플리케이션 이름
  namespace: default
spec:
  template:
    spec:
      containers:
      - image: gcr.io/knative-samples/helloworld-go  # 샘플 서버리스 애플리케이션 이미지
        env:
        - name: TARGET
          value: "Knative World"

 

📌 적용 명령어

kubectl apply -f knative-service.yaml

 

📌 Knative 서비스 확인

kubectl get ksvc

Knative를 활용하여 서버리스 애플리케이션을 실행할 수 있음! 🚀

 


 

4️⃣ OpenFaaS를 활용한 서버리스 함수(Function) 실행

 

📌 OpenFaaS는 Kubernetes에서 Function as a Service(FaaS) 환경을 제공하는 오픈소스 도구입니다.

📌 기본적으로 간단한 HTTP 요청을 기반으로 함수를 실행하는 서버리스 환경을 제공합니다.

 


 

✅ Step 1: OpenFaaS 설치 (Helm 사용)

 

📌 Helm을 사용하여 OpenFaaS를 설치합니다.

helm repo add openfaas https://openfaas.github.io/faas-netes/
helm repo update
helm install openfaas openfaas/openfaas --namespace openfaas --create-namespace --set gateway.basicAuth=false

 

📌 설치 확인

kubectl get pods -n openfaas

OpenFaaS가 정상적으로 실행되는지 확인!

 


 

✅ Step 2: OpenFaaS 함수(Function) 배포

 

📌 OpenFaaS에서는 간단한 Python 함수를 배포할 수 있습니다.

 

📌 hello-python.yaml

apiVersion: openfaas.com/v1
kind: Function
metadata:
  name: hello-python
  namespace: openfaas
spec:
  image: openfaas/hello-python  # OpenFaaS에서 제공하는 기본 Python 함수 이미지
  environment:
    write_debug: "true"
  labels:
    com.openfaas.scale.min: "1"  # 최소 1개의 Pod 유지
    com.openfaas.scale.max: "10"  # 최대 10개의 Pod까지 확장 가능

 

📌 적용 명령어

kubectl apply -f hello-python.yaml

 

📌 배포된 함수 확인

kubectl get functions -n openfaas

OpenFaaS를 활용하여 서버리스 함수(Function)를 실행할 수 있음! 🚀

 


 

5️⃣ Knative vs. OpenFaaS 비교

 

비교 항목

- Knative vs OpenFaaS

설치 복잡도 복잡함 (여러 컴포넌트 필요) 간단함 (Helm Chart 설치)
자동 확장 (Scale-to-Zero) 지원 지원
트래픽 관리 Istio 또는 Kourier 사용 기본 HTTP 트래픽 관리
FaaS (Function as a Service) 지원 기본적으로 없음 (별도 설정 필요) 기본적으로 지원
사용 사례 마이크로서비스 자동 확장 간단한 함수 실행 환경

Knative는 마이크로서비스 자동 확장 및 트래픽 관리를 원할 때 적합

OpenFaaS는 간단한 함수(Function) 실행 환경을 구축할 때 적합

 


 

📌 결론: Kubernetes에서 서버리스 환경 구축 요약

 

Knative를 활용하면 마이크로서비스를 서버리스 방식으로 자동 확장 가능

OpenFaaS를 활용하면 간단한 함수 기반 서버리스 환경을 Kubernetes에서 실행 가능

트래픽 패턴과 요구 사항에 맞춰 적절한 서버리스 솔루션을 선택해야 함

 

🔥 Kubernetes에서 서버리스를 도입하면 더욱 효율적으로 애플리케이션을 운영할 수 있습니다! 🚀

 

728x90