Kubernetes Cluster

Kubernetes Cluster terdiri dari sekumpulan mesin pekerja (worker), yang disebut node. Setiap cluster memiliki setidaknya satu node pekerja (worker node) dan master node sebagai control plane. Sebelumnya dijelaskan pada komponen utama Kubernetes. Setidaknya SysAdmin haru paham node jenis mana yang cocok dan dibutuhkan untuk perusahaan apakah ingin memakai single node atau multi node.

Proses Planning Pembuatan Cluster
Sebelum SysAdmin memikirkan bagaimana membuat sebuah atau sekumpulan node agar dapat memiliki sebuah cluster untuk kubernetes, secara umum ada beberapa opsi yang harus disesuaikan dengan budget dan kebutuhan. Cluster dapat dibuat di local machine, local data center atau bare metal environments, atau ada juga solusi khusus di berbagai cloud provider seperti yang disediakan oleh GCP (Google Cloud Platform).

Beberapa pertimbangannya adalah sebagai berikut


 * Mau mencoba Kubernetes di komputer (sekedar pengujian lab) atau ingin membuat sebuah cluster dengan High-Availability (HA), multi-node? Maka, pilihlah distro yang sesuai dengan kebutuhan
 * Apabila merencanakan cluster dengan high-availability, pelajari bagaimana cara mengonfigurasi cluster pada multiple zone.
 * Apakah ingin menggunakan Kubernetes cluster disebuah hosting, seperti Google Kubernetes Engine (GKE) (CaaS/KaaS), Azure Kubernetes Service (AKS)(PaaS), atau ingin hosting sendiri cluster tersebut?
 * Apakah klaster tersebut akan berada pada on-premises, atau di cloud (IaaS)? Sayang sekali Kubernetes belum mendukung secara langsung hybrid kubernetes cluster semacam IaaS. Sebagai gantinya, kamu dapat membuat beberapa cluster di GKE atau AKS.
 * Jika ingin mengkonfigurasi Kubernetes di on-premises, pertimbangkan model jaringan yang paling sesuai.
 * Apakah ingin menjalankan Kubernetes pada "bare metal" hardware (server fisik) atau pada virtual machines (VM)?
 * Pastikan sudah paham dan terbiasa dengan beberapa komponen cluster yang dibutuhkan untuk menjalankan sebuah cluster.

Pembuatan Sebuah Cluster
Kalau mempunyai sebuah komputer atau laptop setidaknya 8GB RAM dengan cpu prosesor yang baik itu sebetulnya dapat dimanfaatkan untuk dijadikan sebuah beberapa server node (worker node) dan master node atau control plane.

Master server
root@master-node:~# cat /etc/hosts 127.0.0.1 localhost 127.0.1.1 host
 * 1 ip6-localhost ip6-loopback

fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 192.168.50.58 master-node 192.168.50.38 worker-01 Pada sisi control plane hal yang diperlukan adalah sebuah

Worker 01
root@worker-01:~# cat /etc/hosts 127.0.0.1 localhost 127.0.1.1 host
 * 1 ip6-localhost ip6-loopback

fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 192.168.50.58 master 192.168.50.38 worker-01 sd root@worker-01:~# kubeadm join master:6443 --token bf6w4x.t6l461giuzqazuy2 \ > --discovery-token-ca-cert-hash sha256:8d0b3721ad93a24bb0bb518a15ea657d8b9b0876a76c353c445371692b7d064e [preflight] Running pre-flight checks [preflight] Reading configuration from the cluster... [preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -oyaml' [kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml" [kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env" [kubelet-start] Starting the kubelet [kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap... This node has joined the cluster: Run 'kubectl get nodes' on the control-plane to see this node join the cluster. root@worker-01:~# s
 * Certificate signing request was sent to apiserver, and a response was received.
 * The Kubelet was informed of the new secure connection details.

Pengecekan Status Satu Cluster Yang Telah Dibuat
Pada master server akan dilakukan pengecekan apakah worker node 01 telah berhasil join cluster. root@master-node:~# kubectl get nodes NAME         STATUS ROLES  AGE   VERSION master-node  Ready  master 55m   v1.19.3 worker-01    Ready         4m48s v1.19.3 Selanjutnya, akan dilakukan menambahkan sebuah aplikasi ke cluster yang telah berhasil dibuat. Proses membuat aplikasi baru tidak masalah dilakukan menggunakan server dengan roles master ataupun worker. root@master-node:~# kubectl apply -f https://k8s.io/examples/pods/commands.yaml pod / command-demo created Terakhir, dapat dilihat untuk memeriksa apakah sebuah pod yang pertama dengan aplikasi bernama command-demo telah berjalan. root@master-node:~# kubectl get pods NAME        READY STATUS    RESTARTS AGE command-demo 0/1  Completed 0        30s

Beberapa Opsi Dalam Pembuatan Sebuah Cluster
Selain cara sebelumnya dalam membuat sebuah cluster Kubernetes. Berikut ada beberapa opsi yang lebih simpel seperti menggunakan Minikube dan k3s:

Minikube
lightweight, easy to use, dashboard UI (minikube dashboard), single node (local kubernetes), 2 CPUs, 2GB RAM, 20GB disk $ curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 $ sudo install minikube-linux-amd64 /usr/local/bin/minikube $ minikube start $ minikube start --driver=docker or $ minikube start --driver=kvm $ minikube start $ kubectl get po -A NAMESPACE    NAME                               READY   STATUS    RESTARTS   AGE kube-system  coredns-f9fd979d6-mbkk7            1/1     Running   0          2m41s kube-system  etcd-minikube                      1/1     Running   0          2m44s kube-system  kube-apiserver-minikube            1/1     Running   0          2m44s kube-system  kube-controller-manager-minikube   1/1     Running   0          2m44s kube-system  kube-proxy-rdw5n                   1/1     Running   0          2m41s kube-system  kube-scheduler-minikube            1/1     Running   0          2m43s kube-system  storage-provisioner                1/1     Running   0          2m46s ...
 * 1) prepare for minikube base system ###
 * 1) if error try with spesific driver ###
 * 1) start again ###
 * 1) accessing new cluster ###

k3s
lightweight, multi node, easy to use.

Proses setup k3s pada master node (VM host 1) or $ curl -sfL https://get.k3s.io | sh - $ systemctl status k3s $ sudo cat /etc/rancher/k3s/k3s.yaml apiVersion: v1 clusters: - cluster: certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJkekNDQVIyZ0F3SUJBZ0lCQURBS0JnZ3F ...    server: https://127.0.0.1:6443 name: default contexts: - context: cluster: default user: default name: default current-context: default kind: Config preferences: {} users: - name: default user: client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJrakNDQVRlZ0F3SUJBZ0lJUC8wamtDWU9...    client-key-data: LS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCk1IY0NBUUVFSVA3NHlEQzVBRGJkVmQxMFh... - name: default user: username: bima password: bismillah client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJrakNDQVRlZ0F3SUJBZ0lJUC8wamtDWU9...    client-key-data: LS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCk1IY0NBUUVFSVA3NHlEQzVBRGJkVmQxMFh... $ sudo cat /var/lib/rancher/k3s/server/node-token K1098526a9f3f28921a0248386d6c207bde4c260edec841da201b757d25f7d1c931::server:666367da95e338a438510908665a6f2d (this token will be placed in worker host. In my case I use Debian as worker node.) Proses join k3s pada worker node (VM host 2) $ curl -sfL https://get.k3s.io | sh -
 * 1) Download from https://github.com/rancher/k3s/releases/latest ###
 * 1) The kubeconfig file is written to /etc/rancher/k3s/k3s.yaml. This file is required for the Kubernetes configuration. Let see configuration ###
 * 1) Add authentication ###
 * 1) To install K3s on the server, the agent needs to pass K3S_URL along with the K3S_TOKEN or K3S_CLUSTER_SECRET variables. ###
 * 2) We will use the K3S_TOKEN variable, we can see it in /var/lib/rancher/k3s/server/node-token ###

$ NODE_TOKEN="K1098526a9f3f28921a0248386d6c207bde4c260edec841da201b757d25f7d1c931::server:666367da95e338a438510908665a6f2d" sudo k3s agent --server https://192.168.0.15:6443 --token ${NODE_TOKEN}

Pranala Menarik

 * https://kubernetes.io/docs/tasks/access-application-cluster/connecting-frontend-backend/
 * Skupper.io: Let your services communicate across Kubernetes clusters

Referensi

 * https://kubernetes.io/docs/concepts/overview/components/