{tocify} $title={Table of Contents}
Kali ini kita akan mencoba setup cluster Kubernetes menggunakan K3S. K3S adalah distribusi Kubernetes ringan yang ideal untuk deployment kecil. Kita juga akan belajar cara setup distributed filesystem menggunakan GlusterFS. GlusterFS memungkinkan pod berpindah antar worker node sambil tetap dapat mengakses data persistennya.
Prerequisites
Roles | FQDN | IP Address | GlusterFS Data Disk |
---|---|---|---|
master/server | pod-k3s-master | 10.210.42.181 | - |
worker/agent | pod-k3s-node1 | 10.210.42.182 | 50GB |
worker/agent | pod-k3s-node2 | 10.210.42.183 | 50GB |
Preperation
Sebelum kita mempersiapkan master node dan agent node, upgrade sistem terlebih dahulu. SSH ke VM yang baru kita buat dan jalankan perintah ini:
sudo apt updatesudo apt upgrade -y{codeBox}
Install K3S on Master node
SSH ke Master node dan jalan perintah dibawah ini untuk install dan menjalan k3s server:
curl -sfL https://get.k3s.io | sh -{codeBox}
Installation output:
Install K3S on Agent node
Sekarang setelah K3S server kita aktif dan berjalan, SSH ke dua agent node dan jalankan perintah berikut untuk menginstal K3S agent dan menghubungkannya ke K3S server:
K3S_TOKEN dapat kita lihat pada file /var/lib/rancher/k3s/server/node-token, untuk melihatnya jalankan perintah sudo cat /var/lib/rancher/k3s/server/node-token{alertInfo}
curl -sfL https://get.k3s.io | K3S_URL=https://10.210.42.181:6443 K3S_TOKEN=K109784363e5abd6f10058e3258e76a60e410e4f1f2e019f9b8b2288ba0735e6c3b::server:69e143e3f338658e438d1e9b39f7353b sh -{codeBox}
Installation output:
Untuk memeriksa apakah dua agent node sudah ready, jalankan ini pada master node:
kubectl get nodes{codeBox}
Install GlusterFS
GlusterFS is a free and open source software scalable network filesystem. GlusterFS memungkinkan untuk menggabungkan beberapa disk storage yang beberada dibeberapa server/node menjadi satu kesatuan (pooling) dan memungkinkan untuk konfigurasi replikasi data. Dengan fitur tersebut memungkinkan pods mengakses persistent storage pods itu sendiri dari node manapun tempat pods itu berada. Alternatif GlusterFS seperti Longhorn dan OpenEBS.
Prepare Agent nodes
Pada Kubernetes setiap deployment akan berjalan di Woker/Agent nodes, kita akan install GlusterFS hanya pada Agent nodes, SSH ke dua Agent nodes kemudian masukan perintah dibawah ini untuk install, enable dan start Gluster server:
wget -O - https://download.gluster.org/pub/gluster/glusterfs/9/rsa.pub | gpg --dearmor > /etc/apt/trusted.gpg.d/gluster.gpgDEBID=$(grep 'VERSION_ID=' /etc/os-release | cut -d '=' -f 2 | tr -d '"') && DEBVER=$(grep 'VERSION=' /etc/os-release | grep -Eo '[a-z]+') && DEBARCH=$(dpkg --print-architecture)echo "deb [signed-by=/etc/apt/trusted.gpg.d/gluster.gpg] https://download.gluster.org/pub/gluster/glusterfs/LATEST/Debian/${DEBID}/${DEBARCH}/apt ${DEBVER} main" > /etc/apt/sources.list.d/gluster.listsudo apt update && sudo apt install glusterfs-server -ysudo systemctl enable glusterd && sudo systemctl start glusterd{codeBox}
Kita kana menggunakan disk sdb pada Agent nodes sebagai Gluster cluster pool, dapat kita lihat menggunakan command lsbk partisi sdb1 pada disk sdb saat ini belum mount ke directory manapun, masukan perintah dibawah ini pada kedua Agent nodes untuk mount directory /data ke partisi sdb1:
sudo mkdir -p /datasudo mount /dev/sdb1 /dataecho "/dev/sdb1 /data ext4 defaults 0 0" | sudo tee -a /etc/fstab{codeBox}
Partisi sdb1 sudah berhasil mount ke directory /data
Gluster bekerja dengan apa yang disebut "bricks". Brick adalah direktori yang dikendalikan oleh Gluster untuk mengelola replicated filesystem. Filesystem ini kemudian di-mount menggunakan GlusterFS. Buat direktori yang diperlukan:
sudo mkdir -p /data/glusterfs/k3s/brick1
sudo mkdir -p /mnt/gluster-k3s{codeBox}
Set up the cluster
Jalan command dibawah ini pada agent node1 untuk membuat cluster peer dengan agent node2:
sudo gluster peer probe 10.210.42.183#verify peer statussudo gluster peer status{codeBox}
Terlihat status peer sudah connected
Create the volume
Karena set up saat ini hanya terdapat 2 disk maka gunakan konfigurasi replica 2 (Two-Way replication) artinya data asli akan direplikasi sebanayak 2 kali (1 x 2 = 2) menjadikannya terdapat 2 data yang sama dan dapat di-read secara bersamaan, jalan perintah dibawah ini pada salah satu agent node untuk membuat dan menjalankan replicated volume:
two-way replication does not provide adequate protection from split-brain conditions. While a dummy node can be used as an interim solution for this problem, for production purpose i recommends that you create use either arbitrated replication or three-way replication and all volumes that currently use two-way replication are migrated to use either arbitrated replication or three-way replication.{alertWarning}
gluster volume create k3s replica 2 \10.210.42.182:/data/glusterfs/k3s/brick1/brick \10.210.42.183:/data/glusterfs/k3s/brick1/brick \forcegluster volume start k3sgluster volume info{codeBox}
Konnfigurasi diatas akan membuat dan menjalankan replicated volume dengan nama "k3s" dengan dua kali replikasi
Mount the GlusterFS volume
Mount volume yang baru kita buat pada kedua agent node, masukan perintah berikut:
echo "127.0.0.1:/k3s /mnt/gluster-k3s glusterfs defaults,_netdev 0 0" >> /etc/fstabmount /mnt/gluster-k3s{codeBox}
Pastikan Gluster volume sudah mounted pada kedua agent node dengan memasukan perintah df -h :
Test the GlusterFS filesystem
Untuk melakukan pengetesan pada Gluster cluster kita akan membuat file testing pada agent node2 dengan perintah berikut ini:
sudo touch /mnt/gluster-k3s/test.txtecho "Testing File" | sudo tee /mnt/gluster-k3s/test.txt{codeBox}
SSH ke agent node1 kemudian kita lihat file yang baru kita buat dengan perintah cat /mnt/gluster-k3s/test.txt , terlihat bahwa file tersebut masih dapat dibaca dari agent node1
Setup kubectl client on local Laptop
Pastikan kubectl sudah terinstall pada Laptop, copy /etc/rancher/k3s/k3s.yaml ke file ./.kube/config pada Laptop, kemudian udah value server menjadi IP Address dari API Server (Master nodes).
Deployment Pods using GlusterFS storage
Konfigurasi K3S dan GlusterFS sudah selesai, selanjutnya kita akan melakukan pengetesan deploy nginx pod dan public HTTP service via Traefik yang sudah terinstall dan terintegrasi dengan K3S secara otomatis pada saat instalasi.
SSH ke agent node kemudian buat static index.html file menggunakan perintah berikut ini:
sudo mkdir /mnt/gluster-k3s/nginxecho "Hello, Filah" | sudo tee /mnt/gluster-k3s/nginx/index.html{codeBox}
Buat file dep-nginx.yaml yang berisi manifest dibawah ini:
apiVersion: apps/v1kind: Deploymentmetadata:name: nginxspec:replicas: 2selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:volumes:- name: volume-nginxhostPath:path: "/mnt/gluster-k3s/nginx"containers:- image: nginxname: nginxports:- name: nginx-portcontainerPort: 80volumeMounts:- mountPath: "/usr/share/nginx/html"name: volume-nginxreadOnly: false---apiVersion: v1kind: Servicemetadata:name: nginx-svcspec:ports:- port: 80protocol: TCPtargetPort: 80selector:app: nginxtype: ClusterIP---apiVersion: traefik.io/v1alpha1kind: IngressRoutemetadata:name: nginx-ingspec:entryPoints:- webroutes:- match: Host(`k3s.filahaditia.local`)kind: Ruleservices:- name: nginx-svcport: 80{codeBox}
manifest tersebut akan membuat pods nginx dengan volume yang mount ke folder /mnt/gluster-k3s/nginx yang dibuat sebelumnya, Service object dengan type ClusterIP dan Port 80, dan object IngressRoute agar Service dapat diakses dari eksternal melalui domain k3s.filahaditia.local{alertInfo}
Kemudian jalankan perintah dibawah ini untuk membuat object-object pada manifest tersebut:
kubectl apply -f dep-nginx.yaml{codeBox}
Verifikasi object-object yang telah dibuat dengan perintah berikut ini:
kubectl get pods,svc,ingressroute.traefik.io{codeBox}
Bisa kita lihat object pada manifest sudah kita buat, dan pods sudah running
Dikarenakan deployment kali ini bertujuan untuk development kita menggunakan private domain yaitu k3s.filahaditia.local, oleh karena itu kita akan edit file /etc/hosts pada Laptop dengan menambah value berikut ini:
10.210.42.182 k3s.filahaditia.local10.210.42.183 k3s.filahaditia.local{codeBox}
Setelah itu kita coba buka deployment nginx yang telah kita buat melalui browser:
Hore Deployment Nginx menggunakan K3S sudah berhasil.
Usai sudah tutorial gabut ini semoga harimu minggu terus 😘
Klazzz
ReplyDelete