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)