Kind is an installation tool used to deploy kubernetes cluster in containers.
We all need a simple, easy method to deploy kubernetes for testing and practice.
From the Documentation
kind is a tool for running local Kubernetes clusters using Docker container “nodes”.
kind was primarily designed for testing Kubernetes itself, but may be used for local development or CI.
List of Contents
- Installing Docker
- Getting kind binary
- Getting kubectl binary
- Deploying a single node cluster
- Deploying Multi node Cluster
- Deploying a Multi Master
- Accessing Kubernetes Cluster
- Deploying and Accessing multiple clusters
Let's Get Started!
For using kind you need to install docker
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo systemctl start docker && sudo systemctl enable docker
sudo usermod -aG docker $USER
sudo systemctl restart docker
If you are facing an issue while installing docker please refer Install Docker
Log out and Log in once and fire the command docker ps
if the command is executed successfully docker is ready for use
Create a Directory
mkdir $HOME/bin/
Add the following parameters to .bashrc at your home directory
export PATH=$PATH:$HOME/bin/
Getting the kind binary
curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.10.0/kind-linux-amd64
chmod +x kind
mv kind $HOME/bin/kind
Log out and Log in once and fire the command below this should provide you with the current version of the command.
kind --version
Getting kubectl binary
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
chmod +x kubectl
mv kubectl $HOME/bin/kubectl
Log out and Log in once and fire the command below this should provide you with the current version of the command.
kubectl version
Creating cluster using kind:
Deploying a single node cluster
<your_cluster_name> replace with a name you wish
kind create cluster --name <your_cluster_name>
If you want to access your cluster Refer to Accessing Kubernetes Cluster below
Deploying a multi node cluster
kind can be provided with a config file where the number nodes and their roles can be mentioned.
config.yaml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: worker
- role: worker
- role: worker
Fire the command below for deploying the cluster
kind create cluster --config config.yaml --name <your_cluster_name>
A Multimaster kubernetes cluster can be deployed by editing the config.yaml file
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: control-plane
- role: worker
- role: worker
- role: worker
Fire the command below for the deployment of Multimaster Kubernetes cluster
kind create cluster --config config.yaml --name <your_cluster_name>
Accessing The Kubernetes cluster
The file $HOME/.kube/config
is created by default,do
kubectl get nodes
Deploying and accessing multiple clusters
You can specify different names for different clusters
kind create cluster --config config.yaml --name <your_cluster_name>
This clusters can be managed by using the configuration file that can be generated by using the command
<Cluster_config_filename> replace this parameter with a filename
kind get clusters \\ This will list all the clusters that are running
kind get kubeconfig --name <your_cluster_name> >> <Cluster_config_filename>
export KUBECONFIG=<Cluster_config_filename>
Now your kubectl is configured to use the specific cluster
There are various configurations that can be done while deploying a kubernetes cluster
A sample configuration file is given below
you can use these configuration to your advantage
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
featureGates:
# any feature gate can be enabled here with "Name": true
# or disabled here with "Name": false
"CSIMigration": true
runtimeConfig:
"api/alpha": "false"
networking:
# network configuration for nodes
ipFamily: ipv6
apiServerAddress: "127.0.0.1"
apiServerPort: 6443
podSubnet: "10.244.0.0/16"
serviceSubnet: "10.96.0.0/12"
disableDefaultCNI: true
kubeProxyMode: "ipvs"
nodes:
# one node hosting a control plane
- role: control-plane
kubeadmConfigPatches:
- |
kind: InitConfiguration
nodeRegistration:
kubeletExtraArgs:
node-labels: "my-label=true"
- role: worker
extraMounts:
# with the extraMounts parameter one can attach persistent volume to the node
- hostPath: /path/to/my/files/
containerPath: /files
extraPortMappings:
- containerPort: 80
hostPort: 80
# optional: set the bind address on the host
# 0.0.0.0 is the current default
listenAddress: "127.0.0.1"
# optional: set the protocol to one of TCP, UDP, SCTP.
# TCP is the default
protocol: TCP
- role: worker
kubeadmConfigPatches:
- |
kind: JoinConfiguration
nodeRegistration:
kubeletExtraArgs:
node-labels: "my-label2=true"
- role: worker
image: kindest/node:v1.16.4@sha256:b91a2c2317a000f3a783489dfb755064177dbc3a0b2f4147d50f04825d016f55
The deployment gets ready in much easier and faster way you can save the docker image and copy it to your local machine for further use.
Top comments (0)