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
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
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.
- Belajar Cloud AWS – Membuat Volume dengan Static Provisioning pada service EKS (Elastic Kubernetes Service)
- Belajar Cloud AWS – Membuat Raw Block Volume pada service EKS (Elastic Kubernetes Service)
Demikian tutorial Install EBS CSI Driver EKS. Semoga bermanfaat !