Search code examples
dockerkubernetesdocker-desktop

Specifying the Kubernetes version in Docker Desktop for Mac


It looks like Docker Desktop for Mac is using a 1.22+ version of Kubernetes which introduces a number of breaking changes specifically to the ingress-nginx controller apiVersion. This is causing issues with our local development cluster.

There are couple options:

  1. Rolling back the Kubernetes version to something <1.22 in the development cluster.
  2. Updating ingress-nginx and the development configuration to use >=1.22.

I'm trying to go with route 1. and downgrade the version to match our production cluster: v1.20.7 primarily because 1.22+ isn't available in Azure yet it looks like. It makes sense to me to have the development and production versions match.

That is my question: How do you change the version of Kuberentes that docker-desktop uses?

If that can't be done, then I guess I'll just have to go with 2.


What've tried so far is simply following the kubectl documentation:

curl -LO "https://dl.k8s.io/release/v1.20.7/bin/darwin/arm64/kubectl"

chmod +x ./kubectl

sudo mv ./kubectl /usr/local/bin/kubectl

kubectl version --client
Client Version: version.Info{Major:"1", Minor:"23", GitVersion:"v1.23.0", GitCommit:"ab69524f795c42094a6630298ff53f3c3ebab7f4", GitTreeState:"clean", BuildDate:"2021-12-07T18:08:39Z", GoVersion:"go1.17.3", Compiler:"gc", Platform:"darwin/arm64"}

Skeptical it was going to work and sure enough it doesn't.


Edit:

Option 3.: use something like minikube, microk8s, k3d, etc.

It is looking like the only way to downgrade change the kubectl version is to downgrade Docker Desktop for Mac.


Solution

  • As best as I could determine, there is not a way to do this. (Please correct me if I'm wrong).

    The options appear to just be:

    1. Downgrade Docker Desktop for Mac to a version that has the version of Kubernetes that you want. Can find previous versions here: https://docs.docker.com/desktop/mac/release-notes/
    2. Use something like minikube, mikrok8s, k3d, etc. that gives you better control over the Kubernetes version being used.

    I ended up just dong 1. as opposed to adding another tool to our development environment, but 2. feels like a much better option.