Skip to main content
This walkthrough demonstrates installing Kubeflow onto a Kubernetes cluster. It follows a pragmatic, repeatable set of steps so you can reproduce the install locally (using kind) or on a managed cluster (EKS, AKS, GKE). High-level steps
  • Prepare a Kubernetes cluster (local or cloud).
  • Install required CLI tools (kind, kustomize / kubectl).
  • Download the Kubeflow manifests and make any small customizations.
  • Build and apply the combined manifests to the cluster (kustomize + kubectl).
  • Verify the installation and wait for key components to be Ready.

Prerequisites

If you plan to pull images from private registries, ensure Docker is logged in on the machine where you run kubectl.

Install kind and create a cluster (example)

Install kind (example):
Create a cluster (simple example):
Example output (truncated):

Use the Kubeflow-provided kind config

Kubeflow manifests provide an example kind config that sets kubeadm API server args required by some Kubeflow components. Save the snippet below as kind.config.yaml and use it when creating your cluster.
For a multi-node cluster, add additional worker nodes:
Create the cluster using that config:
Verify nodes are Ready:

Kubeflow manifests repository

Choose either a stable release or the master branch. This demo uses the repository master branch to fetch the latest manifests.
A screenshot of the Kubeflow documentation page titled "Kubeflow Manifests" in dark mode, showing the left navigation menu and main content about installation and recommended stable releases. The top bar displays the Kubeflow logo and site navigation.
Clone the manifests repository and change into its directory:
The repository README explains the install flow and contains example kind configs and Kustomize overlays.
A dark-themed screenshot of a GitHub README page for the Kubeflow Manifests repository, showing the "Overview of the Kubeflow Platform" section with bullet points and a small directory-purpose table. The browser window and tabs are visible across the top.

Browsing the example kustomization

The example folder is the canonical entry point used by the official install. It pulls in many common components (cert-manager, Istio, oauth2-proxy, Dex, Knative, etc.) and application overlays. Open example/kustomization.yaml to inspect top-level resources and ordering options:
The example kustomization references a resources: list that includes cert-manager, Istio, OAuth2-proxy overlays, Dex, and many other components. Example snippet:
You can enable or disable components by editing the example kustomization. For most demos and tests, leaving the defaults is fine.

Create a default user profile (optional)

To create a Profile resource (which creates a user namespace and default resources), edit the profile-instance manifest under common/user-namespace and set a metadata.name and spec.owner.name. Example:
Adjust these values to match the username and naming you want. When applied, Kubeflow will create the Profile and corresponding namespace.

Prepare kubeconfig and registry credentials

If you created the cluster with kind and saved kubeconfig to a non-default path, export it:
If your cluster needs to pull images from a private registry, create a Docker registry secret (here named regcred) using your ~/.docker/config.json:

Install Kubeflow using kustomize + kubectl

The recommended pattern is to build the example kustomization and apply it to the cluster. Because CRDs, webhooks, and controllers can come up in different orders, it’s common to retry the apply until success. Example install loop (standalone kustomize):
If you prefer kubectl’s built-in kustomize:
Notes
  • --server-side --force-conflicts uses server-side apply to reduce client-side merge conflicts and improve behavior when resources already exist.
  • The loop tolerates transient ordering errors during the install and retries until all resources apply successfully.

Wait for key components

Some components take time to become Ready. Example: wait for cert-manager pods to become Ready:
Monitor overall progress:
You may also watch specific namespaces for pods to transition to Ready.

Example of applied resources

When the build/apply loop finishes successfully you’ll see many server-side applied resources (CRDs, validating webhooks, and application CRs). Example (truncated):

Post-installation checks and next steps

  • Verify that key components are Ready (Central Dashboard, Pipelines, Notebook Controller, KServe, Katib).
  • Confirm the Profile namespace was created if you configured a Profile.
  • Check logs for any failing pods and iterate on overlays or settings as needed.
  • Explore the installed Kubeflow applications from the dashboard or CLI.
Customize the example kustomization to enable or disable components (Istio overlays, OAuth2-proxy options, KServe, Katib, etc.) depending on your environment. For cloud-specific clusters (GKE, EKS), pick the recommended overlays in the manifests repository.
This completes the installation walkthrough. Explore the manifests, overlays, and installed resources to understand how the Kubeflow platform composes and deploys on your cluster. For more details and troubleshooting, refer to the Kubeflow Manifests repository and the Kubeflow docs.

Watch Video