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
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 -
Source : @github
Additional Link
https://kind.sigs.k8s.io/
https://docs.projectcalico.org/v3.8/introduction/
https://github.com/ahmetb/kubernetes-network-policy-recipes