0

Belajar Cloud AWS – Menginstall EBS CSI Driver pada service EKS (Elastic Kubernetes Service)

Install EBS CSI Driver EKS


EBS CSI merupakan driver (addon) AWS yang digunakan untuk mengelola volume EBS (Elastik Block Store) pada service Elastic Kubernetes Service (EKS). Jadi di EKS kita bisa menambah volume EBS, mengedit dan mendelete volume melalui PV (Persistent Volume) file yaml yang sudah kita buat.

Disini kita akan menginstall EBS CSI Driver Addon untuk EKS menggunakan aws cli (command line interface), jadi pastikan kalian sudah menginstall aws cli. FYI saya menggunakan EKS yang dihosted di region singapore (ap-southeast-1).


Cara kerja EBS CSI

Install EBS CSI Driver EKS

Penjelasan:

  • Pada gambar diatas, user ingin menambah volume EBS melalui file pv & pvc.yaml (persistant volume, persistant volume claim)
  • Setelah user mengapply (kubernetes apply -f pvc.yaml), maka request akan dilanjutkan ke pods EBS CSI
  • EBS CSI berkomunikasi ke OIDC (OpenID Connect) AWS untuk mengecek apakah user punya akses ke resource EBS? kalau iya EBS CSI pods akan membuat volume EBS, lalu mengattachkannya ke salah satu node (instance EC2) pada EKS


Install EBS CSI Driver (Add on)

Ada beberapa step untuk menginstall EBS CSI

  • Cek EBS CSI driver (sudah pernah terinstall atau belum?)
  • Cek OIDC & buat trust policy
  • Buat Role & policy untuk EBS CSI Driver
  • Install EBS CSI Driver

Cek EBS CSI driver

Sebelum menginstall EBS CSI, kita cek terlebih dahulu apakah drivernya pernah terinstall di EKS sebelumnya? dengan command berikut:

$ aws eks describe-addon --cluster-name my-cluster-test --addon-name aws-ebs-csi-driver --query "addon.addonVersion" --output text --profile eks-user-admin

Penjelasan:

  • my-cluster-test, nama cluster EKS nya
  • aws-ebs-csi-driver, nama addon EKS nya
  • eks-user-admin, user aws cli yang sudah punya hak akses ke EKS dan volume EBS. Parameter ini bisa diganti dengan username kalian. Note: pastikan user aws cli kalian punya cukup akses ke resource AWS.

Jika output dari command diatas seperti dibawah ini, berarti driver / addonnya belum terinstall. Kita bisa lanjut ke step berikutnya

An error occurred (ResourceNotFoundException) when calling the DescribeAddon operation: No addon: aws-ebs-csi-driver found in cluster: my-cluster-test

Cek OIDC & buat Trust Policy

Selanjutnya kita cek id OIDC. Jalankan command berikut untuk mengecek id untuk OIDCnya:

aws eks describe-cluster --name my-cluster-test --query "cluster.identity.oidc.issuer" --output text --profile eks-user-admin

Outputnya kira-kira seperti ini:

https://oidc.eks.ap-southeast-1.amazonaws.com/id/D821F1FF11XXX

Lalu kita buat trust policy. Buat file aws-ebs-csi-driver-trust-policy.json lalu isikan json berikut:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Federated": "arn:aws:iam::1931111111:oidc-provider/oidc.eks.ap-southeast-1.amazonaws.com/id/D821F1FF11XXX"
      },
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": {
        "StringEquals": {
          "oidc.eks.ap-southeast-1.amazonaws.com/id/D821F1FF11XXX:aud": "sts.amazonaws.com",
          "oidc.eks.ap-southeast-1.amazonaws.com/id/D821F1FF11XXX:sub": "system:serviceaccount:kube-system:ebs-csi-controller-sa"
        }
      }
    }
  ]
}

Penjelasan:

  • Ganti 1931111111 dengan account AWS id kalian
  • pastekan id OIDCnya ke json tersebut (id/D821F1FF11XXX)


file trust policy ini akan kita gunakan distep selanjutyna.

Buat Role & Policy untuk EBS CSI Driver

Selanjutnya kita buat IAM role dan kaitkan trust policy ke role tersebut.

Jalankan command berikut:

$ aws iam create-role --role-name AmazonEKS_EBS_CSI_DriverRole-DEV --assume-role-policy-document file://"aws-ebs-csi-driver-trust-policy.json" --profile eks-user-admin

Penjelasan:

  • AmazonEKS_EBS_CSI_DriverRole-DEV, nama rolenya
  • aws-ebs-csi-driver-trust-policy.json, file trust policy yang sebelumya sudah kita buat

Setelah itu kaitkan role tersebut ke AWS policy (AmazonEBSCSIDriverPolicy)

aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy --role-name AmazonEKS_EBS_CSI_DriverRole-DEV --profile eks-user-admin

Note: AmazonEBSCSIDriverPolicy merupakan policy bawaan dari AWSnya, jadi kita tinggal pakai saja policy tersebut.

Jika sudah selesai, maka harusnya sudah terbuat roles baru (AmazonEKS_EBS_CSI_DriverRole-DEV) jika kita buka lewat aws console (website aws)

Detail dari role: Trust policy

Detail dari role: Policy


Install EBS CSI Driver

Jika step diatas sudah selesai semua, kita tinggal jalankan command berikut untuk menginstall drivernya:

aws eks create-addon --cluster-name my-cluster-test --addon-name aws-ebs-csi-driver --service-account-role-arn arn:aws:iam::1931111111:role/AmazonEKS_EBS_CSI_DriverRole-DEV --profile eks-user-admin

Jika setelah dijalankan terdapat error

eks-user-admin is not authorized to perform: iam:PassRole on resource: ..role/AmazonEKS_EBS_CSI_DriverRole-DEV

Tambahkan iam:PassRole pada field Resource pada json policy di user eks-user-admin

Jika sudah terinstall, harusnya ada pods EBS CSI Controller pada namespace kube-system. Kita bisa mengeceknya dengan:

$ kubectl get pods -n kube-system
Install EBS CSI Driver EKS

Good. 2 pods EBS CSI Controller sudah running statusnya. Seharusnya sekarang kita bisa create volume EBS dari file pv dan pvc .yaml yang kita punya.

Mungkin ditutorial berikutnya saya akan jelaskan cara membuat volume EBS menggunakan pv dan pvc yaml.

Demikian tutorial Install EBS CSI Driver EKS. Semoga bermanfaat !

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.