Local Kubernetes Lab

Kubernetes on Laptop

Beberapa tahun belakangan ini mungkin di kalangan orang IT baik dari sisi Dev maupun Ops sering mendengar tentang hype nya kubernetes. Kubernetes merupakan sebuah orchestration tool untuk manage docker container. Ada banyak tool untuk melakukan developing, testing dan learning Kubernetes secara lokal di laptop seperti minikube, Microk8s dari ubuntu dan Kind dari SIGS (Special Interests Groups) dari komunitas open sources Kubernetes.

Kubernetes in Docker

Kind mempunyai kepanjangan “Kubernetes in Docker” dimana di setiap node yang berjalan secara lokal dalam bentuk kontainer docker. Berikut merupakan proses instalasi Kind

$ wget -O /usr/local/bin/kind https://github.com/kubernetes-sigs/kind/releases/download/v0.5.1/kind-linux-amd64 && chmod +x /usr/local/bin/kind

Secara default kind menggunakan kindlet sebagai CNI (Container Network Interface) namun dalam tulisan ini, akan menggunakan Calico sebagai CNI dengan alasan untuk bermain NetworkPolicy di dalam Kubernetes 😄
Untuk default node nya sendiri, Kind hanya running di 1 node. Dibawah ini merupakan contoh kustom Kind untuk 3 node yang terdiri dari 1 master dan 2 untuk worker.

## config-kind.yaml

kind: Cluster
apiVersion: kind.sigs.k8s.io/v1alpha3
networking:
  disableDefaultCNI: true
  serviceSubnet: "10.96.0.1/12"
  podSubnet: "192.168.0.0/16"
nodes:
- role: control-plane
- role: worker
- role: worker
  extraPortMappings:
  - containerPort: 80
    hostPort: 80
    listenAddress: "127.0.0.1"

Kemudian buat Kind Cluster dengan perintah berikut

$ kind create cluster --config config-kind.yaml

kind Cluster Kubernetes in Docker sudah ready, namun sebelumnya disable net.ipv4.conf.all.rp_filter pada setiap nodenya sebagai syarat menjalankan Calico sebagai Container Network Interface.

$ kind get nodes | xargs -n1 -I {} docker exec {} sysctl -w net.ipv4.conf.all.rp_filter=0

Lakukan export kubeconfig agar Kind bisa terhubung dengan perintah kubectl

$ export KUBECONFIG="$(kind get kubeconfig-path --name="kind")"

Step terakhir adalah instalasi Calico

$ curl https://docs.projectcalico.org/v3.8/manifests/calico.yaml | kubectl apply -f -

kind
Source : @github

https://kind.sigs.k8s.io/
https://docs.projectcalico.org/v3.8/introduction/
https://github.com/ahmetb/kubernetes-network-policy-recipes