데이터 엔지니어 · AI 엔지니어를 위한 핵심 요약
📅 2026.03 작성Kubeflow는 Kubernetes 위에서 머신러닝 워크플로우를 실행, 조정, 확장하기 위한 오픈소스 플랫폼입니다. Google의 내부 도구인 TensorFlow Extended(TFX)에서 영감을 받아 탄생했으며, 현재는 CNCF(Cloud Native Computing Foundation)의 인큐베이팅 프로젝트로 성장했습니다.
DAG 기반의 ML 파이프라인을 구성하고, 각 단계를 컨테이너화하여 재현성과 확장성을 보장합니다.
분산 학습, 하이퍼파라미터 튜닝(Katib), 노트북 서버(Jupyter) 등 학습 전 과정을 지원합니다.
KFServing(현 KServe)을 통해 TensorFlow, PyTorch, XGBoost 등 다양한 모델을 서빙하고, 자동 스케일링이 가능합니다.
MLOps 환경에서 Kubeflow는 Kubernetes 네이티브라는 강력한 장점을 바탕으로, 기존 대안 대비 통합성과 확장성에서 우위를 가집니다.
| 비교 항목 | Kubeflow | Airflow + ML | MLflow |
|---|---|---|---|
| K8s 네이티브 | ✅ 완전 통합 | ❌ 별도 설정 | ❌ 제한적 |
| 파이프라인 DAG | ✅ Python SDK | ✅ Python | ❌ 없음 |
| 분산 학습 | ✅ 기본 지원 | ❌ 수동 구성 | ⚠️ 실험 추적만 |
| 모델 서빙 | ✅ KServe 통합 | ❌ 별도 도구 | ⚠️ 제한적 |
| 하이퍼파라미터 튜닝 | ✅ Katib | ❌ 없음 | ❌ 없음 |
💡 핵심 인사이트 — Kubeflow는 K8s 위에서 ML 전 생애주기를 하나의 플랫폼으로 통합합니다. 특히 파이프라인 + Katib + KServe 조합은 프로덕션 MLOps에 가장 적합한 스택 중 하나입니다.
Kubeflow의 주요 컴포넌트와 그 관계를 이해하는 것이 중요합니다. 아래 다이어그램은 기본 아키텍처를 시각화합니다.
로컬 개발 환경에서 Kind(Kubernetes in Docker)를 사용해 Kubeflow를 빠르게 체험해봅니다.
# Kind 클러스터 생성 (K8s v1.28)
kind create cluster --name kubeflow-cluster --config - <<EOF
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: worker
EOF
# Kubeflow 매니페스트 다운로드 (v1.8)
export KUBEFLOW_VERSION=v1.8.0
curl -L https://github.com/kubeflow/manifests/archive/refs/tags/${KUBEFLOW_VERSION}.tar.gz | tar xz
cd manifests-${KUBEFLOW_VERSION}
# 핵심 컴포넌트 설치 (시간 소요)
while ! kustomize build example | kubectl apply -f -; do
echo "Retrying to apply resources..."
sleep 10
done
Python SDK를 사용해 간단한 파이프라인을 작성하고 업로드합니다.
# pip install kfp==2.7.0
import kfp
from kfp import dsl
@dsl.component
def add(a: int, b: int) -> int:
return a + b
@dsl.pipeline(name='simple-add-pipeline')
def my_pipeline(a: int = 3, b: int = 7):
add_task = add(a=a, b=b)
# 파이프라인 컴파일 및 업로드
kfp.compiler.Compiler().compile(my_pipeline, 'simple_add.yaml')
client = kfp.Client(host='http://localhost:8080')
client.upload_pipeline('simple_add.yaml', pipeline_name='simple-add')
⚠️ 주의 — Kubeflow 대시보드에 접근하려면 kubectl port-forward svc/istio-ingressgateway -n istio-system 8080:80 명령어를 실행한 후 http://localhost:8080으로 접속하세요.
자주 사용되는 Kubeflow 설정 항목을 표로 정리했습니다.
| 설정 항목 | 설명 | 예시 값 |
|---|---|---|
pipeline_root |
파이프라인 아티팩트 저장 경로 (GCS, S3, MinIO) | gs://my-bucket/pipelines |
enable_caching |
파이프라인 단계 캐싱 활성화 | True |
namespace |
Kubeflow 컴포넌트가 설치될 네임스페이스 | kubeflow |
katib.trial.resources |
Katib 실험당 할당 리소스 | cpu: 2, memory: 4Gi |
kserve.defaultDeploymentMode |
KServe 기본 배포 모드 (Serverless / RawDeployment) | Serverless |
🔧 팁 — 프로덕션에서는 pipeline_root를 반드시 외부 스토리지(Cloud Storage, MinIO)로 설정하고, enable_caching을 활성화하여 재실행 시간을 절약하세요.
| 문제 | 원인 | 해결 방법 |
|---|---|---|
파이프라인 실행이 Pending 상태에서 멈춤 |
PVC(PersistentVolumeClaim)가 바인딩되지 않음 | kubectl get pvc -n kubeflow로 상태 확인 후, StorageClass 설정 점검 |
Katib 실험이 Failed로 종료 |
리소스 부족 또는 잘된 하이퍼파라미터 범위 | 실험 YAML의 spec.trial.resources를 늘리고, parameters 범위를 축소 |
KServe InferenceService가 NotReady |
모델 이미지가 없거나, Istio 게이트웨이 문제 | kubectl describe inferenceservice로 이벤트 확인, istio-ingressgateway 로그 점검 |
| Jupyter Notebook 커널이 계속 죽음 | 메모리 제한 초과 | Notebook Server 생성 시 requests.memory와 limits.memory를 적절히 설정 |
🚨 중요 — Kubeflow는 기본적으로 많은 리소스를 사용합니다. 최소 요구사항: CPU 8코어, 메모리 16GB, 디스크 50GB 이상. Kind 환경에서는 --cpus와 --memory 옵션을 조정하세요.