Serverless Model Serving di Kubernetes dengan KServe
KServe adalah platform native Kubernetes untuk menyajikan model machine learning, yang dibangun di sekitar satu custom resource bernama InferenceService. Jika Anda sudah menjalankan workload di Kubernetes dan menginginkan model serving yang bisa scale ke nol, mendukung canary rollout, serta mengekspos protokol inferensi standar, KServe menyatu dengan klaster yang sudah ada tanpa memaksa Anda mengadopsi stack terpisah. Tutorial ini membahas arsitektur, instalasi, dan pola sehari-hari yang akan Anda gunakan di produksi.
Apa Itu KServe
KServe (sebelumnya KFServing) adalah platform inferensi model CNCF yang berjalan di atas Kubernetes. Ide intinya adalah menyembunyikan boilerplate pembuatan deployment serving di balik sebuah CRD deklaratif. Alih-alih menulis Deployment, Service, HorizontalPodAutoscaler, dan rute ingress secara manual, Anda cukup mendeskripsikan satu InferenceService dan KServe yang merekonsiliasi sisanya.
Beberapa karakteristik membedakan KServe dari sekadar kontainer serving biasa:
- KServe memahami protokol. KServe menstandarkan endpoint prediksi di sekitar data plane V1 dan Open Inference Protocol (V2), sehingga klien yang ditulis sesuai spesifikasi tetap bekerja lintas framework model.
- KServe memahami runtime. Definisi
ServingRuntimebawaan mencakup framework umum (scikit-learn, XGBoost, PyTorch, TensorFlow, Triton, MLServer, Hugging Face) sehingga Anda cukup menunjuk ke artefak model. - KServe bersifat komposabel. Sebuah request dapat mengalir melalui transformer (pra/pascapemrosesan) lalu ke predictor, dan secara opsional disertai explainer.
Berbeda dengan framework serving serbaguna yang Anda host sendiri, KServe adalah sebuah control plane: ia bersandar pada primitif Kubernetes dan, dalam mode serverless, pada Knative serta Istio.
Hubungan dengan Knative dan Istio
KServe mendukung dua mode deployment, dan perbedaannya terletak pada dependensi yang Anda instal.
Mode serverless
Dalam mode serverless, KServe menggunakan Knative Serving untuk mengelola siklus hidup pod predictor dan Istio (atau layer jaringan lain yang didukung Knative) untuk ingress serta routing trafik. Knative memberikan dua hal yang sulit dibangun sendiri: autoscaling berbasis request hingga nol replika, dan pembagian trafik berbasis revision yang menjadi dasar canary rollout. Ini adalah mode default dan paling lengkap fiturnya.
Mode standar (raw)
Mode standar (kadang disebut deployment "raw Kubernetes") melewati Knative dan Istio. KServe membuat objek Deployment, Service, dan HorizontalPodAutoscaler Kubernetes biasa secara langsung. Anda kehilangan scale-to-zero dan canary berbasis revision, tetapi juga membuang dua dependensi besar. Mode standar cocok ketika tim platform tidak ingin ada Istio di klaster, atau ketika trafik yang stabil membuat scale-to-zero kurang bermanfaat.
Anda memilih mode per layanan dengan sebuah anotasi:
metadata:
annotations:
serving.kserve.io/deploymentMode: "RawDeployment" # atau "Serverless"
Prasyarat
Anda membutuhkan:
- Klaster Kubernetes, versi 1.28 atau lebih baru. Klaster lokal
kindatauminikubecocok untuk belajar; klaster terkelola (GKE, EKS, AKS) cocok untuk produksi. kubectlyang sudah dikonfigurasi untuk berkomunikasi dengan klaster tersebut.- Izin cluster-admin untuk menginstal CRD dan webhook.
- Untuk mode serverless, kapasitas cadangan yang cukup untuk pod control-plane Knative dan Istio (kira-kira 2 vCPU dan 4 GB kapasitas bebas di luar workload Anda).
Pastikan context Anda sebelum menginstal:
kubectl config current-context
kubectl get nodes
kubectl version --short
Instalasi
Skrip quickstart (pengembangan)
Untuk klaster pengembangan, skrip quickstart menginstal KServe bersama Knative, Istio, dan cert-manager dalam satu langkah. Selalu baca skrip sebelum menyalurkannya ke shell.
# Periksa terlebih dahulu
curl -sL "https://raw.githubusercontent.com/kserve/kserve/release-0.14/hack/quickinstall.sh" -o quickinstall.sh
less quickinstall.sh
Lalu jalankan
bash quickinstall.sh
Setelah selesai, verifikasi control plane dalam keadaan sehat: