Cara konfigurasi K3S with GlusterFS

{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 update
sudo 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:



K3S service akan otomatis berjalan setelah installasi:


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.gpg
DEBID=$(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.list
sudo apt update && sudo apt install glusterfs-server -y 
sudo 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 /data
sudo mount /dev/sdb1 /data
echo "/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 status
sudo 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 \
    force
gluster volume start k3s
gluster 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/fstab
mount /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.txt
echo "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).



Voilla kita sudah bisa memanage K3S melalui Laptop kita:



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/nginx
echo "Hello, Filah" | sudo tee /mnt/gluster-k3s/nginx/index.html{codeBox}

Buat file dep-nginx.yaml yang berisi manifest dibawah ini:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      volumes:
        - name: volume-nginx
          hostPath:
            path: "/mnt/gluster-k3s/nginx"
      containers:
      - image: nginx
        name: nginx
        ports:
        - name: nginx-port
          containerPort: 80
        volumeMounts:
          - mountPath: "/usr/share/nginx/html"
            name: volume-nginx
            readOnly: false
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-svc
spec:
  ports:
    - port: 80
      protocol: TCP
      targetPort: 80
  selector:
    app: nginx
  type: ClusterIP
---
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
  name: nginx-ing
spec:
  entryPoints:
    - web
  routes:
  - match: Host(`k3s.filahaditia.local`)
    kind: Rule
    services:
    - name: nginx-svc
      port: 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.local
10.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 😘

1 Comments

Post a Comment
Previous Post Next Post