1️⃣ Kubernetes에서 서버리스(Serverless)가 필요한 이유?
클라우드 환경에서 애플리케이션을 실행할 때 서버 인프라를 직접 관리하지 않고, 필요한 순간에만 실행되는 서버리스(Serverless) 모델이 점점 더 많이 활용되고 있습니다.
Kubernetes에서도 서버리스 아키텍처를 구현할 수 있으며, 대표적인 솔루션으로 Knative와 OpenFaaS가 있습니다.
✅ 서버리스의 주요 장점
✔ 자동 확장(Auto-Scaling) → 요청이 많을 때만 자동으로 확장됨
✔ 비용 절감 → 사용한 만큼만 리소스를 소비하여 비용 절감 가능
✔ 운영 부담 감소 → 애플리케이션 코드에 집중 가능 (서버 관리 불필요)
이 글에서는 Kubernetes에서 Knative와 OpenFaaS를 활용하여 서버리스 애플리케이션을 운영하는 방법을 비교하고 설정하는 방법을 다룹니다. 🚀
2️⃣ Kubernetes에서 서버리스를 구현하는 두 가지 방식
📌 Kubernetes에서 서버리스(Serverless)를 구현하는 대표적인 방식은 Knative와 OpenFaaS입니다.
비교 항목
- 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에서 서버리스를 도입하면 더욱 효율적으로 애플리케이션을 운영할 수 있습니다! 🚀
'Kubernetes > Kubernetes Basics' 카테고리의 다른 글
쿠버네티스(Kubernetes) 아키텍처 (0) | 2025.03.18 |
---|---|
📌 Kubernetes 클러스터 성능 튜닝: 리소스 최적화 및 네트워크 개선 (0) | 2025.03.04 |
📌 Kubernetes에서 API Gateway 운영: Istio vs. Kong vs. Nginx (0) | 2025.03.04 |
📌 Kubernetes에서 Observability 구축: OpenTelemetry, Jaeger 사용법 (0) | 2025.03.04 |
📌 Kubernetes CI/CD 파이프라인 최적화 (GitHub Actions, ArgoCD 심화) (0) | 2025.03.04 |