Kubernetes is probably the most popular container-orchestration system, currently. It was originally developed and eventually open-sourced by Google. Kubernetes competes with the likes of Swarm, DC/OS and AWS’s ECS.

Kubernetes is a complex ecosystem of various software components that is actually quite non-trivial to put together. It can be a great way of orchestrating containers (e.g. Docker ones) in production, but if you need a compatible local environment for development, setting such thing up yourself, from scratch, can be a painful experience. Which is why the community has created Minikube

  • a Kubernetes distribution for easy local installation.

Minikube, by default, still requires a Docker-compatible VM. There are many ways of getting one, but at the time of this writing, the most straightforward way, on MacOS Sierra, is the installation of Docker for Mac. The good news is: you won’t need VirtualBox or some other kind of standalone VM environment to run the installation.

Note: some of the following instructions are specific to the component versions available at the time of writing. If you are reading this post later, please make sure to use commands that contain updated versions of the corresponding software.

To run through the commands you will need a working Docker for Mac and Homebrew. Make sure to install those, before executing the following commands.

Once you have Docker for Mac and Homebrew, you can install Minikube:

$ brew update
$ curl -LO https://storage.googleapis.com/minikube/releases/latest/docker-machine-driver-hyperkit \
&& chmod +x docker-machine-driver-hyperkit \
&& sudo mv docker-machine-driver-hyperkit /usr/local/bin/ \
&& sudo chown root:wheel /usr/local/bin/docker-machine-driver-hyperkit \
&& sudo chmod u+s /usr/local/bin/docker-machine-driver-hyperkit

$ curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-darwin-amd64 \
&& chmod +x minikube \
&& sudo mv minikube /usr/local/bin/

In addition to Minikube, you will also need Kubectl. You can install it one of the two ways. Either by running the command below (please don’t forget to update the version number to the current one at the time you are doing it):

$ curl -Lo kubectl https://storage.googleapis.com/kubernetes-release/release/v1.9.1/bin/darwin/amd64/kubectl \
&& chmod +x kubectl \
&& sudo mv kubectl /usr/local/bin/

or you can Install Google Cloud Tools SDK by following the instructions at the quickstart for your platform: https://cloud.google.com/sdk/docs/quickstarts (hint: do not download the sdk archive to a Downloads folder, you will need it going folder, home is a better location) and once you have that, letting gcloud tool install kubelet by running:

gcloud components install kubectl

Once you have everything installed, you can start Minikube by running:

$ minikube start --vm-driver=hyperkit
# or if you want to see logs:
$ minikube start --logtostderr --vm-driver=hyperkit

If you are working behind a proxy, start minikube as:

$ no_proxy="192.168.99.0/24,127.0.0.1,0.0.0" \
  minikube start --docker-env http_proxy=$http_proxy \
                 --docker-env https_proxy=$https_proxy \
                 --docker-env no_proxy=$no_proxy

where $http_proxy is full proxy URI, such as: http://proxy.example.com:8088

When Minikube launches it create a “minikube” context, and sets it to default in kubectl. If you switch to another context in kubectl and need to switch back to minikube context later, run: kubectl config use-context minikube.

Bash Completions

If you don’t already have bash completions installed, for the bas version included with Mac OS (Bash 3.2) run:

$ brew install bash-completion

or if you are running the upgraded bash 4.x version, run:

$ brew install bash-completion@2

and follow the instructions in the “caveats” section of brew’s output to add the appropriate bash completion path to your local .bash_profile or .bashrc.

To add kubectl completions to bash_completion:

$ kubectl completion bash > \
  $(brew --prefix)/etc/bash_completion.d/kubectl