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)