content/manuals/desktop/use-desktop/kubernetes.md
Docker Desktop includes a standalone Kubernetes server and client, as well as Docker CLI integration, enabling local Kubernetes development and testing directly on your machine.
The Kubernetes server runs as a single or multi-node cluster, within Docker containers. This lightweight setup helps you explore Kubernetes features, test workloads, and work with container orchestration in parallel with other Docker features.
With Docker Desktop version 4.51 and later, you can manage Kubernetes directly from the Kubernetes view in the Docker Desktop Dashboard.
This sets up the images required to run the Kubernetes server as containers, and installs the kubectl command-line tool on your system at /usr/local/bin/kubectl (Mac) or C:\Program Files\Docker\Docker\resources\bin\kubectl.exe (Windows). If you installed kubectl using Homebrew, or by some other method, and experience conflicts, remove /usr/local/bin/kubectl.
[!NOTE]
Docker Desktop for Linux does not include
kubectlby default. You can install it separately by following the Kubernetes installation guide. Ensure thekubectlbinary is installed at/usr/local/bin/kubectl.
The following actions are also triggered in the Docker Desktop backend and VM:
When Kubernetes is enabled, its status is displayed in the Docker Desktop Dashboard footer and the Docker menu.
You can check which version of Kubernetes you're on with:
$ kubectl version
Docker Desktop Kubernetes can be provisioned with either the kubeadm or kind
provisioners.
kubeadm is the older provisioner. It supports a single-node cluster, you can't select the kubernetes
version, it's slower to provision than kind, and it's not supported by Enhanced Container Isolation (ECI),
meaning that if ECI is enabled the cluster works but it's not protected by ECI.
kind is the newer provisioner. It supports multi-node clusters (for
a more realistic Kubernetes setup), you can choose the Kubernetes version, it's
faster to provision than kubeadm, and it's supported by ECI - when ECI is
enabled, the Kubernetes cluster runs in unprivileged Docker containers, thus
making it more secure.
| Feature | kubeadm | kind |
|---|---|---|
| Multi-node cluster support | No | Yes |
| Kubernetes version selector | No | Yes |
| Speed to provision | ~1 min | ~30 seconds |
| Supported by ECI | No | Yes |
| Works with containerd image store | Yes | Yes |
| Works with Docker image store | Yes | No |
When a Kubernetes cluster is enabled, the Kubernetes view displays a live dashboard view showing:
Confirm that your cluster is running:
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
docker-desktop Ready control-plane 3h v1.29.1
If kubectl is pointing to another environment, switch to the Docker Desktop context:
$ kubectl config use-context docker-desktop
[!TIP]
If no contexts appear, try:
- Running the command in the Command Prompt or PowerShell.
- Setting the
KUBECONFIGenvironment variable to point to your.kube/configfile.
For more information about kubectl, see the
kubectl documentation.
When Kubernetes is enabled:
/usr/local/bin/kubectl command.Kubernetes clusters are not automatically upgraded with Docker Desktop updates. To upgrade the cluster, you must manually select Reset cluster in the Kubernetes settings.
Docker Desktop uses containers to run the Kubernetes control plane. By default, Docker Desktop pulls the associated container images from Docker Hub. The images pulled depend on the cluster provisioning mode.
For example, in kind mode it requires the following images:
docker.io/kindest/node:<tag>
docker.io/envoyproxy/envoy:<tag>
docker.io/docker/desktop-cloud-provider-kind:<tag>
docker.io/docker/desktop-containerd-registry-mirror:<tag>
In kubeadm mode it requires the following images:
docker.io/docker/desktop-kubernetes:<tag>
docker.io/docker/desktop-storage-provisioner:<tag>
docker.io/docker/desktop-vpnkit-controller:<tag>
docker.io/docker/desktop-kubernetes-etcd:<tag>
docker.io/docker/desktop-kubernetes-coredns:<tag>
docker.io/docker/desktop-kubernetes-pause:<tag>
docker.io/docker/desktop-kubernetes-apiserver:<tag>
docker.io/docker/desktop-kubernetes-controller-manager:<tag>
docker.io/docker/desktop-kubernetes-scheduler:<tag>
docker.io/docker/desktop-kubernetes-proxy:<tag>
The image tags are automatically selected by Docker Desktop based on several factors, including the version of Kubernetes being used. The tags vary for each image and may change between Docker Desktop releases. To stay informed, monitor the Docker Desktop release notes.
[!NOTE]
In Docker Desktop versions 4.44 or later you can run
docker desktop kubernetes images listto list Kubernetes images used by the currently installed version of Docker Desktop. For more information, see the Docker Desktop CLI.
To accommodate scenarios where access to Docker Hub is not allowed, admins can configure Docker Desktop to pull the above listed images from a different registry (e.g., a mirror) using the KubernetesImagesRepository setting as follows.
An image name can be broken into [registry[:port]/][namespace/]repository[:tag] components.
The KubernetesImagesRepository setting allows users to override the [registry[:port]/][namespace]
portion of the image's name.
For example, if Docker Desktop Kubernetes is configured in kind mode and
KubernetesImagesRepository is set to my-registry:5000/kind-images, then
Docker Desktop will pull the images from:
my-registry:5000/kind-images/node:<tag>
my-registry:5000/kind-images/envoy:<tag>
my-registry:5000/kind-images/desktop-cloud-provider-kind:<tag>
my-registry:5000/kind-images/desktop-containerd-registry-mirror:<tag>
These images should be cloned/mirrored from their respective images in Docker Hub. The tags must also match what Docker Desktop expects.
The recommended approach to set this up is the following:
kubeadm or kind.docker desktop kubernetes images list to list the image tags that will be pulled by the current Docker Desktop installationdocker ps to view the container images used by Docker Desktop for the Kubernetes control planeKubernetesImagesRepository setting to point to your custom registry.docker ps command.[!NOTE]
The
KubernetesImagesRepositorysetting only applies to control plane images used by Docker Desktop to set up the Kubernetes cluster. It has no effect on other Kubernetes pods.
[!NOTE]
In Docker Desktop versions 4.43 or earlier, when using
KubernetesImagesRepositoryand Enhanced Container Isolation (ECI) is enabled, add the following images to the ECI Docker socket mount image list:
[imagesRepository]/desktop-cloud-provider-kind:[imagesRepository]/desktop-containerd-registry-mirror:These containers mount the Docker socket, so you must add the images to the ECI images list. If not, ECI will block the mount and Kubernetes won't start.
kubectl commands return errors, confirm the context is set to docker-desktop
$ kubectl config use-context docker-desktop