Local Kubermatic Kubernetes Platform (KKP) Installation

Local KKP installation is not intended for production setups.

This page will guide you through using the KKP installer local command kubermatic-installer local. This command simplifies and automates the installation of KKP using kind and a preconfigured KubeVirt seed. The command is intended only for evaluation and local development purposes. For production KKP installation use the CE installation guide or EE installation guide.

Pre-Installation Requirements

  • Operating System: Currently, only Linux is supported.
  • Disk Space: A minimum of 10Gi is recommended.
  • RAM: At least 8Gi of RAM is needed; 16Gi is recommended for more than a single KubeVirt user cluster.
  • kind (version 0.17 or higher): Please refer to the kind documentation for installation instructions.

The kubermatic-installer local kind is currently considered experimental. It will install KubeVirt and CDI inside of the kind cluster and for every user cluster download VM image from Kubermatic hosted registry. KubeVirt nodes may require significant portion of your available CPU and RAM, in addition to 600Mi of disk space per VM image.

Installation Procedure

Follow these steps to use the KKP installer local command:

1. Download the installer. This is the only manual step; there’s no need to prepare any configuration since the installer should automatically configure KKP.

If you already have an active KKP license, you can use the enterprise edition installer. Otherwise, use the community edition installer.


Download the installer:

VERSION=$(curl -w '%{url_effective}' -I -L -s -S https://github.com/kubermatic/kubermatic/releases/latest -o /dev/null | sed -e 's|.*/v||')
wget https://github.com/kubermatic/kubermatic/releases/download/v${VERSION}/kubermatic-${KUBERMATIC_EDITION}-v${VERSION}-linux-amd64.tar.gz
tar -xzvf kubermatic-${KUBERMATIC_EDITION}-v${VERSION}-linux-amd64.tar.gz
# Determine your macOS processor architecture type
# Replace 'amd64' with 'arm64' if using an Apple Silicon (M1) Mac.
export ARCH=amd64
# For latest version:
VERSION=$(curl -w '%{url_effective}' -I -L -s -S https://github.com/kubermatic/kubermatic/releases/latest -o /dev/null | sed -e 's|.*/v||')
# For specific version set it explicitly:
# VERSION=2.21.x
wget "https://github.com/kubermatic/kubermatic/releases/download/v${VERSION}/kubermatic-${KUBERMATIC_EDITION}-v${VERSION}-darwin-${ARCH}.tar.gz"
tar -xzvf "kubermatic-${KUBERMATIC_EDITION}-v${VERSION}-darwin-${ARCH}.tar.gz"

You can find more information regarding the download instructions in the CE installation guide or EE installation guide.

2. Provide the image pull secret (EE)

This step is only required if you are using the enterprise edition installer. Replace ${AUTH_TOKEN} with the Docker authentication JSON provided by Kubermatic and run the following command:

sed -i 's/<your-auth-token>/${AUTH_TOKEN}/g' examples/kubermatic.example.yaml

3. Run the local command.

./kubermatic-installer local kind

The KKP installation should take no longer than a couple of minutes. First, it creates a kind cluster named kind-kkp-cluster, exposes ports 443, 80 for the KKP API, KKP dashboard, dex, and ports 6443, 8088 for user cluster kube-apiserver via the tunneling expose strategy. You can examine the generated kind config, as well as the generated Kubermatic and Helm values configuration, under your working directory:


The installer also configures a single Seed and Presets for KubeVirt user clusters deployed in the same kind cluster. You can inspect the resources using kubectl:

kubectl get seed -nkubermatic kubermatic -o yaml
kubectl get preset -nkubermatic local -o yaml


After completing the installation, you should have a local, trimmed-down KKP setup suitable for development purposes. The installer will provide login instructions:

INFO[0408] KKP installed successfully, login at
INFO[0408]   Default login:    kubermatic@example.com
INFO[0408]   Default password: password

Teardown Procedure

When you’re finished experimenting with your local KKP setup, you can easily terminate it with a single command:

kind delete cluster --name kkp-cluster

Configuration and Customization

The KKP dashboard is exposed using nip.io, and certain browser plugins, such as various ad blockers, may prevent access to nip.io. If this is the case, consider disabling these plugins.

By default, KubeVirt is configured to use hardware virtualization. If this is not possible for your setup, consider setting KubeVirt to use software emulation mode.

On Linux, KubeVirt uses the inode notify kernel subsystem inotify to watch for changes in certain files. Usually you shouldn’t need to configure this but in case you can observe the virt-handler failing with

kubectl log -nkubevirt ds/virt-handler
{"component":"virt-handler","level":"fatal","msg":"Failed to create an inotify watcher","pos":"cert-manager.go:105","reason":"too many open files","timestamp":"2023-06-22T09:58:24.284130Z"}

You may need to set the default values higher to ensure KubeVirt operates correctly. How to change this, along with reasonably elevated values, is described below but it’s recommended to inspect your system to figure out the correct inotify values depending on your needs and current setup.

sudo sysctl -w fs.inotify.max_user_watches=524288
sudo sysctl -w fs.inotify.max_user_instances=256