☸️ Kubeflow 실무 스터디 가이드

데이터 엔지니어 · AI 엔지니어를 위한 핵심 요약

#mlops #k8s #pipeline 📘 v1.8
📅 2026.03 작성

1. Kubeflow란?

Kubeflow는 Kubernetes 위에서 머신러닝 워크플로우를 실행, 조정, 확장하기 위한 오픈소스 플랫폼입니다. Google의 내부 도구인 TensorFlow Extended(TFX)에서 영감을 받아 탄생했으며, 현재는 CNCF(Cloud Native Computing Foundation)의 인큐베이팅 프로젝트로 성장했습니다.

3대 핵심 능력

🧩 파이프라인 오케스트레이션

DAG 기반의 ML 파이프라인을 구성하고, 각 단계를 컨테이너화하여 재현성과 확장성을 보장합니다.

📊 모델 학습 & 튜닝

분산 학습, 하이퍼파라미터 튜닝(Katib), 노트북 서버(Jupyter) 등 학습 전 과정을 지원합니다.

🚀 모델 배포 & 서빙

KFServing(현 KServe)을 통해 TensorFlow, PyTorch, XGBoost 등 다양한 모델을 서빙하고, 자동 스케일링이 가능합니다.

2. 왜 써야 하는가?

MLOps 환경에서 Kubeflow는 Kubernetes 네이티브라는 강력한 장점을 바탕으로, 기존 대안 대비 통합성과 확장성에서 우위를 가집니다.

비교 항목 Kubeflow Airflow + ML MLflow
K8s 네이티브 ✅ 완전 통합 ❌ 별도 설정 ❌ 제한적
파이프라인 DAG ✅ Python SDK ✅ Python ❌ 없음
분산 학습 ✅ 기본 지원 ❌ 수동 구성 ⚠️ 실험 추적만
모델 서빙 ✅ KServe 통합 ❌ 별도 도구 ⚠️ 제한적
하이퍼파라미터 튜닝 ✅ Katib ❌ 없음 ❌ 없음

💡 핵심 인사이트 — Kubeflow는 K8s 위에서 ML 전 생애주기를 하나의 플랫폼으로 통합합니다. 특히 파이프라인 + Katib + KServe 조합은 프로덕션 MLOps에 가장 적합한 스택 중 하나입니다.

3. 핵심 개념

Kubeflow의 주요 컴포넌트와 그 관계를 이해하는 것이 중요합니다. 아래 다이어그램은 기본 아키텍처를 시각화합니다.

┌─────────────────────────────────────────────────────┐ │ Kubeflow Platform │ │ ┌──────────┐ ┌──────────┐ ┌──────────────────┐ │ │ │ Jupyter │ │ Pipelines│ │ Katib (HP) │ │ │ │ Notebook │ │ (DAG) │ │ Hyperparameter│ │ │ └─────┬─────┘ └────┬─────┘ └────────┬─────────┘ │ │ │ │ │ │ │ ┌─────▼─────────────▼──────────────────▼─────────┐ │ │ │ Kubernetes Cluster │ │ │ │ ┌──────────┐ ┌──────────┐ ┌──────────────┐ │ │ │ │ │ Training │ │ Serving │ │ Metadata │ │ │ │ │ │ Operator │ │ (KServe) │ │ Store │ │ │ │ │ └──────────┘ └──────────┘ └──────────────┘ │ │ │ └─────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────┘

4. 퀵스타트

로컬 개발 환경에서 Kind(Kubernetes in Docker)를 사용해 Kubeflow를 빠르게 체험해봅니다.

4.1 설치

# 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

4.2 첫 번째 파이프라인 예제

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으로 접속하세요.

5. 핵심 설정 레퍼런스

자주 사용되는 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을 활성화하여 재실행 시간을 절약하세요.

6. 실무 팁 & 트러블슈팅

자주 겪는 문제와 해결책

문제 원인 해결 방법
파이프라인 실행이 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 옵션을 조정하세요.

7. 참고 자료