Challenge
DifficultyHard
Learner activity No attempts yet

Deploy AI Model Serving on Kubernetes with KServe and Helm

Install KServe on a Kubernetes cluster using Helm to prepare the infrastructure for deploying AI and machine learning inference services.

Scenario

Your team is building an AI model serving platform on Kubernetes. KServe is the chosen framework — it provides a standardised, scalable way to deploy machine learning models as inference services on Kubernetes, supporting frameworks like TensorFlow, PyTorch, Triton, and large language models.

Before any model can be deployed, the KServe infrastructure must be set up on the cluster. cert-manager is already installed and running — it is a required dependency that KServe uses to manage its webhook TLS certificates.


Task

Set up KServe v0.18.0 on this cluster using Helm so the team can start deploying AI inference services. Install the required Helm charts from oci://ghcr.io/kserve/charts/ in order, grouped below into three stages: Install CRDs, Deploy Controller, and Register Runtimes.

Install CRDs
Deploy Controller
Register Runtimes

Registers the Custom Resource Definitions KServe needs — InferenceService, ServingRuntime, and the LLM inference service CRDs. Install both charts below into the kserve namespace before anything else. Use --create-namespace so Helm creates the namespace automatically.

KServe CRDs

FieldValue
Chartoci://ghcr.io/kserve/charts/kserve-crd
Release namekserve-crd
Namespacekserve
Versionv0.18.0

LLM Inference Service CRDs

FieldValue
Chartoci://ghcr.io/kserve/charts/kserve-llmisvc-crd
Release namekserve-llmisvc-crd
Namespacekserve
Versionv0.18.0

Deploys two controllers into the kserve namespace — the core KServe controller (kserve-controller-manager) and the LLM Inference Service controller (llmisvc-controller-manager). Both must be running before runtime configs can be installed.

This cluster has no Istio or Knative. Use --wait on both installs so Helm blocks until each controller is ready before you move on.

KServe Resources — installs kserve-controller-manager, RBAC, and webhooks

FieldValue
Chartoci://ghcr.io/kserve/charts/kserve-resources
Release namekserve-resources
Namespacekserve
Versionv0.18.0
Flag--wait

Required --set values:

FlagValue
kserve.controller.deploymentModeStandard
kserve.controller.gateway.disableIstioVirtualHosttrue
kserve.controller.gateway.disableIngressCreationtrue

KServe LLM Inference Service Resources — installs llmisvc-controller-manager, RBAC, and webhooks

FieldValue
Chartoci://ghcr.io/kserve/charts/kserve-llmisvc-resources
Release namekserve-llmisvc-resources
Namespacekserve
Versionv0.18.0
Flag--wait

Required --set values:

FlagValue
kserve.createSharedResourcesfalse

Installs pre-built ClusterServingRuntime configs for popular ML frameworks (Triton, TorchServe, SKLearn, vLLM, HuggingFace TGI, etc.). Install into the kserve namespace after both controllers are ready.

KServe Runtime Configs

FieldValue
Chartoci://ghcr.io/kserve/charts/kserve-runtime-configs
Release namekserve-runtime-configs
Namespacekserve
Versionv0.18.0

Required --set values:

FlagValue
kserve.servingruntime.enabledtrue
kserve.llmisvcConfigs.enabledtrue

After installation verify the stack is healthy:

helm list -A
kubectl get pods -n kserve
kubectl get clusterservingruntimes

Hint 1 — Install CRDs First Using OCI Charts

KServe charts live on an OCI registry — no helm repo add needed. Here is how an OCI-based Helm install looks in general:

helm install my-release oci://ghcr.io/some-org/charts/some-chart \
  --version v1.0.0 \
  --namespace my-namespace \
  --create-namespace

You need to install two CRD charts before anything else. Check the task for the correct release names, chart names, version, and namespace. The --create-namespace flag creates the namespace automatically so you don't need a separate kubectl create namespace step.

Documentation

Hint 2 — Deploy Both Controllers with the Right Flags

The --set flag overrides a value inside the chart's default configuration, and --wait tells Helm to block until all Deployments are Available before returning. For example:

helm install my-release oci://ghcr.io/some-org/charts/some-chart \
  --version v1.0.0 \
  --namespace my-namespace \
  --set some.feature.mode=Standard \
  --set some.feature.disabled=true \
  --wait

Install kserve-resources first — it needs three --set flags to disable Istio and Knative features. Once that controller is ready, install kserve-llmisvc-resources — it needs one --set flag. Check the task for the exact flag names and values for both charts.

Documentation

Hint 3 — Install Runtime Configs and Verify

The final chart (kserve-runtime-configs) goes into the kserve namespace. It needs two --set flags to enable both traditional ML runtimes and LLM runtimes — check the task for the flag names. The install pattern is the same as before:

helm install my-release oci://ghcr.io/some-org/charts/some-chart \
  --version v1.0.0 \
  --namespace my-namespace \
  --set some.config.enabled=true \
  --set some.other.enabled=true

Then verify the full stack:

helm list -A
kubectl get pods -n _____
kubectl get _____

Documentation


Test Cases

Problem
Solution
Start