Did you know that you can create a Kubernetes cluster inside a Docker container? Read how kind
allows you and your team to practice with Kubernetes on your machine and to enhance automated testing capabilities for your software.
Kubernetes (often shortened in "k8s") is a very popular open source software that helps orchestrate containerised applications, in terms of deployment, scaling, and high availability - just to name a few.
When using it in production, you need to rely on a "Kubernetes as a service" platform available in the Public cloud or your organisation's infrastructure team with Kubernetes Administration expertise (like EnterpriseDB, the first Kubernetes Certified Service Provider in the PostgreSQL eco-system).
The good thing with containers is that they are designed to be immutable and therefore bring an important property along with them: infrastructure abstraction. This means that the same container image can run the same way in every Kubernetes cluster you want to use, including local installations.
In this article we describe how to use a very popular tool called Kind, "Kubernetes in Docker". Kind can be used primarily for two purposes:
- evaluation and local testing of Kubernetes workloads (how applications are called in that context)
- automated testing in your CI/CD pipelines (for example, EnterpriseDB systematically tests Cloud Native applications this way)
This article is limited to Kind and will not explain how to use interact with the Kubernetes cluster through kubectl
.
You can Install kind
on your environment by following the specific instructions for your system that you find in the Quickstart. You will also need to install the Kubernetes CLI application, called kubectl
. For example, on a Mac OS X where brew
is used to manage packages, you can install Kind and kubectl
with:
brew install kind kubectl
You can then familiarise with the kind
help page:
kind --help
As you can see, creating your default test cluster is very easy:
kind create cluster
You can also specify a name for a cluster (allowing you to create multiple ones at the same time):
kind create cluster --name mycluster
You can list the available Kubernetes clusters in Kind with:
kind get clusters
When you are done with testing a cluster, you can destroy it (with all the resources contained in it) with the delete cluster
command.
In order to remove the default cluster, you can type:
kind delete cluster
If you created the cluster with a name, you can delete it with:
kind delete cluster --name mycluster
By default, Kind creates a cluster with a single Kubernetes worker node. In case your tests require you to simulate multiple nodes, you can easily do it by creating a YAML file with the following content:
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: worker
- role: worker
- role: worker
Then, create the cluster as follows:
kind create cluster --config config.yaml --name mycluster
This will create a Kubernetes cluster with 3 workers.