0

Belajar Cloud AWS – Membuat Raw Block Volume pada service EKS (Elastic Kubernetes Service)

raw block volume EKS


Pastikan EBS CSI Driver sudah terinstall pada EKS. Jika belum silahkan ikuti tutorial berikut Belajar Cloud AWS – Menginstall EBS CSI Driver pada service EKS (Elastic Kubernetes Service).

raw block volume EKS

Pendahuluan

Kali ini kita akan membuat sebuah volume di kubernetes (EKS) dengan tipe raw block volume melalui file konfigurasi .yaml.

Sebenarnya contohnya sudah ada disini Raw Block Volume, tapi saya akan bawakan sesuai versi saya sendiri disini.

Apa itu Raw Block Volume

Berdasarkan sumber dari sini, raw block volume adalah:

block volume is a volume that will appear as a block device inside the container. A mounted (file) volume is volume that will be mounted using a specified file system and appear as a directory inside the container.

Intinya, raw block volume adalah sebuah volume yang langsung bisa diattach kedalam container sebagai block device, tanpa membuat filesystem disisi nodenya.

Berbeda jika dibandingkan dengan mounted volume yang harus dibuat filesystemnya terlebih dahulu disisi nodenya, baru kemudian dimount kedalam container.


Berikut perbedaan raw block volume dan mounted volume, saya ambil dari youtube:


Raw Block Volume

raw block volume EKS

Mounted Volume (filesystem)


Prerequisite

Sebelum memulai, berikut prasyarat yang harus dipenuhi:

  • Versi Kubernetes 1.13+ (CSI 1.0)
  • aws-ebs-csi-driver yang sudah kita install pada tutorial sebelumnya

Install Raw Block Volume di EKS

Kita akan buat 3 file yaml:

  • storage_class.yaml -> untuk class storagenya
  • claim.yaml -> persistent volume claim
  • pod.yaml -> pod yang akan connect ke volume EBS


Note: Ketiga file tersebut akan kita apply di namespace default

storage_class.yaml

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: ebs-sc
provisioner: ebs.csi.aws.com
volumeBindingMode: WaitForFirstConsumer
  • Kita buat class storagenya dengan nama ebs-sc
  • Binding modenya waitForFirstConsumer, artinya volume EBS akan dibuat jika consumer (pod) sudah dibuat

Apply storage classnya menggunakan command berikut:

$ kubectl apply -f storage_class.yaml

claim.yaml

Selanjutnya kita buat persistent volume claim

claim.yaml

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: block-claim
spec:
  accessModes:
    - ReadWriteOnce
  volumeMode: Block
  storageClassName: ebs-sc
  resources:
    requests:
      storage: 4Gi
  • Kita beri nama pvcnya block-claim
  • akses modenya read write once
  • volume modenya block (raw block volume)
  • kaitkan pvc ke storage class melalui storageClassName: ebs-sc
  • buat volume EBS sebesar 4Gi (4 GB)


Lalu apply claim.yaml

$ kubectl apply -f claim.yaml
raw block volume EKS

Kita cek status persistent volume claim dengan

$ kubectl get pvc
raw block volume EKS

Statusnya masih pending, karena belum ada pod yang dideploy. Step berikutnya kita akan deploy pod.

pod.yaml

Selanjutnya kita deploy sebuah pod

pod.yaml

apiVersion: v1
kind: Pod
metadata:
  name: app
spec:
  containers:
  - name: app
    image: busybox
    command: ["/bin/sh", "-c"]
    args: ["tail -f /dev/null"]
    volumeDevices:
    - name: data
      devicePath: /dev/xvda
  volumes:
  - name: data
    persistentVolumeClaim:
      claimName: block-claim
  • Kita depoy pod dengan nama app dan image busybox
  • command dan args diatas supaya mempertahakan container tetap up (running)
  • raw block volume akan dimount ke dalam container dengan path /dev/xvda
  • panggil raw block volume (claim.yaml) yang sudah kita buat, dengan claimName: block-claim

Lalu kita apply pod.yaml

$ kubectl apply -f pod.yaml

Cek pod jika sudah running

$ kubectl get pods
raw block volume EKS

Sekarang kita cek volumenya di dashboard EC2 -> Elastic Block Store -> Volume.

Harusnya akan ada volume baru seperti ini

raw block volume EKS

Note: Jika volume statusnya insufficient data, tunggu sekitar 5 menit karena volume perlu sync ke EKS.

Volume diatas sudah terattach otomatis ke salah satu instance / node dari EKS.

Testing Copy Data ke volume baru

Sekarang ke bagian podsnya, kita akan coba copy data ke volume baru tersebut.

Jalankan command berikut:

$ kubectl exec -it app -- dd if=/dev/zero of=/dev/xvda bs=1024k count=100

Penjelasan:

  • Connect ke pods app menggunakan exec -it
  • perintah dd untuk convert & copy file
  • sumber filenya dari /dev/zero
  • dicopy ke /dev/xvda yang merupakan volume baru yang dimounted
  • bs=1024k buat file dengan ukuran 1MB
  • count=100 dilooping sebanyak 100x
  • akan tergenerate 100 file dengan total size: 100MB

Bagus, datanya sudah tergenerate ke volume baru tersebut sebesar 100.0MB

Cek /dev/xvda didalam pods

Kita akan login ke podnya untuk mengecek /dev/xvda

$ kubectl exec -it app sh

Lalu cek /dev/xvda dengan command ls -al

$ ls -al /dev/svda

Bisa dilihat /dev/xvda sudah termounted.

Note: Sayangnya kita tidak bisa melihat isi dari volume /dev/xvda tersebut, karena merupakan block device (raw block volume) yang tidak tergenerate sebagai filesystem.

Ambar Hasbiyatmoko

Hello, I'm web developer. Passionate about programming, web server, and networking.

Leave a Reply

Your email address will not be published. Required fields are marked *

Time limit is exhausted. Please reload the CAPTCHA.