Minikube is great but is resource intensive. It has lots of customization options. One can choose between a VM and a Docker container for running a machine, choose from different container runtimes, and more.
Advantages
- Can run multiple versions of kubernetes
- Full featured kubernetes
- Supports local registries with no authorization overheads
- Lots of documentation and tutorials
Disadvantages
- Resource heavy (drains my battery in about an hour)
- One needs to dig-in to customize based on myriad of options
Kind runs kubernetes inside a docker container. Even the kubernetes team uses Kind to test kubernetes itself.
Pros
- Light weight clusters
- Super speedy cluster creation (< 1minute)
- Uses containerd instead of docker-shim
- Supports sufficient customization
Kind setup
Install kind cli
Configuration
The below configuration is used to create single master, two worker node cluster with ingress enabled. It also exposes ports 80
, 443
and 30000
(mapped transparently to localhost).
Note: 30000
can be used for NodePort (check the link below)
❯ cat ${HOME}/kind-config.yaml # three node (two workers) cluster config kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 nodes: - role: control-plane kubeadmConfigPatches: - | kind: InitConfiguration nodeRegistration: kubeletExtraArgs: node-labels: "ingress-ready=true" extraPortMappings: - containerPort: 30000 hostPort: 30000 listenAddress: "0.0.0.0" protocol: TCP - containerPort: 80 hostPort: 80 protocol: TCP - containerPort: 443 hostPort: 443 protocol: TCP - role: worker - role: worker
Create the cluster
❯ kind create cluster --name macbook --config ${HOME}/kind-config.yaml Creating cluster "macbook" ... ✓ Ensuring node image (kindest/node:v1.21.1) 🖼 ✓ Preparing nodes 📦 📦 📦 ✓ Writing configuration 📜 ✓ Starting control-plane 🕹️ ✓ Installing CNI 🔌 ✓ Installing StorageClass 💾 ✓ Joining worker nodes 🚜 Set kubectl context to "kind-macbook" You can now use your cluster with: kubectl cluster-info --context kind-macbook Thanks for using kind! 😊 ❯ kubectl get nodes NAME STATUS ROLES AGE VERSION macbook-control-plane Ready control-plane,master 11d v1.21.1 macbook-worker Ready <none> 11d v1.21.1 macbook-worker2 Ready <none> 11d v1.21.1
Create a pod
❯ kubectl run nginx --image=nginx --port=80 --restart=Never pod/nginx created ❯ kubectl get pods NAME READY STATUS RESTARTS AGE LABELS nginx 1/1 Running 0 63s run=nginx
Expose the pod as a service
❯ kubectl expose pod/nginx --port=80 service/nginx exposed ❯ kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 11d nginx ClusterIP 10.96.54.47 <none> 80/TCP 3s ❯ kubectl port-forward svc/nginx 8080:80 Forwarding from 127.0.0.1:8080 -> 80 Forwarding from [::1]:8080 -> 80 ...
Check the working
Open http://localhost:8080/. You should see the Welcome to nginx page.
Delete the cluster
❯ kind delete cluster --name=macbook Deleting cluster "macbook" ...
Try more things ...
Top comments (0)