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)