Minikube - Developing and Testing locally with K8s

This post walks you through the first fundamental steps to get minikube up and running with homebrew.

Minikube - minikube is local Kubernetes, focusing on making it easy to learn and develop for Kubernetes.

TL;DR

start minikube

$ brew install hyperkit
$ brew install minikube
$ minikube start --driver=hyperkit --memory 12000 --cpus 6
😄  minikube v1.24.0 on Darwin 12.0.1
✨  Using the hyperkit driver based on user configuration
…
🌟  Enabled addons: storage-provisioner, default-storageclass
🏄  Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default

hyperkit - HyperKit is a toolkit for embedding hypervisor capabilities in your application.

Private Registries

You can find all you need in the official documentation: Using a Private Registry

It’s a fancy mix of the minikube add-on registry and the Linux command socat - Multipurpose relay (SOcket CAT):

Note: Enabling and configuring the add-on is only required once.

$ minikube addons enable registry
    ▪ Using image registry:2.7.1
    ▪ Using image gcr.io/google_containers/kube-registry-proxy:0.4
🔎  Verifying registry addon...
🌟  The 'registry' addon is enabled
minikube addons configure registry-creds

Reconfigure the specs

Found this helpful hint about how to re-config a cluster here: Kubernetes Minikube Tutorial for Beginners

minikube stop
minikube config set memory 2500
minikube config set cpus 2
minikube start

😏 No need to tear down the cluster if the initial sizing was wrong.

The End

Finally delete the cluster with:

$ minikube delete --all --purge
🔥  Deleting "minikube" in hyperkit ...
💀  Removed all traces of the "minikube" cluster.
🔥  Successfully deleted all profiles
💀  Successfully purged minikube directory located at - [/Users/devop/.minikube]

Bonus - The Docker Environment

Giving this combo a try was inspired by Replacing Docker Desktop with hyperkit + minikube.

If you are a regular docker user you can continue using it piggybacked with your minikube installation. Switch on docker-env to "Configure environment to use minikube’s Docker daemon"

docker-env eval $(minikube docker-env)

eval $(minikube docker-env) 
docker run --rm -it --network=host alpine ash -c "apk add socat && socat TCP-LISTEN:5000,reuseaddr,fork TCP:$(minikube ip):5000"

Docker commands using volume mounts like -v "$PWD":/workdir will not work out of the box due to minikube running in it's own environment.

Tip: Mount local working directory via minikube mount $(pwd)/workdir:/workdir


🙌 Photo by Crissy Jarvis on Unsplash