Install Kubernetes CLI
kubernetes cli is a command line client required to interact with a kubernetes cluster. You can download, install it using:
brew install kubectl
Install MiniKube
MiniKube can create a single-node Kubernetes cluster locally using a virtual machine created with VirtualBox.
This is useful for developing and testing locally with Kubernetes.
brew cask install minikube
Install Virtual Machine
To set up a kubernetes cluster locally, Minikube will need a hypervisor (virtual machine). There are many options for each platform.
Virtualbox
The easiest to setup and get working. Run the following command to download and install VirtualBox.
brew cask install virtualbox
Virtualbox is default driver for Minikube. So to start a kubernetes cluster, just run:
minikube start
Above command will automatically download virtual machine images and create a virtual machine.
Xhyve
If you do not need VirtualBox for other purposes, installing it for kubernetes localhost development could be overkill.
There is a minimalistic alternative. You can install it using:
brew install xhyve docker-machine-driver-xhyve
With, xhyve, you need to start minikube differently:
minikube start --vm-driver=xhyve
Hyperkit
MacOS has native hypervisor support. Unfortunately, its a bit tricky to get working. At the time of writing, we couldn’t get DNS issues resolved.
Assuming you have Go language installed correctly, you need to run following to build docker-machine driver plugin for hyperkit. It’s required later by Minikube but pre-compiled binaries were not found.
Following commands may take from few minutes to even an hour depending on your machine power and Internet speed.
git clone https://github.com/kubernetes/minikube $GOPATH/src/k8s.io/minikube
cd $GOPATH/src/k8s.io/minikube
make out/docker-machine-driver-hyperkit
cp out/docker-machine-driver-hyperkit $GOPATH/bin/docker-machine-driver-hyperkit
sudo chown root:wheel $GOPATH/bin/docker-machine-driver-hyperkit
sudo chmod u+s $GOPATH/bin/docker-machine-driver-hyperkit
With, hyperkit, you need to start minikube differently:
minikube start --vm-driver=hyperkit
Open kubernetes Dashboard (WebUI)
No matter how you start minikube, as in using a driver, you can run minikube dashboard
command to open kubernetes dashboard web interface.
It’s advisable to open kubernetes dashboard at this point to verify you have followed along correctly.
Install Helm
Helm is package manager for kubernetes. In kubernetes, application of different types can be packed and distributed using helm. One example is WordPress.
To install helm, run following:
brew install kubernetes-helm
Helm has two parts: a client (helm
) and a server (tiller
).
The server will start in current kubernetes cluster. You can verify if current kubernetes context is minikube by running kubectl config current-context
Next, you can start helm by running command
helm init
Install WordPress using Helm
We will install official WordPress chart using following command:
helm install --set serviceType=NodePort --name wp-k8s stable/wordpress
Above will setup a fresh WordPress site up and running.
To find out URL of WordPress site, run following three commands as it is.
export NODE_PORT=$(kubectl get --namespace wordpress -o jsonpath="{.spec.ports[0].nodePort}" services wp-k8s-wordpress)
export NODE_IP=$(kubectl get nodes --namespace wordpress -o jsonpath="{.items[0].status.addresses[0].address}")
echo http://$NODE_IP:$NODE_PORT/admin
The default WordPress admin username is user
.
For password, please run following command:
echo Password: $(kubectl get secret --namespace wordpress wp-k8s-wordpress -o jsonpath="{.data.wordpress-password}" | base64 --decode)
Tets if you can log into the WordPress site and use it by publishing some posts and uploading some media.
Other Helm Commands
Run helm help
to see all commands. Below are one which you need frequently.
- List releases –
helm list
- Detele a release –
helm delete my-release-name
Helm Concepts
Following is copied with some changes from https://docs.helm.sh/using_helm/#three-big-concepts
- A Chart is a Helm package. It contains all of the resource definitions necessary to run an application, tool, or service inside of a Kubernetes cluster. Think of it like the Kubernetes equivalent of a Homebrew formula, an Apt dpkg, or a Yum RPM file.
- A Repository is a place where charts can be collected and shared. It’s like Composer’s packagist.org or the Fedora Package Database, but for Kubernetes packages.
- A Release is an instance of a chart running in a Kubernetes cluster. One chart can often be installed many times into the same cluster. And each time it is installed, a new release is created. Consider a MySQL chart. If you want two databases running in your cluster, you can install that chart twice. Each one will have its own release, which will, in turn, have its own release name. A release is not a chart version.
References
- DeliciousBrains article
- Kubernetes Docs – https://kubernetes.io/docs/
- MiniKube – https://github.com/kubernetes/minikube
- Helm Docs – https://docs.helm.sh/