

 **Bantu tingkatkan halaman ini** 

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Untuk berkontribusi pada panduan pengguna ini, pilih **Edit halaman ini pada GitHub** tautan yang terletak di panel kanan setiap halaman.

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Gunakan penyimpanan data aplikasi untuk klaster Anda
<a name="storage"></a>

Anda dapat menggunakan berbagai layanan AWS penyimpanan dengan Amazon EKS untuk kebutuhan penyimpanan aplikasi Anda. Melalui driver Container Storage Interface (CSI) yang AWS didukung, Anda dapat dengan mudah menggunakan Amazon EBS, Amazon S3, Amazon EFS, Amazon FSX, dan Amazon File Cache untuk kebutuhan penyimpanan aplikasi Anda yang berjalan di Amazon EKS. Untuk mengelola cadangan klaster Amazon EKS Anda, lihat [Dukungan AWS cadangan untuk Amazon](https://docs.aws.amazon.com/aws-backup/latest/devguide/working-with-supported-services.html#working-with-eks) EKS.

Bab ini mencakup pilihan penyimpanan untuk klaster Amazon EKS.

**Topics**
+ [Gunakan penyimpanan volume Kubernetes dengan Amazon EBS](ebs-csi.md)
+ [Gunakan penyimpanan sistem file elastis dengan Amazon EFS](efs-csi.md)
+ [Gunakan penyimpanan aplikasi berkinerja tinggi dengan Amazon FSx untuk Lustre](fsx-csi.md)
+ [Gunakan penyimpanan aplikasi berkinerja tinggi FSx untuk NetApp ONTAP](fsx-ontap.md)
+ [Gunakan penyimpanan data dengan Amazon FSx untuk OpenZFS](fsx-openzfs-csi.md)
+ [Minimalkan latensi dengan Amazon File Cache](file-cache-csi.md)
+ [Akses objek Amazon S3 dengan Mountpoint untuk driver Amazon S3 CSI](s3-csi.md)
+ [Aktifkan fungsionalitas snapshot untuk volume CSI](csi-snapshot-controller.md)

# Gunakan penyimpanan volume Kubernetes dengan Amazon EBS
<a name="ebs-csi"></a>

**catatan**  
 **Baru:** Amazon EKS Auto Mode mengotomatiskan tugas rutin untuk penyimpanan blok. Pelajari cara [Menerapkan contoh beban kerja stateful ke Mode Otomatis EKS](sample-storage-workload.md).

Driver [Amazon Elastic Block Store (Amazon EBS) Container Storage Interface (CSI) mengelola](https://github.com/kubernetes-sigs/aws-ebs-csi-driver/) siklus hidup volume Amazon EBS sebagai penyimpanan untuk Volume Kubernetes yang Anda buat. [https://kubernetes.io/docs/concepts/storage/ephemeral-volumes/](https://kubernetes.io/docs/concepts/storage/ephemeral-volumes/)

## Pertimbangan-pertimbangan
<a name="ebs-csi-considerations"></a>
+ Anda tidak perlu menginstal pengontrol Amazon EBS CSI pada kluster Mode Otomatis EKS.
+ Anda tidak dapat memasang volume Amazon EBS ke Pod Fargate.
+ Anda dapat menjalankan pengontrol Amazon EBS CSI di node Fargate, tetapi node Amazon EBS CSI hanya dapat `DaemonSet` berjalan di instans Amazon EC2.
+ Volume Amazon EBS dan driver Amazon EBS CSI tidak kompatibel dengan Amazon EKS Hybrid Nodes.
+ Support akan disediakan untuk versi add-on terbaru dan satu versi sebelumnya. Perbaikan untuk bug atau kerentanan yang ditemukan di versi terbaru akan di-backport ke rilis sebelumnya sebagai versi minor baru.
+ Mode Otomatis EKS membutuhkan kelas penyimpanan untuk digunakan `ebs.csi.eks.amazonaws.com` sebagai penyedia. Amazon EBS CSI Driver (`ebs.csi.aws.com`) standar mengelola volumenya sendiri secara terpisah. Untuk menggunakan volume yang ada dengan Mode Otomatis EKS, migrasikan volume menggunakan snapshot volume ke kelas penyimpanan yang menggunakan penyedia Mode Otomatis.

**penting**  
Untuk menggunakan fungsionalitas snapshot dari driver Amazon EBS CSI, Anda harus menginstal pengontrol snapshot CSI terlebih dahulu. Untuk informasi selengkapnya, lihat [Aktifkan fungsionalitas snapshot untuk volume CSI](csi-snapshot-controller.md).

## Prasyarat
<a name="ebs-csi-prereqs"></a>
+ Sebuah klaster yang sudah ada. Untuk melihat versi platform yang diperlukan, jalankan perintah berikut.

  ```
  aws eks describe-addon-versions --addon-name aws-ebs-csi-driver
  ```
+ Driver EBS CSI membutuhkan AWS Izin IAM.
  +  AWS menyarankan menggunakan EKS Pod Identities. Untuk informasi selengkapnya, lihat [Ikhtisar pengaturan EKS Pod Identities](pod-identities.md#pod-id-setup-overview).
  + Untuk informasi tentang Peran IAM untuk Akun Layanan, lihat[Buat penyedia IAM OIDC untuk klaster Anda](enable-iam-roles-for-service-accounts.md).

## Langkah 1: Buat peran IAM
<a name="csi-iam-role"></a>

Plugin Amazon EBS CSI memerlukan izin IAM untuk melakukan panggilan atas nama Anda. AWS APIs Jika Anda tidak melakukan langkah-langkah ini, mencoba menginstal add-on dan menjalankan `kubectl describe pvc` akan muncul `failed to provision volume with StorageClass` bersama dengan `could not create volume in EC2: UnauthorizedOperation` kesalahan. Untuk informasi selengkapnya, lihat [Mengatur izin pengemudi](https://github.com/kubernetes-sigs/aws-ebs-csi-driver/blob/master/docs/install.md#set-up-driver-permissions) di GitHub.

**catatan**  
Pod akan memiliki akses ke izin yang ditetapkan untuk peran IAM kecuali Anda memblokir akses ke IMDS. Untuk informasi selengkapnya, lihat [Amankan kluster Amazon EKS dengan praktik terbaik](security-best-practices.md).

Prosedur berikut menunjukkan kepada Anda cara membuat peran IAM dan melampirkan kebijakan AWS terkelola padanya. Untuk menerapkan prosedur ini, Anda dapat menggunakan salah satu alat ini:
+  [`eksctl`](#eksctl_store_app_data) 
+  [Konsol Manajemen AWS](#console_store_app_data) 
+  [AWS CLI](#awscli_store_app_data) 

**catatan**  
Anda dapat membuat kebijakan yang dikelola sendiri dengan izin tercakup bawah. Tinjau [https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonEBSCSIDriverPolicy.html](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonEBSCSIDriverPolicy.html)dan buat Kebijakan IAM kustom dengan izin yang dikurangi.

**catatan**  
Langkah-langkah spesifik dalam prosedur ini ditulis untuk menggunakan driver sebagai add-on Amazon EKS. Langkah-langkah yang berbeda diperlukan untuk menggunakan driver sebagai add-on yang dikelola sendiri. Untuk informasi selengkapnya, lihat [Mengatur izin driver](https://github.com/kubernetes-sigs/aws-ebs-csi-driver/blob/master/docs/install.md#set-up-driver-permissions) pada GitHub.

### `eksctl`
<a name="eksctl_store_app_data"></a>

1. Buat peran IAM dan lampirkan kebijakan. AWS mempertahankan kebijakan AWS terkelola atau Anda dapat membuat kebijakan kustom Anda sendiri. Anda dapat membuat peran IAM dan melampirkan kebijakan AWS terkelola dengan perintah berikut. Ganti *my-cluster* dengan nama klaster Anda. Perintah menyebarkan AWS CloudFormation tumpukan yang membuat peran IAM dan melampirkan kebijakan IAM padanya.

   ```
   eksctl create iamserviceaccount \
           --name ebs-csi-controller-sa \
           --namespace kube-system \
           --cluster my-cluster \
           --role-name AmazonEKS_EBS_CSI_DriverRole \
           --role-only \
           --attach-policy-arn arn:aws: iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy \
           --approve
   ```

1. Anda dapat melewati langkah ini jika Anda tidak menggunakan [kunci KMS](https://aws.amazon.com/kms/) khusus. Jika Anda menggunakannya untuk enkripsi pada volume Amazon EBS Anda, sesuaikan peran IAM sesuai kebutuhan. Sebagai contoh, lakukan hal berikut:

   1. Salin dan tempel kode berikut ke `kms-key-for-encryption-on-ebs.json` file baru. Ganti *custom-key-arn* dengan [ARN kunci KMS](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awskeymanagementservice.html#awskeymanagementservice-key) kustom.

      ```
      {
            "Version":"2012-10-17",		 	 	 
            "Statement": [
              {
                "Effect": "Allow",
                "Action": [
                  "kms:CreateGrant",
                  "kms:ListGrants",
                  "kms:RevokeGrant"
                ],
                "Resource": ["arn:aws:kms:us-east-1:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab"],
                "Condition": {
                  "Bool": {
                    "kms:GrantIsForAWSResource": "true"
                  }
                }
              },
              {
                "Effect": "Allow",
                "Action": [
                  "kms:Encrypt",
                  "kms:Decrypt",
                  "kms:ReEncrypt*",
                  "kms:GenerateDataKey*",
                  "kms:DescribeKey"
                ],
                "Resource": ["arn:aws:kms:us-east-1:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab"]
              }
            ]
          }
      ```

   1. Buat kebijakan. Anda dapat mengubah *KMS\$1Key\$1For\$1Encryption\$1On\$1EBS\$1Policy* ke nama yang berbeda. Namun, jika Anda melakukannya, pastikan untuk mengubahnya di langkah selanjutnya juga.

      ```
      aws iam create-policy \
            --policy-name KMS_Key_For_Encryption_On_EBS_Policy \
            --policy-document file://kms-key-for-encryption-on-ebs.json
      ```

   1. Lampirkan kebijakan IAM ke peran dengan perintah berikut. Ganti *111122223333* dengan ID akun Anda.

      ```
      aws iam attach-role-policy \
            --policy-arn arn:aws: iam::111122223333:policy/KMS_Key_For_Encryption_On_EBS_Policy \
            --role-name AmazonEKS_EBS_CSI_DriverRole
      ```

### Konsol Manajemen AWS
<a name="console_store_app_data"></a>

1. Buka konsol IAM di https://console.aws.amazon.com/iam/.

1. Di panel navigasi sebelah kiri, pilih **Peran**.

1. Pada halaman **Peran**, pilih **Buat peran**.

1. Pada halaman **Pilih entitas tepercaya**, lakukan hal berikut:

   1. Di bagian **Jenis entitas tepercaya**, pilih **Identitas web**.

   1. Untuk **penyedia Identity**, pilih **URL penyedia OpenID Connect** untuk klaster Anda (seperti yang ditunjukkan di bawah **Ikhtisar** di Amazon EKS).

   1. Untuk **Audiens**, pilih `sts.amazonaws.com`.

   1. Pilih **Berikutnya**.

1. Pada halaman **Tambahkan izin**, lakukan hal berikut:

   1. Di dalam kotak **Filter kebijakan**, masukkan `AmazonEBSCSIDriverPolicy`.

   1. Pilih kotak centang di sebelah kiri yang `AmazonEBSCSIDriverPolicy` dikembalikan dalam pencarian.

   1. Pilih **Berikutnya**.

1. Pada halaman **Nama, tinjau, dan buat**, lakukan hal berikut:

   1. Untuk **nama Peran**, masukkan nama unik untuk peran Anda, seperti*AmazonEKS\$1EBS\$1CSI\$1DriverRole*.

   1. Di bawah **Tambahkan tag (Opsional)**, tambahkan metadata ke peran dengan melampirkan tag sebagai pasangan nilai kunci. Untuk informasi selengkapnya tentang penggunaan tanda di IAM, lihat [Menandai sumber daya IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html) di *Panduan Pengguna IAM*.

   1. Pilih **Buat peran**.

1. Setelah peran dibuat, pilih peran di konsol untuk dibuka, dan kemudian diedit.

1. Pilih tab **Trust relationship**, lalu pilih **Edit trust policy**.

1. Temukan garis yang terlihat mirip dengan baris berikut:

   ```
   "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:aud": "sts.amazonaws.com"
   ```

   Tambahkan koma ke akhir baris sebelumnya, lalu tambahkan baris berikut setelah baris sebelumnya. Ganti *region-code* dengan AWS Wilayah tempat klaster Anda berada. Ganti *EXAMPLED539D4633E53DE1B71EXAMPLE* dengan ID penyedia OIDC cluster Anda.

   ```
   "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:sub": "system:serviceaccount:kube-system:ebs-csi-controller-sa"
   ```

1. Pilih **Perbarui kebijakan** untuk menyelesaikan.

1. Jika Anda menggunakan [kunci KMS](https://aws.amazon.com/kms/) khusus untuk enkripsi pada volume Amazon EBS Anda, sesuaikan peran IAM sesuai kebutuhan. Sebagai contoh, lakukan hal berikut:

   1. Di panel navigasi di sebelah kiri, pilih **Kebijakan**.

   1. Pada halaman **Kebijakan**, pilih **Buat Kebijakan**.

   1. Di halaman **Buat kebijakan**, pilih tab **JSON**.

   1. Salin dan tempel kode berikut ke editor, ganti *custom-key-arn* dengan [ARN kunci KMS](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awskeymanagementservice.html#awskeymanagementservice-key) khusus.

      ```
      {
            "Version":"2012-10-17",		 	 	 
            "Statement": [
              {
                "Effect": "Allow",
                "Action": [
                  "kms:CreateGrant",
                  "kms:ListGrants",
                  "kms:RevokeGrant"
                ],
                "Resource": ["arn:aws:kms:us-east-1:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab"],
                "Condition": {
                  "Bool": {
                    "kms:GrantIsForAWSResource": "true"
                  }
                }
              },
              {
                "Effect": "Allow",
                "Action": [
                  "kms:Encrypt",
                  "kms:Decrypt",
                  "kms:ReEncrypt*",
                  "kms:GenerateDataKey*",
                  "kms:DescribeKey"
                ],
                "Resource": ["arn:aws:kms:us-east-1:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab"]
              }
            ]
          }
      ```

   1. Pilih **Berikutnya: Tanda**.

   1. Pada halaman **Tambahkan tag (Opsional)**, pilih **Berikutnya: Ulasan**.

   1. Untuk **Nama**, masukkan nama unik untuk kebijakan Anda (misalnya,*KMS\$1Key\$1For\$1Encryption\$1On\$1EBS\$1Policy*).

   1. Pilih **Buat kebijakan**.

   1. Di panel navigasi sebelah kiri, pilih **Peran**.

   1. Pilih ***AmazonEKS\$1EBS\$1CSI\$1DriverRole***di konsol untuk membukanya untuk diedit.

   1. **Dari daftar tarik-turun **Tambahkan izin**, pilih Lampirkan kebijakan.**

   1. Di dalam kotak **Filter kebijakan**, masukkan *KMS\$1Key\$1For\$1Encryption\$1On\$1EBS\$1Policy*.

   1. Pilih kotak centang di sebelah kiri *KMS\$1Key\$1For\$1Encryption\$1On\$1EBS\$1Policy* yang dikembalikan dalam pencarian.

   1. Pilih **Lampirkan kebijakan**.

### AWS CLI
<a name="awscli_store_app_data"></a>

1. Lihat URL penyedia OIDC klaster Anda. Ganti *my-cluster* dengan nama klaster Anda. Jika output dari perintah adalah `None`, tinjau **Prasyarat**.

   ```
   aws eks describe-cluster --name my-cluster --query "cluster.identity.oidc.issuer" --output text
   ```

   Contoh output adalah sebagai berikut.

   ```
   https://oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE
   ```

1. Buat peran IAM, berikan tindakan. `AssumeRoleWithWebIdentity`

   1. Salin konten berikut ke file yang diberi nama`aws-ebs-csi-driver-trust-policy.json`. Ganti *111122223333* dengan ID akun Anda. Ganti *EXAMPLED539D4633E53DE1B71EXAMPLE* dan *region-code* dengan nilai yang dikembalikan pada langkah sebelumnya.

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

   1. Buat peran. Anda dapat mengubah *AmazonEKS\$1EBS\$1CSI\$1DriverRole* ke nama yang berbeda. Jika Anda mengubahnya, pastikan untuk mengubahnya di langkah selanjutnya.

      ```
      aws iam create-role \
            --role-name AmazonEKS_EBS_CSI_DriverRole \
            --assume-role-policy-document file://"aws-ebs-csi-driver-trust-policy.json"
      ```

1. Lampirkan kebijakan. AWS mempertahankan kebijakan AWS terkelola atau Anda dapat membuat kebijakan kustom Anda sendiri. Lampirkan kebijakan AWS terkelola ke peran dengan perintah berikut.

   ```
   aws iam attach-role-policy \
         --policy-arn arn:aws: iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy \
         --role-name AmazonEKS_EBS_CSI_DriverRole
   ```

1. Jika Anda menggunakan [kunci KMS](https://aws.amazon.com/kms/) khusus untuk enkripsi pada volume Amazon EBS Anda, sesuaikan peran IAM sesuai kebutuhan. Sebagai contoh, lakukan hal berikut:

   1. Salin dan tempel kode berikut ke `kms-key-for-encryption-on-ebs.json` file baru. Ganti *custom-key-arn* dengan [ARN kunci KMS](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awskeymanagementservice.html#awskeymanagementservice-key) kustom.

      ```
      {
            "Version":"2012-10-17",		 	 	 
            "Statement": [
              {
                "Effect": "Allow",
                "Action": [
                  "kms:CreateGrant",
                  "kms:ListGrants",
                  "kms:RevokeGrant"
                ],
                "Resource": ["arn:aws:kms:us-east-1:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab"],
                "Condition": {
                  "Bool": {
                    "kms:GrantIsForAWSResource": "true"
                  }
                }
              },
              {
                "Effect": "Allow",
                "Action": [
                  "kms:Encrypt",
                  "kms:Decrypt",
                  "kms:ReEncrypt*",
                  "kms:GenerateDataKey*",
                  "kms:DescribeKey"
                ],
                "Resource": ["arn:aws:kms:us-east-1:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab"]
              }
            ]
          }
      ```

   1. Buat kebijakan. Anda dapat mengubah *KMS\$1Key\$1For\$1Encryption\$1On\$1EBS\$1Policy* ke nama yang berbeda. Namun, jika Anda melakukannya, pastikan untuk mengubahnya di langkah selanjutnya juga.

      ```
      aws iam create-policy \
            --policy-name KMS_Key_For_Encryption_On_EBS_Policy \
            --policy-document file://kms-key-for-encryption-on-ebs.json
      ```

   1. Lampirkan kebijakan IAM ke peran dengan perintah berikut. Ganti *111122223333* dengan ID akun Anda.

      ```
      aws iam attach-role-policy \
            --policy-arn arn:aws: iam::111122223333:policy/KMS_Key_For_Encryption_On_EBS_Policy \
            --role-name AmazonEKS_EBS_CSI_DriverRole
      ```

Sekarang setelah Anda membuat peran IAM driver Amazon EBS CSI, Anda dapat melanjutkan ke bagian berikutnya. Saat Anda menerapkan add-on dengan peran IAM ini, ia membuat dan dikonfigurasi untuk menggunakan akun layanan yang diberi nama. `ebs-csi-controller-sa` Akun layanan terikat pada Kubernetes yang diberi izin Kubernetes `clusterrole` yang diperlukan.

## Langkah 2: Dapatkan driver Amazon EBS CSI
<a name="managing-ebs-csi"></a>

Kami menyarankan Anda menginstal driver Amazon EBS CSI melalui add-on Amazon EKS untuk meningkatkan keamanan dan mengurangi jumlah pekerjaan. Untuk menambahkan add-on Amazon EKS ke cluster Anda, lihat[Buat add-on Amazon EKS](creating-an-add-on.md). Untuk informasi selengkapnya tentang add-on, lihat[Add-on Amazon EKS](eks-add-ons.md).

**penting**  
Sebelum menambahkan driver Amazon EBS sebagai add-on Amazon EKS, konfirmasikan bahwa Anda tidak memiliki versi driver yang dikelola sendiri yang diinstal pada cluster Anda. Jika demikian, lihat [Menghapus instalasi driver Amazon EBS CSI yang dikelola sendiri](https://github.com/kubernetes-sigs/aws-ebs-csi-driver/blob/master/docs/install.md#uninstalling-the-ebs-csi-driver). GitHub

**catatan**  
Secara default, peran RBAC yang digunakan oleh EBS CSI memiliki izin untuk mengubah node untuk mendukung fitur penghapusan taint-nya. Karena keterbatasan Kubernetes RBAC, ini juga memungkinkannya untuk memutasi Node lain di cluster. Bagan Helm memiliki parameter (`node.serviceAccount.disableMutation`) yang menonaktifkan izin Node RBAC yang bermutasi untuk akun layanan. ebs-csi-node Saat diaktifkan, fitur driver seperti penghapusan taint tidak akan berfungsi.

[Atau, jika Anda ingin instalasi yang dikelola sendiri dari driver Amazon EBS CSI, lihat Instalasi aktif.](https://github.com/kubernetes-sigs/aws-ebs-csi-driver/blob/master/docs/install.md) GitHub

## Langkah 3: Menyebarkan aplikasi sampel
<a name="ebs-sample-app"></a>

Anda dapat menerapkan berbagai contoh aplikasi dan memodifikasinya sesuai kebutuhan. Untuk informasi selengkapnya, lihat Contoh [Kubernetes di.](https://github.com/kubernetes-sigs/aws-ebs-csi-driver/tree/master/examples/kubernetes) GitHub

# Gunakan penyimpanan sistem file elastis dengan Amazon EFS
<a name="efs-csi"></a>

 [Amazon Elastic File System](https://docs.aws.amazon.com/efs/latest/ug/whatisefs.html) (Amazon EFS) menyediakan penyimpanan file tanpa server dan sepenuhnya elastis sehingga Anda dapat berbagi data file tanpa menyediakan atau mengelola kapasitas dan kinerja penyimpanan. [Driver Amazon EFS Container Storage Interface (CSI)](https://github.com/kubernetes-sigs/aws-efs-csi-driver) menyediakan antarmuka CSI yang memungkinkan cluster Kubernetes berjalan untuk AWS mengelola siklus hidup sistem file Amazon EFS. Topik ini menunjukkan cara menerapkan driver Amazon EFS CSI ke cluster Amazon EKS Anda.

## Pertimbangan-pertimbangan
<a name="efs-csi-considerations"></a>
+ Driver Amazon EFS CSI tidak kompatibel dengan gambar kontainer berbasis Windows.
+ [Anda tidak dapat menggunakan [penyediaan dinamis untuk volume persisten dengan](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/examples/kubernetes/dynamic_provisioning/README.md) node Fargate, tetapi Anda dapat menggunakan penyediaan statis.](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/examples/kubernetes/static_provisioning/README.md)
+  [Penyediaan dinamis](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/examples/kubernetes/dynamic_provisioning/README.md) membutuhkan [1.2](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/CHANGELOG-1.x.md#v12) atau lebih baru dari driver. Anda dapat menggunakan [penyediaan statis](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/examples/kubernetes/static_provisioning/README.md) untuk volume persisten menggunakan versi driver pada `1.1` versi kluster Amazon EKS yang didukung (lihat versi yang [didukung Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/kubernetes-versions.html)).
+ Versi [1.3.2](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/CHANGELOG-1.x.md#v132) atau yang lebih baru dari driver ini mendukung arsitektur Arm64, termasuk instance berbasis Amazon EC2 Graviton.
+ Versi [1.4.2](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/CHANGELOG-1.x.md#v142) atau yang lebih baru dari driver ini mendukung penggunaan FIPS untuk memasang sistem file.
+ Catat kuota sumber daya untuk Amazon EFS. Misalnya, ada kuota 1000 titik akses yang dapat dibuat untuk setiap sistem file Amazon EFS. Untuk informasi selengkapnya, lihat [Kuota sumber daya Amazon EFS yang tidak dapat Anda ubah](https://docs.aws.amazon.com/efs/latest/ug/limits.html#limits-efs-resources-per-account-per-region).
+ Mulai versi [2.0.0](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/CHANGELOG-2.x.md#v200), driver ini beralih dari menggunakan `stunnel` ke `efs-proxy` koneksi TLS. Ketika `efs-proxy` digunakan, itu akan membuka sejumlah thread yang sama dengan satu ditambah jumlah core untuk node yang sedang berjalan.
+ Driver Amazon EFS CSI tidak kompatibel dengan Amazon EKS Hybrid Nodes.

## Prasyarat
<a name="efs-csi-prereqs"></a>
+ Driver Amazon EFS CSI memerlukan izin AWS Identity and Access Management (IAM).
  +  AWS menyarankan menggunakan EKS Pod Identities. Untuk informasi selengkapnya, lihat [Ikhtisar pengaturan EKS Pod Identities](pod-identities.md#pod-id-setup-overview).
  + Untuk informasi tentang peran IAM untuk akun layanan dan menyiapkan penyedia IAM OpenID Connect (OIDC) untuk klaster Anda, lihat. [Buat penyedia IAM OIDC untuk klaster Anda](enable-iam-roles-for-service-accounts.md)
+ Versi `2.12.3` atau yang lebih baru atau versi `1.27.160` atau yang lebih baru dari AWS Command Line Interface (AWS CLI) diinstal dan dikonfigurasi pada perangkat Anda atau. AWS CloudShell Untuk memeriksa versi Anda saat ini, gunakan`aws --version | cut -d / -f2 | cut -d ' ' -f1`. Package manager seperti `yum``apt-get`,, atau Homebrew untuk macOS seringkali merupakan beberapa versi di belakang versi terbaru CLI. AWS Untuk menginstal versi terbaru, lihat [Menginstal](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) dan [Konfigurasi cepat dengan aws configure](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-config) di *Panduan Pengguna Antarmuka Baris AWS Perintah*. Versi AWS CLI yang diinstal AWS CloudShell mungkin juga beberapa versi di belakang versi terbaru. Untuk memperbaruinya, lihat [Menginstal AWS CLI ke direktori home Anda](https://docs.aws.amazon.com/cloudshell/latest/userguide/vm-specs.html#install-cli-software) di * AWS CloudShell Panduan Pengguna*.
+ Alat baris `kubectl` perintah diinstal pada perangkat Anda atau AWS CloudShell. Versinya bisa sama dengan atau hingga satu versi minor lebih awal atau lebih lambat dari versi Kubernetes dari klaster Anda. Misalnya, jika versi cluster Anda`1.29`, Anda dapat menggunakan `kubectl` versi`1.28`,`1.29`, atau `1.30` dengan itu. Untuk menginstal atau memutakhirkan `kubectl`, lihat [Mengatur `kubectl` dan `eksctl`](install-kubectl.md).

**catatan**  
Pod yang berjalan di Fargate secara otomatis memasang sistem file Amazon EFS, tanpa memerlukan langkah penginstalan driver secara manual.

## Langkah 1: Buat peran IAM
<a name="efs-create-iam-resources"></a>

Driver Amazon EFS CSI memerlukan izin IAM untuk berinteraksi dengan sistem file Anda. Buat peran IAM dan lampirkan kebijakan AWS terkelola yang diperlukan padanya. Untuk menerapkan prosedur ini, Anda dapat menggunakan salah satu alat ini:
+  [`eksctl`](#eksctl_efs_store_app_data) 
+  [Konsol Manajemen AWS](#console_efs_store_app_data) 
+  [AWS CLI](#awscli_efs_store_app_data) 

**catatan**  
Langkah-langkah spesifik dalam prosedur ini ditulis untuk menggunakan driver sebagai add-on Amazon EKS. Untuk detail tentang penginstalan yang dikelola sendiri, lihat [Mengatur izin driver](https://github.com/kubernetes-sigs/aws-efs-csi-driver#set-up-driver-permission) pada. GitHub

### `eksctl`
<a name="eksctl_efs_store_app_data"></a>

#### Jika menggunakan Identitas Pod
<a name="efs-eksctl-pod-identities"></a>

Jalankan perintah berikut untuk membuat peran IAM dan asosiasi Pod Identity dengan`eksctl`. Ganti `my-cluster` dengan nama klaster Anda. Anda juga dapat mengganti `AmazonEKS_EFS_CSI_DriverRole` dengan nama yang berbeda.

```
export cluster_name=my-cluster
export role_name=AmazonEKS_EFS_CSI_DriverRole
eksctl create podidentityassociation \
    --service-account-name efs-csi-controller-sa \
    --namespace kube-system \
    --cluster $cluster_name \
    --role-name $role_name \
    --permission-policy-arns arn:aws: iam::aws:policy/service-role/AmazonEFSCSIDriverPolicy
```

#### Jika menggunakan peran IAM untuk akun layanan
<a name="efs-eksctl-irsa"></a>

Jalankan perintah berikut untuk membuat peran IAM dengan`eksctl`. Ganti `my-cluster` dengan nama klaster Anda. Anda juga dapat mengganti `AmazonEKS_EFS_CSI_DriverRole` dengan nama yang berbeda.

```
export cluster_name=my-cluster
export role_name=AmazonEKS_EFS_CSI_DriverRole
eksctl create iamserviceaccount \
    --name efs-csi-controller-sa \
    --namespace kube-system \
    --cluster $cluster_name \
    --role-name $role_name \
    --role-only \
    --attach-policy-arn arn:aws: iam::aws:policy/service-role/AmazonEFSCSIDriverPolicy \
    --approve
TRUST_POLICY=$(aws iam get-role --output json --role-name $role_name --query 'Role.AssumeRolePolicyDocument' | \
    sed -e 's/efs-csi-controller-sa/efs-csi-*/' -e 's/StringEquals/StringLike/')
aws iam update-assume-role-policy --role-name $role_name --policy-document "$TRUST_POLICY"
```

### Konsol Manajemen AWS
<a name="console_efs_store_app_data"></a>

Jalankan berikut ini untuk membuat peran IAM dengan Konsol Manajemen AWS.

1. Buka konsol IAM di https://console.aws.amazon.com/iam/.

1. Di panel navigasi sebelah kiri, pilih **Peran**.

1. Pada halaman **Peran**, pilih **Buat peran**.

1. Pada halaman **Pilih entitas tepercaya**, lakukan hal berikut:

   1. Jika menggunakan Identitas Pod EKS:

      1. Di bagian **Jenis entitas tepercaya**, pilih ** AWS layanan**.

      1. Dalam tarik-turun **Layanan atau kasus penggunaan**, pilih **EKS**.

      1. Di bagian **Use case**, pilih **EKS - Pod Identity**.

      1. Pilih **Berikutnya**.

   1. Jika menggunakan peran IAM untuk akun layanan:

      1. Di bagian **Jenis entitas tepercaya**, pilih **Identitas web**.

      1. Untuk **penyedia Identity**, pilih **URL penyedia OpenID Connect** untuk klaster Anda (seperti yang ditunjukkan di bawah **Ikhtisar** di Amazon EKS).

      1. Untuk **Audiens**, pilih `sts.amazonaws.com`.

      1. Pilih **Berikutnya**.

1. Pada halaman **Tambahkan izin**, lakukan hal berikut:

   1. Di dalam kotak **Filter kebijakan**, masukkan `AmazonEFSCSIDriverPolicy`.

   1. Pilih kotak centang di sebelah kiri yang `AmazonEFSCSIDriverPolicy` dikembalikan dalam pencarian.

   1. Pilih **Berikutnya**.

1. Pada halaman **Nama, tinjau, dan buat**, lakukan hal berikut:

   1. Untuk **nama Peran**, masukkan nama unik untuk peran Anda, seperti`AmazonEKS_EFS_CSI_DriverRole`.

   1. Di bawah **Tambahkan tag (Opsional)**, tambahkan metadata ke peran dengan melampirkan tag sebagai pasangan nilai kunci. Untuk informasi selengkapnya tentang penggunaan tanda di IAM, lihat [Menandai sumber daya IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html) di *Panduan Pengguna IAM*.

   1. Pilih **Buat peran**.

1. Setelah peran dibuat:

   1. Jika menggunakan Identitas Pod EKS:

      1. Buka [konsol Amazon EKS](https://console.aws.amazon.com/eks/home#/clusters).

      1. Di panel navigasi kiri, pilih **Clusters**, lalu pilih nama cluster yang ingin Anda konfigurasikan untuk asosiasi EKS Pod Identity.

      1. Pilih tab **Access**.

      1. Dalam **asosiasi Pod Identity**, pilih **Create**.

      1. Pilih dropdown **peran IAM** dan pilih peran yang baru Anda buat.

      1. Pilih kolom **namespace Kubernetes dan masukan**. `kube-system`

      1. Pilih kolom **akun layanan Kubernetes dan** masukan. `efs-csi-controller-sa`

      1. Pilih **Buat**.

      1. Untuk informasi selengkapnya tentang membuat asosiasi Pod Identity, lihat[Membuat asosiasi Pod Identity (AWS Console)](pod-id-association.md#pod-id-association-create).

   1. Jika menggunakan peran IAM untuk akun layanan:

      1. Pilih peran untuk membukanya untuk diedit.

      1. Pilih tab **Trust relationship**, lalu pilih **Edit trust policy**.

      1. Temukan garis yang terlihat mirip dengan baris berikut:

         ```
         "oidc.eks.region-code.amazonaws.com/id/<EXAMPLED539D4633E53DE1B71EXAMPLE>:aud": "sts.amazonaws.com"
         ```

         Tambahkan baris berikut di atas baris sebelumnya. Ganti `<region-code>` dengan AWS Wilayah tempat cluster Anda berada. Ganti `<EXAMPLED539D4633E53DE1B71EXAMPLE>` dengan ID penyedia OIDC cluster Anda.

         ```
         "oidc.eks.<region-code>.amazonaws.com/id/<EXAMPLED539D4633E53DE1B71EXAMPLE>:sub": "system:serviceaccount:kube-system:efs-csi-*",
         ```

      1. Ubah `Condition` operator dari `"StringEquals"` ke`"StringLike"`.

      1. Pilih **Perbarui kebijakan** untuk menyelesaikan.

### AWS CLI
<a name="awscli_efs_store_app_data"></a>

Jalankan perintah berikut untuk membuat peran IAM dengan AWS CLI.

#### Jika menggunakan Identitas Pod
<a name="efs-cli-pod-identities"></a>

1. Buat peran IAM yang memberikan `AssumeRole` dan `TagSession` tindakan ke layanan. `pods.eks.amazonaws.com`

   1. Salin isi berikut ke file bernama `aws-efs-csi-driver-trust-policy-pod-identity.json`.

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Sid": "AllowEksAuthToAssumeRoleForPodIdentity",
                  "Effect": "Allow",
                  "Principal": {
                      "Service": "pods.eks.amazonaws.com"
                  },
                  "Action": [
                      "sts:AssumeRole",
                      "sts:TagSession"
                  ]
              }
          ]
      }
      ```

   1. Buat peran. Ganti `my-cluster` dengan nama klaster Anda. Anda juga dapat mengganti `AmazonEKS_EFS_CSI_DriverRole` dengan nama yang berbeda.

      ```
      export cluster_name=my-cluster
      export role_name=AmazonEKS_EFS_CSI_DriverRole
      aws iam create-role \
        --role-name $role_name \
        --assume-role-policy-document file://"aws-efs-csi-driver-trust-policy-pod-identity.json"
      ```

1. Lampirkan kebijakan AWS terkelola yang diperlukan ke peran dengan perintah berikut.

   ```
   aws iam attach-role-policy \
     --policy-arn arn:aws: iam::aws:policy/service-role/AmazonEFSCSIDriverPolicy \
     --role-name $role_name
   ```

1. Jalankan perintah berikut untuk membuat asosiasi Pod Identity. Ganti ` arn:aws: iam::<111122223333>:role/my-role` dengan peran yang dibuat pada langkah sebelumnya.

   ```
   aws eks create-pod-identity-association --cluster-name $cluster_name --role-arn {arn-aws}iam::<111122223333>:role/my-role --namespace kube-system --service-account efs-csi-controller-sa
   ```

1. Untuk informasi selengkapnya tentang membuat asosiasi Pod Identity, lihat[Membuat asosiasi Pod Identity (AWS Console)](pod-id-association.md#pod-id-association-create).

#### Jika menggunakan peran IAM untuk akun layanan
<a name="efs-cli-irsa"></a>

1. Lihat URL penyedia OIDC klaster Anda. Ganti `my-cluster` dengan nama klaster Anda. Anda juga dapat mengganti `AmazonEKS_EFS_CSI_DriverRole` dengan nama yang berbeda.

   ```
   export cluster_name=my-cluster
   export role_name=AmazonEKS_EFS_CSI_DriverRole
   aws eks describe-cluster --name $cluster_name --query "cluster.identity.oidc.issuer" --output text
   ```

   Contoh output adalah sebagai berikut.

   ```
   https://oidc.eks.<region-code>.amazonaws.com/id/<EXAMPLED539D4633E53DE1B71EXAMPLE>
   ```

   Jika output dari perintah adalah `None`, tinjau **Prasyarat**.

1. Buat peran IAM yang memberikan tindakan. `AssumeRoleWithWebIdentity`

   1. Salin isi berikut ke file bernama `aws-efs-csi-driver-trust-policy.json`. Ganti `<111122223333>` dengan ID akun Anda. Ganti `<EXAMPLED539D4633E53DE1B71EXAMPLE>` dan `<region-code>` dengan nilai yang dikembalikan pada langkah sebelumnya.

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
              "Federated": "arn:aws:iam::123456789012:oidc-provider/oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE"
            },
            "Action": "sts:AssumeRoleWithWebIdentity",
            "Condition": {
              "StringLike": {
                "oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:sub": "system:serviceaccount:kube-system:efs-csi-*",
                "oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:aud": "sts.amazonaws.com"
              }
            }
          }
        ]
      }
      ```

   1. Buat peran.

      ```
      aws iam create-role \
        --role-name $role_name \
        --assume-role-policy-document file://"aws-efs-csi-driver-trust-policy.json"
      ```

1. Lampirkan kebijakan AWS terkelola yang diperlukan ke peran dengan perintah berikut.

   ```
   aws iam attach-role-policy \
     --policy-arn arn:aws: iam::aws:policy/service-role/AmazonEFSCSIDriverPolicy \
     --role-name $role_name
   ```

## Langkah 2: Dapatkan driver Amazon EFS CSI
<a name="efs-install-driver"></a>

Kami menyarankan Anda menginstal driver Amazon EFS CSI melalui add-on Amazon EKS. Untuk menambahkan add-on Amazon EKS ke cluster Anda, lihat[Buat add-on Amazon EKS](creating-an-add-on.md). Untuk informasi selengkapnya tentang add-on, lihat[Add-on Amazon EKS](eks-add-ons.md). Jika Anda tidak dapat menggunakan add-on Amazon EKS, kami mendorong Anda untuk mengirimkan masalah tentang mengapa Anda tidak dapat ke repositori [peta jalan GitHub Containers](https://github.com/aws/containers-roadmap/issues).

**penting**  
Sebelum menambahkan driver Amazon EFS sebagai add-on Amazon EKS, konfirmasikan bahwa Anda tidak memiliki versi driver yang dikelola sendiri yang diinstal di cluster Anda. Jika demikian, lihat [Menghapus Instalasi Driver Amazon EFS CSI](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/docs/README.md#uninstalling-the-amazon-efs-csi-driver) di. GitHub

Atau, jika Anda ingin instalasi yang dikelola sendiri dari driver Amazon EFS CSI, lihat [Instalasi](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/docs/README.md#installation) aktif. GitHub

## Langkah 3: Buat sistem file Amazon EFS
<a name="efs-create-filesystem"></a>

Untuk membuat sistem file Amazon EFS, lihat [Membuat sistem file Amazon EFS untuk Amazon EKS](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/docs/efs-create-filesystem.md) di GitHub.

## Langkah 4: Menyebarkan aplikasi sampel
<a name="efs-sample-app"></a>

Anda dapat menerapkan berbagai contoh aplikasi dan memodifikasinya sesuai kebutuhan. Untuk informasi selengkapnya, lihat [Contoh](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/docs/README.md#examples) di GitHub.

# Gunakan penyimpanan aplikasi berkinerja tinggi dengan Amazon FSx untuk Lustre
<a name="fsx-csi"></a>

[Driver Amazon FSx for Lustre Container Storage Interface (CSI)](https://github.com/kubernetes-sigs/aws-fsx-csi-driver) menyediakan antarmuka CSI yang memungkinkan kluster Amazon EKS mengelola siklus hidup Amazon untuk sistem file Lustre. FSx Untuk informasi selengkapnya, lihat [Panduan Pengguna Amazon FSx for Lustre](https://docs.aws.amazon.com/fsx/latest/LustreGuide/what-is.html).

Untuk detail tentang cara menerapkan driver Amazon FSx for Lustre CSI ke kluster Amazon EKS Anda dan memverifikasi apakah itu berfungsi, lihat. [Menyebarkan driver FSx untuk Lustre](fsx-csi-create.md)

# Menyebarkan driver FSx untuk Lustre
<a name="fsx-csi-create"></a>

Topik ini menunjukkan cara menerapkan driver [FSx for Lustre CSI ke](fsx-csi.md) cluster Amazon EKS Anda dan memverifikasi bahwa itu berfungsi. Kami merekomendasikan menggunakan versi driver terbaru. Untuk versi yang tersedia, lihat [Matriks Kompatibilitas Spesifikasi CSI](https://github.com/kubernetes-sigs/aws-fsx-csi-driver/blob/master/docs/README.md#csi-specification-compatibility-matrix) pada GitHub.

**catatan**  
Driver tidak didukung di Fargate atau Amazon EKS Hybrid Nodes.

Untuk deskripsi rinci tentang parameter yang tersedia dan contoh lengkap yang menunjukkan fitur pengemudi, lihat proyek driver [FSx untuk Lustre Container Storage Interface (CSI)](https://github.com/kubernetes-sigs/aws-fsx-csi-driver) di. GitHub

## Prasyarat
<a name="fsx-csi-prereqs"></a>
+ Sebuah klaster yang sudah ada.
+ Add-on Amazon FSx CSI Driver EKS memerlukan agen EKS Pod Identity untuk otentikasi. Tanpa komponen ini, add-on akan gagal dengan kesalahan`Amazon EKS Pod Identity agent is not installed in the cluster`, mencegah operasi volume. Instal agen Pod Identity sebelum atau sesudah menerapkan add-on Driver FSx CSI. Untuk informasi selengkapnya, lihat [Siapkan Agen Identitas Amazon EKS Pod](pod-id-agent-setup.md).
+ Versi `2.12.3` atau yang lebih baru atau versi `1.27.160` atau yang lebih baru dari AWS Command Line Interface (AWS CLI) diinstal dan dikonfigurasi pada perangkat Anda atau. AWS CloudShell Untuk memeriksa versi Anda saat ini, gunakan`aws --version | cut -d / -f2 | cut -d ' ' -f1`. Package manager seperti `yum``apt-get`,, atau Homebrew untuk macOS seringkali merupakan beberapa versi di belakang versi terbaru CLI. AWS Untuk menginstal versi terbaru, lihat [Menginstal](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) dan [Konfigurasi cepat dengan aws configure](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-config) di *Panduan Pengguna Antarmuka Baris AWS Perintah*. Versi AWS CLI yang diinstal AWS CloudShell mungkin juga beberapa versi di belakang versi terbaru. Untuk memperbaruinya, lihat [Menginstal AWS CLI ke direktori home Anda](https://docs.aws.amazon.com/cloudshell/latest/userguide/vm-specs.html#install-cli-software) di * AWS CloudShell Panduan Pengguna*.
+ Versi `0.215.0` atau yang lebih baru dari alat baris `eksctl` perintah yang diinstal pada perangkat Anda atau AWS CloudShell. Untuk menginstal atau memperbarui`eksctl`, lihat [Instalasi](https://eksctl.io/installation) dalam `eksctl` dokumentasi.
+ Alat baris `kubectl` perintah diinstal pada perangkat Anda atau AWS CloudShell. Versinya bisa sama dengan atau hingga satu versi minor lebih awal atau lebih lambat dari versi Kubernetes dari klaster Anda. Misalnya, jika versi cluster Anda`1.29`, Anda dapat menggunakan `kubectl` versi`1.28`,`1.29`, atau `1.30` dengan itu. Untuk menginstal atau memutakhirkan `kubectl`, lihat [Mengatur `kubectl` dan `eksctl`](install-kubectl.md).

## Langkah 1: Buat peran IAM
<a name="fsx-create-iam-role"></a>

Plugin Amazon FSx CSI memerlukan izin IAM untuk melakukan panggilan AWS APIs atas nama Anda.

**catatan**  
Pod akan memiliki akses ke izin yang ditetapkan ke peran IAM kecuali Anda memblokir akses ke IMDS. Untuk informasi selengkapnya, lihat [Amankan kluster Amazon EKS dengan praktik terbaik](security-best-practices.md).

Prosedur berikut menunjukkan cara membuat peran IAM dan melampirkan kebijakan AWS terkelola padanya.

1. Buat peran IAM dan lampirkan kebijakan AWS terkelola dengan perintah berikut. Ganti `my-cluster` dengan nama cluster yang ingin Anda gunakan. Perintah menyebarkan AWS CloudFormation tumpukan yang membuat peran IAM dan melampirkan kebijakan IAM padanya.

   ```
   eksctl create iamserviceaccount \
       --name fsx-csi-controller-sa \
       --namespace kube-system \
       --cluster my-cluster \
       --role-name AmazonEKS_FSx_CSI_DriverRole \
       --role-only \
       --attach-policy-arn arn:aws: iam::aws:policy/AmazonFSxFullAccess \
       --approve
   ```

   Anda akan melihat beberapa baris output saat akun layanan dibuat. Baris output terakhir mirip dengan yang berikut ini.

   ```
   [ℹ]  1 task: {
       2 sequential sub-tasks: {
           create IAM role for serviceaccount "kube-system/fsx-csi-controller-sa",
           create serviceaccount "kube-system/fsx-csi-controller-sa",
       } }
   [ℹ]  building iamserviceaccount stack "eksctl-my-cluster-addon-iamserviceaccount-kube-system-fsx-csi-controller-sa"
   [ℹ]  deploying stack "eksctl-my-cluster-addon-iamserviceaccount-kube-system-fsx-csi-controller-sa"
   [ℹ]  waiting for CloudFormation stack "eksctl-my-cluster-addon-iamserviceaccount-kube-system-fsx-csi-controller-sa"
   [ℹ]  created serviceaccount "kube-system/fsx-csi-controller-sa"
   ```

   Perhatikan nama AWS CloudFormation tumpukan yang digunakan. Dalam contoh output sebelumnya, tumpukan diberi nama`eksctl-my-cluster-addon-iamserviceaccount-kube-system-fsx-csi-controller-sa`.

Sekarang setelah Anda membuat peran IAM driver Amazon FSx CSI, Anda dapat melanjutkan ke bagian berikutnya. Saat Anda menerapkan add-on dengan peran IAM ini, ia membuat dan dikonfigurasi untuk menggunakan akun layanan yang diberi nama. `fsx-csi-controller-sa` Akun layanan terikat pada Kubernetes yang diberi izin Kubernetes `clusterrole` yang diperlukan.

## Langkah 2: Instal driver Amazon FSx CSI
<a name="fsx-csi-deploy-driver"></a>

Kami menyarankan Anda menginstal driver Amazon FSx CSI melalui add-on Amazon EKS untuk meningkatkan keamanan dan mengurangi jumlah pekerjaan. Untuk menambahkan add-on Amazon EKS ke cluster Anda, lihat[Buat add-on Amazon EKS](creating-an-add-on.md). Untuk informasi selengkapnya tentang add-on, lihat[Add-on Amazon EKS](eks-add-ons.md).

**penting**  
Instalasi driver Amazon FSx CSI yang sudah ada sebelumnya di cluster dapat menyebabkan kegagalan instalasi add-on. Saat Anda mencoba menginstal versi add-on Amazon EKS saat Driver FSx CSI non-EKS ada, penginstalan akan gagal karena konflik sumber daya. Gunakan `OVERWRITE` bendera selama instalasi untuk mengatasi masalah ini.  

```
aws eks create-addon --addon-name aws-fsx-csi-driver --cluster-name my-cluster --resolve-conflicts OVERWRITE
```

Atau, jika Anda menginginkan penginstalan driver Amazon FSx CSI yang dikelola sendiri, lihat [Instalasi](https://github.com/kubernetes-sigs/aws-fsx-csi-driver/blob/master/docs/install.md) aktif. GitHub

## Langkah 3: Menerapkan kelas penyimpanan, klaim volume persisten, dan aplikasi sampel
<a name="fsx-csi-deploy-storage-class"></a>

Prosedur ini menggunakan GitHub repositori [driver FSx for Lustre Container Storage Interface (CSI)](https://github.com/kubernetes-sigs/aws-fsx-csi-driver) untuk menggunakan volume Lustre yang disediakan secara dinamis. FSx 

1. Perhatikan grup keamanan untuk klaster Anda. Anda dapat melihatnya di Konsol Manajemen AWS bawah bagian **Jaringan** atau dengan menggunakan perintah AWS CLI berikut. Ganti `my-cluster` dengan nama cluster yang ingin Anda gunakan.

   ```
   aws eks describe-cluster --name my-cluster --query cluster.resourcesVpcConfig.clusterSecurityGroupId
   ```

1. Buat grup keamanan untuk sistem FSx file Amazon Anda sesuai dengan kriteria yang ditampilkan di [Grup Keamanan VPC Amazon](https://docs.aws.amazon.com/fsx/latest/LustreGuide/limit-access-security-groups.html#fsx-vpc-security-groups) di Panduan Pengguna Amazon FSx untuk Lustre. **Untuk **VPC, pilih VPC** cluster Anda seperti yang ditunjukkan di bawah bagian Networking.** Untuk “grup keamanan yang terkait dengan klien Lustre Anda”, gunakan grup keamanan klaster Anda. Anda dapat meninggalkan aturan keluar sendiri untuk memungkinkan **Semua lalu lintas**.

1. Unduh manifes kelas penyimpanan dengan perintah berikut.

   ```
   curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-fsx-csi-driver/master/examples/kubernetes/dynamic_provisioning/specs/storageclass.yaml
   ```

1. Edit bagian parameter `storageclass.yaml` file. Ganti setiap nilai contoh dengan nilai Anda sendiri.

   ```
   parameters:
     subnetId: subnet-0eabfaa81fb22bcaf
     securityGroupIds: sg-068000ccf82dfba88
     deploymentType: PERSISTENT_1
     automaticBackupRetentionDays: "1"
     dailyAutomaticBackupStartTime: "00:00"
     copyTagsToBackups: "true"
     perUnitStorageThroughput: "200"
     dataCompressionType: "NONE"
     weeklyMaintenanceStartTime: "7:09:00"
     fileSystemTypeVersion: "2.12"
   ```
   +  **`subnetId`**— ID subnet tempat sistem file Amazon FSx untuk Lustre harus dibuat. Amazon FSx for Lustre tidak didukung di semua Availability Zone. Buka konsol Amazon FSx for Lustre di https://console.aws.amazon.com/fsx/ untuk mengonfirmasi bahwa subnet yang ingin Anda gunakan berada di Availability Zone yang didukung. Subnet dapat menyertakan node Anda, atau dapat berupa subnet atau VPC yang berbeda:
     + Anda dapat memeriksa subnet node di Konsol Manajemen AWS dengan memilih grup node di bawah bagian **Compute**.
     + Jika subnet yang Anda tentukan bukan subnet yang sama dengan yang Anda miliki node, maka Anda VPCs harus [terhubung](https://docs.aws.amazon.com/whitepapers/latest/aws-vpc-connectivity-options/amazon-vpc-to-amazon-vpc-connectivity-options.html), dan Anda harus memastikan bahwa Anda memiliki port yang diperlukan terbuka di grup keamanan Anda.
   +  **`securityGroupIds`**— ID grup keamanan yang Anda buat untuk sistem file.
   +  **`deploymentType`(opsional)** — Jenis penyebaran sistem file. Nilai yang valid adalah `SCRATCH_1`, `SCRATCH_2`, `PERSISTENT_1`, dan `PERSISTENT_2`. Untuk informasi selengkapnya tentang jenis penerapan, lihat [Membuat sistem file Amazon FSx untuk Lustre](https://docs.aws.amazon.com/fsx/latest/LustreGuide/getting-started-step1.html).
   +  **parameter lain (opsional)** — Untuk informasi tentang parameter lainnya, lihat [ StorageClassMengedit](https://github.com/kubernetes-sigs/aws-fsx-csi-driver/tree/master/examples/kubernetes/dynamic_provisioning#edit-storageclass) GitHub.

1. Buat manifes kelas penyimpanan.

   ```
   kubectl apply -f storageclass.yaml
   ```

   Contoh output adalah sebagai berikut.

   ```
   storageclass.storage.k8s.io/fsx-sc created
   ```

1. Unduh manifes klaim volume persisten.

   ```
   curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-fsx-csi-driver/master/examples/kubernetes/dynamic_provisioning/specs/claim.yaml
   ```

1. (Opsional) Edit file `claim.yaml`. Ubah `1200Gi` ke salah satu nilai kenaikan berikut, berdasarkan kebutuhan penyimpanan Anda dan `deploymentType` yang Anda pilih pada langkah sebelumnya.

   ```
   storage: 1200Gi
   ```
   +  `SCRATCH_2`dan `PERSISTENT` —`1.2 TiB`,`2.4 TiB`, atau kenaikan 2,4 TiB lebih dari 2,4 TiB.
   +  `SCRATCH_1`—`1.2 TiB`,, `2.4 TiB``3.6 TiB`, atau kenaikan 3,6 TiB lebih dari 3,6 TiB.

1. Buat klaim volume persisten.

   ```
   kubectl apply -f claim.yaml
   ```

   Contoh output adalah sebagai berikut.

   ```
   persistentvolumeclaim/fsx-claim created
   ```

1. Konfirmasikan bahwa sistem file disediakan.

   ```
   kubectl describe pvc
   ```

   Contoh output adalah sebagai berikut.

   ```
   Name:          fsx-claim
   Namespace:     default
   StorageClass:  fsx-sc
   Status:        Bound
   [...]
   ```
**catatan**  
`Status` mungkin ditampilkan sebagai `Pending` selama 5-10 menit, sebelum berubah ke `Bound`. Jangan lanjutkan dengan langkah berikutnya sampai `Status` ada`Bound`. Jika `Status` ditampilkan `Pending` selama lebih dari 10 menit, gunakan pesan peringatan di `Events` sebagai referensi untuk mengatasi masalah apa pun.

1. Deploy aplikasi sampel.

   ```
   kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-fsx-csi-driver/master/examples/kubernetes/dynamic_provisioning/specs/pod.yaml
   ```

1. Verifikasi bahwa aplikasi sampel sedang dijalankan.

   ```
   kubectl get pods
   ```

   Contoh output adalah sebagai berikut.

   ```
   NAME      READY   STATUS              RESTARTS   AGE
   fsx-app   1/1     Running             0          8s
   ```

1. Verifikasi bahwa sistem file dipasang dengan benar oleh aplikasi.

   ```
   kubectl exec -ti fsx-app -- df -h
   ```

   Contoh output adalah sebagai berikut.

   ```
   Filesystem                   Size  Used Avail Use% Mounted on
   overlay                       80G  4.0G   77G   5% /
   tmpfs                         64M     0   64M   0% /dev
   tmpfs                        3.8G     0  3.8G   0% /sys/fs/cgroup
   192.0.2.0@tcp:/abcdef01      1.1T  7.8M  1.1T   1% /data
   /dev/nvme0n1p1                80G  4.0G   77G   5% /etc/hosts
   shm                           64M     0   64M   0% /dev/shm
   tmpfs                        6.9G   12K  6.9G   1% /run/secrets/kubernetes.io/serviceaccount
   tmpfs                        3.8G     0  3.8G   0% /proc/acpi
   tmpfs                        3.8G     0  3.8G   0% /sys/firmware
   ```

1. Verifikasi bahwa data telah ditulis ke sistem file FSx for Lustre oleh aplikasi sampel.

   ```
   kubectl exec -it fsx-app -- ls /data
   ```

   Contoh output adalah sebagai berikut.

   ```
   out.txt
   ```

   Contoh keluaran ini menunjukkan bahwa aplikasi sampel berhasil menulis `out.txt` file ke sistem file.

**catatan**  
Sebelum menghapus cluster, pastikan untuk menghapus sistem file FSx for Lustre. Untuk informasi selengkapnya, lihat [Membersihkan sumber daya](https://docs.aws.amazon.com/fsx/latest/LustreGuide/getting-started-step4.html) di *Panduan Pengguna FSx untuk Lustre*.

## Tuning kinerja FSx untuk Lustre
<a name="_performance_tuning_for_fsx_for_lustre"></a>

Saat menggunakan Lustre dengan Amazon EKS, Anda dapat mengoptimalkan kinerja dengan menerapkan penyetelan Lustre FSx selama inisialisasi node. Pendekatan yang disarankan adalah menggunakan data pengguna template peluncuran untuk memastikan konfigurasi yang konsisten di semua node.

Penyetelan ini meliputi:
+ Pengoptimalan jaringan dan RPC
+ Manajemen modul lustre
+ Penyetelan LRU (Unit Sumber Daya Kunci)
+ Pengaturan kontrol cache klien
+ Kontrol RPC untuk OST dan MDC

Untuk petunjuk rinci tentang penerapan tuning kinerja ini:
+ Untuk mengoptimalkan kinerja untuk node standar (non-EFA), lihat [Optimalkan Amazon FSx untuk kinerja Lustre pada node (non-EFA)](fsx-csi-tuning-non-efa.md) skrip lengkap yang dapat ditambahkan ke data pengguna template peluncuran Anda.
+ Untuk mengoptimalkan kinerja node yang mendukung EFA, lihat. [Optimalkan Amazon FSx untuk kinerja Lustre pada node (EFA)](fsx-csi-tuning-efa.md)

# Optimalkan Amazon FSx untuk kinerja Lustre pada node (EFA)
<a name="fsx-csi-tuning-efa"></a>

Topik ini menjelaskan cara mengatur penyetelan Elastic Fabric Adapter (EFA) dengan Amazon EKS dan Amazon untuk Lustre. FSx 

**catatan**  
Untuk informasi tentang membuat dan menerapkan driver FSx untuk Lustre CSI, lihat. [Menyebarkan driver FSx untuk Lustre](fsx-csi-create.md)
Untuk mengoptimalkan node standar tanpa EFA, lihat. [Optimalkan Amazon FSx untuk kinerja Lustre pada node (non-EFA)](fsx-csi-tuning-non-efa.md)

## Langkah 1. Buat kluster EKS
<a name="create-eks-cluster"></a>

Buat cluster menggunakan file konfigurasi yang disediakan:

```
# Create cluster using efa-cluster.yaml
eksctl create cluster -f efa-cluster.yaml
```

Contoh`efa-cluster.yaml`:

```
#efa-cluster.yaml

apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig

metadata:
  name: csi-fsx
  region: us-east-1
  version: "1.30"

iam:
  withOIDC: true

availabilityZones: ["us-east-1a", "us-east-1d"]

managedNodeGroups:
  - name: my-efa-ng
    instanceType: c6gn.16xlarge
    minSize: 1
    desiredCapacity: 1
    maxSize: 1
    availabilityZones: ["us-east-1b"]
    volumeSize: 300
    privateNetworking: true
    amiFamily: Ubuntu2204
    efaEnabled: true
    preBootstrapCommands:
      - |
        #!/bin/bash
        eth_intf="$(/sbin/ip -br -4 a sh | grep $(hostname -i)/ | awk '{print $1}')"
        efa_version=$(modinfo efa | awk '/^version:/ {print $2}' | sed 's/[^0-9.]//g')
        min_efa_version="2.12.1"

        if [[ "$(printf '%s\n' "$min_efa_version" "$efa_version" | sort -V | head -n1)" != "$min_efa_version" ]]; then
            sudo curl -O https://efa-installer.amazonaws.com/aws-efa-installer-1.37.0.tar.gz
            tar -xf aws-efa-installer-1.37.0.tar.gz && cd aws-efa-installer
            echo "Installing EFA driver"
            sudo apt-get update && apt-get upgrade -y
            sudo apt install -y pciutils environment-modules libnl-3-dev libnl-route-3-200 libnl-route-3-dev dkms
            sudo ./efa_installer.sh -y
            modinfo efa
        else
            echo "Using EFA driver version $efa_version"
        fi

        echo "Installing Lustre client"
        sudo wget -O - https://fsx-lustre-client-repo-public-keys.s3.amazonaws.com/fsx-ubuntu-public-key.asc | gpg --dearmor | sudo tee /usr/share/keyrings/fsx-ubuntu-public-key.gpg > /dev/null
        sudo echo "deb [signed-by=/usr/share/keyrings/fsx-ubuntu-public-key.gpg] https://fsx-lustre-client-repo.s3.amazonaws.com/ubuntu jammy main" > /etc/apt/sources.list.d/fsxlustreclientrepo.list
        sudo apt update | tail
        sudo apt install -y lustre-client-modules-$(uname -r) amazon-ec2-utils | tail
        modinfo lustre

        echo "Loading Lustre/EFA modules..."
        sudo /sbin/modprobe lnet
        sudo /sbin/modprobe kefalnd ipif_name="$eth_intf"
        sudo /sbin/modprobe ksocklnd
        sudo lnetctl lnet configure

        echo "Configuring TCP interface..."
        sudo lnetctl net del --net tcp 2> /dev/null
        sudo lnetctl net add --net tcp --if $eth_intf

        # For P5 instance type which supports 32 network cards,
        # by default add 8 EFA interfaces selecting every 4th device (1 per PCI bus)
        echo "Configuring EFA interface(s)..."
        instance_type="$(ec2-metadata --instance-type | awk '{ print $2 }')"
        num_efa_devices="$(ls -1 /sys/class/infiniband | wc -l)"
        echo "Found $num_efa_devices available EFA device(s)"

        if [[ "$instance_type" == "p5.48xlarge" || "$instance_type" == "p5e.48xlarge" ]]; then
           for intf in $(ls -1 /sys/class/infiniband | awk 'NR % 4 == 1'); do
               sudo lnetctl net add --net efa --if $intf --peer-credits 32
          done
        else
        # Other instances: Configure 2 EFA interfaces by default if the instance supports multiple network cards,
        # or 1 interface for single network card instances
        # Can be modified to add more interfaces if instance type supports it
            sudo lnetctl net add --net efa --if $(ls -1 /sys/class/infiniband | head -n1) --peer-credits 32
            if [[ $num_efa_devices -gt 1 ]]; then
               sudo lnetctl net add --net efa --if $(ls -1 /sys/class/infiniband | tail -n1) --peer-credits 32
            fi
        fi

        echo "Setting discovery and UDSP rule"
        sudo lnetctl set discovery 1
        sudo lnetctl udsp add --src efa --priority 0
        sudo /sbin/modprobe lustre

        sudo lnetctl net show
        echo "Added $(sudo lnetctl net show | grep -c '@efa') EFA interface(s)"
```

## Langkah 2. Buat grup simpul
<a name="create-node-group"></a>

Buat grup simpul yang mendukung EFA:

```
# Create node group using efa-ng.yaml
eksctl create nodegroup -f efa-ng.yaml
```

**penting**  
=== Sesuaikan nilai-nilai ini untuk lingkungan Anda di bagian`# 5. Mount FSx filesystem`.

```
FSX_DNS="<your-fsx-filesystem-dns>" # Needs to be adjusted.
MOUNT_NAME="<your-mount-name>" # Needs to be adjusted.
MOUNT_POINT="</your/mount/point>" # Needs to be adjusted.
```

===

Contoh`efa-ng.yaml`:

```
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig

metadata:
  name: final-efa
  region: us-east-1

managedNodeGroups:
  - name: ng-1
    instanceType: c6gn.16xlarge
    minSize: 1
    desiredCapacity: 1
    maxSize: 1
    availabilityZones: ["us-east-1a"]
    volumeSize: 300
    privateNetworking: true
    amiFamily: Ubuntu2204
    efaEnabled: true
    preBootstrapCommands:
      - |
        #!/bin/bash
        exec 1> >(logger -s -t $(basename $0)) 2>&1

        #########################################################################################
        #                                    Configuration Section                              #
        #########################################################################################

        # File System Configuration
        FSX_DNS="<your-fsx-filesystem-dns>" # Needs to be adjusted.
        MOUNT_NAME="<your-mount-name>" # Needs to be adjusted.
        MOUNT_POINT="</your/mount/point>" # Needs to be adjusted.

        # Lustre Tuning Parameters
        LUSTRE_LRU_MAX_AGE=600000
        LUSTRE_MAX_CACHED_MB=64
        LUSTRE_OST_MAX_RPC=32
        LUSTRE_MDC_MAX_RPC=64
        LUSTRE_MDC_MOD_RPC=50

        # File paths
        FUNCTIONS_SCRIPT="/usr/local/bin/lustre_functions.sh"
        TUNINGS_SCRIPT="/usr/local/bin/apply_lustre_tunings.sh"
        SERVICE_FILE="/etc/systemd/system/lustre-tunings.service"

        #EFA
        MIN_EFA_VERSION="2.12.1"

        # Function to check if a command was successful
        check_success() {
            if [ $? -eq 0 ]; then
                echo "SUCCESS: $1"
            else
                echo "FAILED: $1"
                return 1
            fi
        }

        echo "********Starting FSx for Lustre configuration********"

        # 1. Install Lustre client
        if grep -q '^ID=ubuntu' /etc/os-release; then
            echo "Detected Ubuntu, proceeding with Lustre setup..."
            # Add Lustre repository
            sudo wget -O - https://fsx-lustre-client-repo-public-keys.s3.amazonaws.com/fsx-ubuntu-public-key.asc | sudo gpg --dearmor | sudo tee /usr/share/keyrings/fsx-ubuntu-public-key.gpg > /dev/null

            echo "deb [signed-by=/usr/share/keyrings/fsx-ubuntu-public-key.gpg] https://fsx-lustre-client-repo.s3.amazonaws.com/ubuntu jammy main" | sudo tee /etc/apt/sources.list.d/fsxlustreclientrepo.list

            sudo apt-get update
            sudo apt-get install -y lustre-client-modules-$(uname -r)
            sudo apt-get install -y lustre-client
        else
            echo "Not Ubuntu, exiting"
            exit 1
        fi

        check_success "Install Lustre client"

        # Ensure Lustre tools are in the PATH
        export PATH=$PATH:/usr/sbin

        # 2. Apply network and RPC tunings
        echo "********Applying network and RPC tunings********"
        if ! grep -q "options ptlrpc ptlrpcd_per_cpt_max" /etc/modprobe.d/modprobe.conf; then
            echo "options ptlrpc ptlrpcd_per_cpt_max=64" | sudo tee -a /etc/modprobe.d/modprobe.conf
            check_success "Set ptlrpcd_per_cpt_max"
        else
            echo "ptlrpcd_per_cpt_max already set in modprobe.conf"
        fi

        if ! grep -q "options ksocklnd credits" /etc/modprobe.d/modprobe.conf; then
            echo "options ksocklnd credits=2560" | sudo tee -a /etc/modprobe.d/modprobe.conf
            check_success "Set ksocklnd credits"
        else
            echo "ksocklnd credits already set in modprobe.conf"
        fi

        # 3. Load Lustre modules
        manage_lustre_modules() {
            echo "Checking for existing Lustre modules..."
            if lsmod | grep -q lustre; then
                echo "Existing Lustre modules found."

                # Check for mounted Lustre filesystems
                echo "Checking for mounted Lustre filesystems..."
                if mount | grep -q "type lustre"; then
                    echo "Found mounted Lustre filesystems. Attempting to unmount..."
                    mounted_fs=$(mount | grep "type lustre" | awk '{print $3}')
                    for fs in $mounted_fs; do
                        echo "Unmounting $fs"
                        sudo umount $fs
                        check_success "Unmount filesystem $fs"
                    done
                else
                    echo "No Lustre filesystems mounted."
                fi

                # After unmounting, try to remove modules
                echo "Attempting to remove Lustre modules..."
                sudo lustre_rmmod
                if [ $? -eq 0 ]; then
                    echo "SUCCESS: Removed existing Lustre modules"
                else
                    echo "WARNING: Could not remove Lustre modules. They may still be in use."
                    echo "Please check for any remaining Lustre processes or mounts."
                    return 1
                fi
            else
                echo "No existing Lustre modules found."
            fi

            echo "Loading Lustre modules..."
            sudo modprobe lustre
            check_success "Load Lustre modules" || exit 1

            echo "Checking loaded Lustre modules:"
            lsmod | grep lustre
        }

        # Managing Lustre kernel modules
        echo "********Managing Lustre kernel modules********"
        manage_lustre_modules

        # 4. Initializing Lustre networking
        echo "********Initializing Lustre networking********"
        sudo lctl network up
        check_success "Initialize Lustre networking" || exit 1

        # 4.5 EFA Setup and Configuration
        setup_efa() {
            echo "********Starting EFA Setup********"

            # Get interface and version information
            eth_intf="$(/sbin/ip -br -4 a sh | grep $(hostname -i)/ | awk '{print $1}')"
            efa_version=$(modinfo efa | awk '/^version:/ {print $2}' | sed 's/[^0-9.]//g')
            min_efa_version=$MIN_EFA_VERSION

            # Install or verify EFA driver
            if [[ "$(printf '%s\n' "$min_efa_version" "$efa_version" | sort -V | head -n1)" != "$min_efa_version" ]]; then
                echo "Installing EFA driver..."
                sudo curl -O https://efa-installer.amazonaws.com/aws-efa-installer-1.37.0.tar.gz
                tar -xf aws-efa-installer-1.37.0.tar.gz && cd aws-efa-installer

                # Install dependencies
                sudo apt-get update && apt-get upgrade -y
                sudo apt install -y pciutils environment-modules libnl-3-dev libnl-route-3-200 libnl-route-3-dev dkms

                # Install EFA
                sudo ./efa_installer.sh -y
                modinfo efa
            else
                echo "Using existing EFA driver version $efa_version"
            fi
        }

        configure_efa_network() {
            echo "********Configuring EFA Network********"

            # Load required modules
            echo "Loading network modules..."
            sudo /sbin/modprobe lnet
            sudo /sbin/modprobe kefalnd ipif_name="$eth_intf"
            sudo /sbin/modprobe ksocklnd

            # Initialize LNet
            echo "Initializing LNet..."
            sudo lnetctl lnet configure

            # Configure TCP interface
            echo "Configuring TCP interface..."
            sudo lnetctl net del --net tcp 2> /dev/null
            sudo lnetctl net add --net tcp --if $eth_intf

            # For P5 instance type which supports 32 network cards,
            # by default add 8 EFA interfaces selecting every 4th device (1 per PCI bus)
            echo "Configuring EFA interface(s)..."
            instance_type="$(ec2-metadata --instance-type | awk '{ print $2 }')"
            num_efa_devices="$(ls -1 /sys/class/infiniband | wc -l)"
            echo "Found $num_efa_devices available EFA device(s)"

            if [[ "$instance_type" == "p5.48xlarge" || "$instance_type" == "p5e.48xlarge" ]]; then
                # P5 instance configuration
                for intf in $(ls -1 /sys/class/infiniband | awk 'NR % 4 == 1'); do
                    sudo lnetctl net add --net efa --if $intf --peer-credits 32
                done
            else
                # Standard configuration
                # Other instances: Configure 2 EFA interfaces by default if the instance supports multiple network cards,
                # or 1 interface for single network card instances
                # Can be modified to add more interfaces if instance type supports it
                sudo lnetctl net add --net efa --if $(ls -1 /sys/class/infiniband | head -n1) --peer-credits 32
                if [[ $num_efa_devices -gt 1 ]]; then
                    sudo lnetctl net add --net efa --if $(ls -1 /sys/class/infiniband | tail -n1) --peer-credits 32
                fi
            fi

            # Configure discovery and UDSP
            echo "Setting up discovery and UDSP rules..."
            sudo lnetctl set discovery 1
            sudo lnetctl udsp add --src efa --priority 0
            sudo /sbin/modprobe lustre

            # Verify configuration
            echo "Verifying EFA network configuration..."
            sudo lnetctl net show
            echo "Added $(sudo lnetctl net show | grep -c '@efa') EFA interface(s)"
        }

        # Main execution
        setup_efa
        configure_efa_network

        # 5. Mount FSx filesystem
        if [ ! -z "$FSX_DNS" ] && [ ! -z "$MOUNT_NAME" ]; then
            echo "********Creating mount point********"
            sudo mkdir -p $MOUNT_POINT
            check_success "Create mount point"

            echo "Mounting FSx filesystem..."
            sudo mount -t lustre ${FSX_DNS}@tcp:/${MOUNT_NAME} ${MOUNT_POINT}
            check_success "Mount FSx filesystem"
        else
            echo "Skipping FSx mount as DNS or mount name is not provided"
        fi

        # 6. Applying Lustre performance tunings
        echo "********Applying Lustre performance tunings********"

        # Get number of CPUs
        NUM_CPUS=$(nproc)

        # Calculate LRU size (100 * number of CPUs)
        LRU_SIZE=$((100 * NUM_CPUS))

        #Apply LRU tunings
        echo "Apply LRU tunings"
        sudo lctl set_param ldlm.namespaces.*.lru_max_age=${LUSTRE_LRU_MAX_AGE}
        check_success "Set lru_max_age"
        sudo lctl set_param ldlm.namespaces.*.lru_size=$LRU_SIZE
        check_success "Set lru_size"

        # Client Cache Control
        sudo lctl set_param llite.*.max_cached_mb=${LUSTRE_MAX_CACHED_MB}
        check_success "Set max_cached_mb"

        # RPC Controls
        sudo lctl set_param osc.*OST*.max_rpcs_in_flight=${LUSTRE_OST_MAX_RPC}
        check_success "Set OST max_rpcs_in_flight"

        sudo lctl set_param mdc.*.max_rpcs_in_flight=${LUSTRE_MDC_MAX_RPC}
        check_success "Set MDC max_rpcs_in_flight"

        sudo lctl set_param mdc.*.max_mod_rpcs_in_flight=${LUSTRE_MDC_MOD_RPC}
        check_success "Set MDC max_mod_rpcs_in_flight"

        # 7. Verify all tunings
        echo "********Verifying all tunings********"

        # Function to verify parameter value
        verify_param() {
            local param=$1
            local expected=$2
            local actual=$3

            if [ "$actual" == "$expected" ]; then
                echo "SUCCESS: $param is correctly set to $expected"
            else
                echo "WARNING: $param is set to $actual (expected $expected)"
            fi
        }

        echo "Verifying all parameters:"

        # LRU tunings
        actual_lru_max_age=$(lctl get_param -n ldlm.namespaces.*.lru_max_age | head -1)
        verify_param "lru_max_age" "600000" "$actual_lru_max_age"

        actual_lru_size=$(lctl get_param -n ldlm.namespaces.*.lru_size | head -1)
        verify_param "lru_size" "$LRU_SIZE" "$actual_lru_size"

        # Client Cache
        actual_max_cached_mb=$(lctl get_param -n llite.*.max_cached_mb | grep "max_cached_mb:" | awk '{print $2}')
        verify_param "max_cached_mb" "64" "$actual_max_cached_mb"

        # RPC Controls
        actual_ost_rpcs=$(lctl get_param -n osc.*OST*.max_rpcs_in_flight | head -1)
        verify_param "OST max_rpcs_in_flight" "32" "$actual_ost_rpcs"

        actual_mdc_rpcs=$(lctl get_param -n mdc.*.max_rpcs_in_flight | head -1)
        verify_param "MDC max_rpcs_in_flight" "64" "$actual_mdc_rpcs"

        actual_mdc_mod_rpcs=$(lctl get_param -n mdc.*.max_mod_rpcs_in_flight | head -1)
        verify_param "MDC max_mod_rpcs_in_flight" "50" "$actual_mdc_mod_rpcs"

        # Network and RPC configurations from modprobe.conf
        actual_ptlrpc=$(grep "ptlrpc ptlrpcd_per_cpt_max" /etc/modprobe.d/modprobe.conf | awk '{print $3}')
        verify_param "ptlrpcd_per_cpt_max" "ptlrpcd_per_cpt_max=64" "$actual_ptlrpc"

        actual_ksocklnd=$(grep "ksocklnd credits" /etc/modprobe.d/modprobe.conf | awk '{print $3}')
        verify_param "ksocklnd credits" "credits=2560" "$actual_ksocklnd"

        # 8. Setup persistence
        setup_persistence() {
            # Create functions file
            cat << EOF > $FUNCTIONS_SCRIPT
        #!/bin/bash

        apply_lustre_tunings() {
            local NUM_CPUS=\$(nproc)
            local LRU_SIZE=\$((100 * NUM_CPUS))

            echo "Applying Lustre performance tunings..."
            lctl set_param ldlm.namespaces.*.lru_max_age=$LUSTRE_LRU_MAX_AGE
            lctl set_param ldlm.namespaces.*.lru_size=\$LRU_SIZE
            lctl set_param llite.*.max_cached_mb=$LUSTRE_MAX_CACHED_MB
            lctl set_param osc.*OST*.max_rpcs_in_flight=$LUSTRE_OST_MAX_RPC
            lctl set_param mdc.*.max_rpcs_in_flight=$LUSTRE_MDC_MAX_RPC
            lctl set_param mdc.*.max_mod_rpcs_in_flight=$LUSTRE_MDC_MOD_RPC
        }
        EOF

            # Create tuning script
            cat << EOF > $TUNINGS_SCRIPT
        #!/bin/bash
        exec 1> >(logger -s -t \$(basename \$0)) 2>&1

        source $FUNCTIONS_SCRIPT

        # Function to check if Lustre is mounted
        is_lustre_mounted() {
            mount | grep -q "type lustre"
        }

        # Function to mount Lustre
        mount_lustre() {
            echo "Mounting Lustre filesystem..."
            mkdir -p $MOUNT_POINT
            mount -t lustre ${FSX_DNS}@tcp:/${MOUNT_NAME} $MOUNT_POINT
            return \$?
        }

        # Main execution
        # Try to mount if not already mounted
        if ! is_lustre_mounted; then
            echo "Lustre filesystem not mounted, attempting to mount..."
            mount_lustre
        fi

        # Wait for successful mount (up to 5 minutes)
        for i in {1..30}; do
            if is_lustre_mounted; then
                echo "Lustre filesystem mounted, applying tunings..."
                apply_lustre_tunings
                exit 0
            fi
            echo "Waiting for Lustre filesystem to be mounted... (attempt $i/30)"
            sleep 10
        done

        echo "Timeout waiting for Lustre filesystem mount"
        exit 1
        EOF

        # Create systemd service

        # Create systemd directory if it doesn't exist
        sudo mkdir -p /etc/systemd/system/

            # Create service file directly for Ubuntu
            cat << EOF > $SERVICE_FILE
        [Unit]
        Description=Apply Lustre Performance Tunings
        After=network.target remote-fs.target

        [Service]
        Type=oneshot
        ExecStart=/bin/bash -c 'source $FUNCTIONS_SCRIPT && $TUNINGS_SCRIPT'
        RemainAfterExit=yes

        [Install]
        WantedBy=multi-user.target
        EOF


            # Make scripts executable and enable service
            sudo chmod +x $FUNCTIONS_SCRIPT
            sudo chmod +x $TUNINGS_SCRIPT
            systemctl enable lustre-tunings.service
            systemctl start lustre-tunings.service
        }

        echo "********Setting up persistent tuning********"
        setup_persistence

        echo "FSx for Lustre configuration completed."
```

## (Opsional) Langkah 3. Verifikasi pengaturan EFA
<a name="verify-efa-setup"></a>

SSH menjadi simpul:

```
# Get instance ID from EKS console or {aws} CLI
ssh -i /path/to/your-key.pem ec2-user@<node-internal-ip>
```

Verifikasi konfigurasi EFA:

```
sudo lnetctl net show
```

Periksa log pengaturan:

```
sudo cat /var/log/cloud-init-output.log
```

Berikut contoh output yang diharapkan untuk`lnetctl net show`:

```
net:
    - net type: tcp
      ...
    - net type: efa
      local NI(s):
        - nid: xxx.xxx.xxx.xxx@efa
          status: up
```

## Contoh penerapan
<a name="example-deployments"></a>

### sebuah. Buat claim.yaml
<a name="_a_create_claim_yaml"></a>

```
#claim.yaml

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: fsx-claim-efa
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: ""
  resources:
    requests:
      storage: 4800Gi
  volumeName: fsx-pv
```

Terapkan klaim:

```
kubectl apply -f claim.yaml
```

### b. Buat pv.yaml
<a name="_b_create_pv_yaml"></a>

Perbarui`<replaceable-placeholders>`:

```
#pv.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: fsx-pv
spec:
  capacity:
    storage: 4800Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteMany
  mountOptions:
    - flock
  persistentVolumeReclaimPolicy: Recycle
  csi:
    driver: fsx.csi.aws.com
    volumeHandle: fs-<1234567890abcdef0>
    volumeAttributes:
      dnsname: fs-<1234567890abcdef0>.fsx.us-east-1.amazonaws.com
      mountname: <abcdef01>
```

Terapkan volume persisten:

```
kubectl apply -f pv.yaml
```

### c. Buat pod.yaml
<a name="_c_create_pod_yaml"></a>

```
#pod.yaml

apiVersion: v1
kind: Pod
metadata:
  name: fsx-efa-app
spec:
  containers:
  - name: app
    image: amazonlinux:2
    command: ["/bin/sh"]
    args: ["-c", "while true; do dd if=/dev/urandom bs=100M count=20 > data/test_file; sleep 10; done"]
    resources:
      requests:
        vpc.amazonaws.com/efa: 1
      limits:
        vpc.amazonaws.com/efa: 1
    volumeMounts:
    - name: persistent-storage
      mountPath: /data
  volumes:
  - name: persistent-storage
    persistentVolumeClaim:
      claimName: fsx-claim-efa
```

Terapkan Pod:

```
kubectl apply -f pod.yaml
```

## Perintah verifikasi tambahan
<a name="verification-commands"></a>

Verifikasi pemasangan Pod dan tulis ke sistem file:

```
kubectl exec -ti fsx-efa-app -- df -h | grep data
# Expected output:
# <192.0.2.0>@tcp:/<abcdef01>  4.5T  1.2G  4.5T   1% /data

kubectl exec -ti fsx-efa-app -- ls /data
# Expected output:
# test_file
```

SSH ke node untuk memverifikasi lalu lintas melewati EFA:

```
sudo lnetctl net show -v
```

Output yang diharapkan akan menunjukkan antarmuka EFA dengan statistik lalu lintas.

## Informasi Terkait
<a name="_related_information"></a>
+  [Menyebarkan driver FSx untuk Lustre](fsx-csi-create.md) 
+  [Optimalkan Amazon FSx untuk kinerja Lustre pada node (non-EFA)](fsx-csi-tuning-non-efa.md) 
+  [Amazon FSx untuk Kinerja Kilau](https://docs.aws.amazon.com/fsx/latest/LustreGuide/performance.html) 
+  [Elastic Fabric Adapter](https://docs.aws.amazon.com/ec2/latest/userguide/efa.html) 

# Optimalkan Amazon FSx untuk kinerja Lustre pada node (non-EFA)
<a name="fsx-csi-tuning-non-efa"></a>

Anda dapat mengoptimalkan Amazon FSx untuk kinerja Lustre dengan menerapkan parameter penyetelan selama inisialisasi node menggunakan data pengguna template peluncuran.

**catatan**  
Untuk informasi tentang membuat dan menerapkan driver FSx untuk Lustre CSI, lihat. [Menyebarkan driver FSx untuk Lustre](fsx-csi-create.md) Untuk mengoptimalkan kinerja dengan node yang mendukung EFA, lihat. [Optimalkan Amazon FSx untuk kinerja Lustre pada node (EFA)](fsx-csi-tuning-efa.md)

## Mengapa menggunakan data pengguna template peluncuran?
<a name="_why_use_launch_template_user_data"></a>
+ Menerapkan penyetelan secara otomatis selama inisialisasi node.
+ Memastikan konfigurasi yang konsisten di semua node.
+ Menghilangkan kebutuhan untuk konfigurasi node manual.

## Contoh ikhtisar skrip
<a name="_example_script_overview"></a>

Contoh skrip yang didefinisikan dalam topik ini melakukan operasi ini:

### `# 1. Install Lustre client`
<a name="_1_install_lustre_client"></a>
+ Secara otomatis mendeteksi versi OS Amazon Linux (AL) Anda.
+ Menginstal paket klien Lustre yang sesuai.

### `# 2. Apply network and RPC tunings`
<a name="_2_apply_network_and_rpc_tunings"></a>
+ Set `ptlrpcd_per_cpt_max=64` untuk pemrosesan RPC paralel.
+ Mengkonfigurasi `ksocklnd credits=2560` untuk mengoptimalkan buffer jaringan.

### `# 3. Load Lustre modules`
<a name="_3_load_lustre_modules"></a>
+ Aman menghapus modul Lustre yang ada jika ada.
+ Menangani pelepasan sistem file yang ada.
+ Memuat modul Lustre segar.

### `# 4. Lustre Network Initialization`
<a name="_4_lustre_network_initialization"></a>
+ Menginisialisasi konfigurasi jaringan Lustre.
+ Menyiapkan parameter jaringan yang diperlukan.

### `# 5. Mount FSx filesystem`
<a name="_5_mount_fsx_filesystem"></a>
+ Anda harus menyesuaikan nilai untuk lingkungan Anda di bagian ini.

### `# 6. Apply tunings`
<a name="_6_apply_tunings"></a>
+ Penyetelan LRU (Unit Sumber Daya Kunci):
  +  `lru_max_age=600000` 
  +  `lru_size`dihitung berdasarkan jumlah CPU
+ Kontrol Cache Klien: `max_cached_mb=64` 
+ Kontrol RPC:
  + OST `max_rpcs_in_flight=32` 
  + MDC `max_rpcs_in_flight=64` 
  + MDC `max_mod_rpcs_in_flight=50` 

### `# 7. Verify tunings`
<a name="_7_verify_tunings"></a>
+ Memverifikasi semua tuning yang diterapkan.
+ Melaporkan keberhasilan atau peringatan untuk setiap parameter.

### `# 8. Setup persistence`
<a name="_8_setup_persistence"></a>
+ Anda harus menyesuaikan nilai untuk lingkungan Anda di bagian ini juga.
+ Secara otomatis mendeteksi versi OS Anda (AL2023) untuk menentukan `Systemd` layanan mana yang akan diterapkan.
+ Sistem dimulai.
+  `Systemd`memulai `lustre-tunings` layanan (karena`WantedBy=multi-user.target`).
+ Layanan berjalan `apply_lustre_tunings.sh` yang:
  + Memeriksa apakah sistem file sudah terpasang.
  + Pasang sistem file jika tidak dipasang.
  + Menunggu pemasangan yang berhasil (hingga lima menit).
  + Menerapkan parameter penyetelan setelah pemasangan berhasil.
+ Pengaturan tetap aktif hingga reboot.
+ Layanan keluar setelah skrip selesai.
  + Systemd menandai layanan sebagai “aktif (keluar)”.
+ Proses berulang pada reboot berikutnya.

## Membuat templat peluncuran
<a name="_create_a_launch_template"></a>

1. Buka EC2 konsol Amazon di https://console.aws.amazon.com/ec2/.

1. Pilih **Luncurkan Template**.

1. Pilih **Buat templat peluncuran**.

1. Di **Detail lanjutan**, cari bagian **Data pengguna**.

1. Tempel skrip di bawah ini, perbarui apa pun sesuai kebutuhan.
**penting**  
Sesuaikan nilai-nilai ini untuk lingkungan Anda di kedua bagian `# 5. Mount FSx filesystem` dan `setup_persistence()` fungsi `apply_lustre_tunings.sh` di bagian`# 8. Setup persistence`:  

   ```
   FSX_DNS="<your-fsx-filesystem-dns>" # Needs to be adjusted.
   MOUNT_NAME="<your-mount-name>" # Needs to be adjusted.
   MOUNT_POINT="</your/mount/point>" # Needs to be adjusted.
   ```

   ```
   MIME-Version: 1.0
   Content-Type: multipart/mixed; boundary="==MYBOUNDARY=="
   --==MYBOUNDARY==
   Content-Type: text/x-shellscript; charset="us-ascii"
   #!/bin/bash
   exec 1> >(logger -s -t $(basename $0)) 2>&1
   # Function definitions
   check_success() {
       if [ $? -eq 0 ]; then
           echo "SUCCESS: $1"
       else
           echo "FAILED: $1"
           return 1
       fi
   }
   apply_tunings() {
       local NUM_CPUS=$(nproc)
       local LRU_SIZE=$((100 * NUM_CPUS))
       local params=(
           "ldlm.namespaces.*.lru_max_age=600000"
           "ldlm.namespaces.*.lru_size=$LRU_SIZE"
           "llite.*.max_cached_mb=64"
           "osc.*OST*.max_rpcs_in_flight=32"
           "mdc.*.max_rpcs_in_flight=64"
           "mdc.*.max_mod_rpcs_in_flight=50"
       )
       for param in "${params[@]}"; do
           lctl set_param $param
           check_success "Set ${param%%=*}"
       done
   }
   verify_param() {
       local param=$1
       local expected=$2
       local actual=$3
   
       if [ "$actual" == "$expected" ]; then
           echo "SUCCESS: $param is correctly set to $expected"
       else
           echo "WARNING: $param is set to $actual (expected $expected)"
       fi
   }
   verify_tunings() {
       local NUM_CPUS=$(nproc)
       local LRU_SIZE=$((100 * NUM_CPUS))
       local params=(
           "ldlm.namespaces.*.lru_max_age:600000"
           "ldlm.namespaces.*.lru_size:$LRU_SIZE"
           "llite.*.max_cached_mb:64"
           "osc.*OST*.max_rpcs_in_flight:32"
           "mdc.*.max_rpcs_in_flight:64"
           "mdc.*.max_mod_rpcs_in_flight:50"
       )
       echo "Verifying all parameters:"
       for param in "${params[@]}"; do
           name="${param%%:*}"
           expected="${param#*:}"
           actual=$(lctl get_param -n $name | head -1)
           verify_param "${name##*.}" "$expected" "$actual"
       done
   }
   setup_persistence() {
       # Create functions file
       cat << 'EOF' > /usr/local/bin/lustre_functions.sh
   #!/bin/bash
   apply_lustre_tunings() {
       local NUM_CPUS=$(nproc)
       local LRU_SIZE=$((100 * NUM_CPUS))
   
       echo "Applying Lustre performance tunings..."
       lctl set_param ldlm.namespaces.*.lru_max_age=600000
       lctl set_param ldlm.namespaces.*.lru_size=$LRU_SIZE
       lctl set_param llite.*.max_cached_mb=64
       lctl set_param osc.*OST*.max_rpcs_in_flight=32
       lctl set_param mdc.*.max_rpcs_in_flight=64
       lctl set_param mdc.*.max_mod_rpcs_in_flight=50
   }
   EOF
       # Create tuning script
       cat << 'EOF' > /usr/local/bin/apply_lustre_tunings.sh
   #!/bin/bash
   exec 1> >(logger -s -t $(basename $0)) 2>&1
   # Source the functions
   source /usr/local/bin/lustre_functions.sh
   # FSx details
   FSX_DNS="<your-fsx-filesystem-dns>" # Needs to be adjusted.
   MOUNT_NAME="<your-mount-name>" # Needs to be adjusted.
   MOUNT_POINT="</your/mount/point>" # Needs to be adjusted.
   # Function to check if Lustre is mounted
   is_lustre_mounted() {
       mount | grep -q "type lustre"
   }
   # Function to mount Lustre
   mount_lustre() {
       echo "Mounting Lustre filesystem..."
       mkdir -p ${MOUNT_POINT}
       mount -t lustre ${FSX_DNS}@tcp:/${MOUNT_NAME} ${MOUNT_POINT}
       return $?
   }
   # Main execution
   # Try to mount if not already mounted
   if ! is_lustre_mounted; then
       echo "Lustre filesystem not mounted, attempting to mount..."
       mount_lustre
   fi
   # Wait for successful mount (up to 5 minutes)
   for i in {1..30}; do
       if is_lustre_mounted; then
           echo "Lustre filesystem mounted, applying tunings..."
           apply_lustre_tunings
           exit 0
       fi
       echo "Waiting for Lustre filesystem to be mounted... (attempt $i/30)"
       sleep 10
   done
   echo "Timeout waiting for Lustre filesystem mount"
   exit 1
   EOF
       # Create systemd service
       cat << 'EOF' > /etc/systemd/system/lustre-tunings.service
   [Unit]
   Description=Apply Lustre Performance Tunings
   After=network.target remote-fs.target
   StartLimitIntervalSec=0
   [Service]
   Type=oneshot
   ExecStart=/usr/local/bin/apply_lustre_tunings.sh
   RemainAfterExit=yes
   Restart=on-failure
   RestartSec=30
   [Install]
   WantedBy=multi-user.target
   EOF
       chmod +x /usr/local/bin/lustre_functions.sh
       chmod +x /usr/local/bin/apply_lustre_tunings.sh
       systemctl enable lustre-tunings.service
       systemctl start lustre-tunings.service
   }
   echo "Starting FSx for Lustre configuration..."
   # 1. Install Lustre client
   if grep -q 'VERSION="2"' /etc/os-release; then
       amazon-linux-extras install -y lustre
   elif grep -q 'VERSION="2023"' /etc/os-release; then
       dnf install -y lustre-client
   fi
   check_success "Install Lustre client"
   # 2. Apply network and RPC tunings
   export PATH=$PATH:/usr/sbin
   echo "Applying network and RPC tunings..."
   if ! grep -q "options ptlrpc ptlrpcd_per_cpt_max" /etc/modprobe.d/modprobe.conf; then
       echo "options ptlrpc ptlrpcd_per_cpt_max=64" | tee -a /etc/modprobe.d/modprobe.conf
       echo "options ksocklnd credits=2560" | tee -a /etc/modprobe.d/modprobe.conf
   fi
   # 3. Load Lustre modules
   modprobe lustre
   check_success "Load Lustre modules" || exit 1
   # 4. Lustre Network Initialization
   lctl network up
   check_success "Initialize Lustre networking" || exit 1
   # 5. Mount FSx filesystem
   FSX_DNS="<your-fsx-filesystem-dns>" # Needs to be adjusted.
   MOUNT_NAME="<your-mount-name>" # Needs to be adjusted.
   MOUNT_POINT="</your/mount/point>" # Needs to be adjusted.
   if [ ! -z "$FSX_DNS" ] && [ ! -z "$MOUNT_NAME" ]; then
       mkdir -p $MOUNT_POINT
       mount -t lustre ${FSX_DNS}@tcp:/${MOUNT_NAME} ${MOUNT_POINT}
       check_success "Mount FSx filesystem"
   fi
   # 6. Apply tunings
   apply_tunings
   # 7. Verify tunings
   verify_tunings
   # 8. Setup persistence
   setup_persistence
   echo "FSx for Lustre configuration completed."
   --==MYBOUNDARY==--
   ```

1. Saat membuat grup simpul Amazon EKS, pilih templat peluncuran ini. Untuk informasi selengkapnya, lihat [Buat grup node terkelola untuk klaster Anda](create-managed-node-group.md).

## Informasi Terkait
<a name="_related_information"></a>
+  [Menyebarkan driver FSx untuk Lustre](fsx-csi-create.md) 
+  [Optimalkan Amazon FSx untuk kinerja Lustre pada node (EFA)](fsx-csi-tuning-efa.md) 
+  [Amazon FSx untuk Kinerja Kilau](https://docs.aws.amazon.com/fsx/latest/LustreGuide/performance.html) 

# Gunakan penyimpanan aplikasi berkinerja tinggi FSx untuk NetApp ONTAP
<a name="fsx-ontap"></a>

 NetApp Trident menyediakan orkestrasi penyimpanan dinamis menggunakan driver yang sesuai dengan Container Storage Interface (CSI). Hal ini memungkinkan kluster Amazon EKS untuk mengelola siklus hidup volume persisten (PVs) yang didukung oleh Amazon FSx untuk sistem file NetApp ONTAP. Perhatikan bahwa driver Amazon FSx untuk NetApp ONTAP CSI tidak kompatibel dengan Amazon EKS Hybrid Nodes. Untuk memulai, lihat [Menggunakan Trident dengan Amazon FSx untuk NetApp ONTAP di dokumentasi](https://docs.netapp.com/us-en/trident/trident-use/trident-fsx.html) NetApp Trident.

Amazon FSx untuk NetApp ONTAP adalah layanan penyimpanan yang memungkinkan Anda meluncurkan dan menjalankan sistem file ONTAP yang dikelola sepenuhnya di cloud. ONTAP NetApp adalah teknologi sistem file yang menyediakan serangkaian akses data dan kemampuan manajemen data yang diadopsi secara luas. FSx untuk ONTAP menyediakan fitur, kinerja, dan APIs sistem NetApp file lokal dengan kelincahan, skalabilitas, dan kesederhanaan layanan yang dikelola sepenuhnya. AWS Untuk informasi selengkapnya, lihat [Panduan Pengguna ONTAP FSx untuk](https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/what-is-fsx-ontap.html).

**penting**  
Jika Anda menggunakan Amazon FSx untuk NetApp ONTAP bersama driver Amazon EBS CSI untuk menyediakan volume EBS, Anda harus menentukan untuk tidak menggunakan perangkat EBS dalam file. `multipath.conf` Untuk metode yang didukung, lihat [Daftar Hitam File Konfigurasi](https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/7/html/dm_multipath/config_file_blacklist#config_file_blacklist). Inilah contohnya.  

```
 defaults {
        user_friendly_names yes
        find_multipaths no
      }
      blacklist {
        device {
          vendor "NVME"
          product "Amazon Elastic Block Store"
        }
      }
```

# Gunakan penyimpanan data dengan Amazon FSx untuk OpenZFS
<a name="fsx-openzfs-csi"></a>

Amazon FSx untuk OpenZFS adalah layanan penyimpanan file yang dikelola sepenuhnya yang memudahkan pemindahan data AWS dari ZFS lokal atau server file berbasis Linux lainnya. Anda dapat melakukan ini tanpa mengubah kode aplikasi Anda atau bagaimana Anda mengelola data. Ini menawarkan penyimpanan file yang sangat andal, terukur, efisien, dan kaya fitur yang dibangun di atas sistem file OpenZFS open-source. Ini menggabungkan kemampuan ini dengan kelincahan, skalabilitas, dan kesederhanaan layanan yang dikelola AWS sepenuhnya. Untuk informasi selengkapnya, lihat [Panduan Pengguna Amazon FSx for OpenZFS](https://docs.aws.amazon.com/fsx/latest/OpenZFSGuide/what-is-fsx.html).

Driver FSx for OpenZFS Container Storage Interface (CSI) menyediakan antarmuka CSI yang memungkinkan cluster Amazon EKS mengelola siklus hidup volume OpenZFS. FSx Perhatikan bahwa driver Amazon FSx untuk OpenZFS CSI tidak kompatibel dengan Amazon EKS Hybrid Nodes. [Untuk menerapkan driver CSI FSx untuk OpenZFS ke cluster Amazon EKS Anda, lihat -driver aktif. aws-fsx-openzfs-csi](https://github.com/kubernetes-sigs/aws-fsx-openzfs-csi-driver) GitHub

# Minimalkan latensi dengan Amazon File Cache
<a name="file-cache-csi"></a>

Amazon File Cache adalah cache berkecepatan tinggi AWS yang dikelola sepenuhnya yang digunakan untuk memproses data file, di mana pun data disimpan. Amazon File Cache secara otomatis memuat data ke dalam cache saat diakses untuk pertama kalinya dan merilis data saat tidak digunakan. Untuk informasi selengkapnya, lihat [Panduan Pengguna Cache File Amazon](https://docs.aws.amazon.com/fsx/latest/FileCacheGuide/what-is.html).

Driver Amazon File Cache Container Storage Interface (CSI) menyediakan antarmuka CSI yang memungkinkan cluster Amazon EKS mengelola siklus hidup cache file Amazon. Perhatikan bahwa driver CSI Cache File Amazon tidak kompatibel dengan Amazon EKS Hybrid Nodes. Untuk menerapkan driver CSI Cache File Amazon ke kluster Amazon EKS Anda, lihat [aws-file-cache-csi-driver](https://github.com/kubernetes-sigs/aws-file-cache-csi-driver) aktif. GitHub

# Akses objek Amazon S3 dengan Mountpoint untuk driver Amazon S3 CSI
<a name="s3-csi"></a>

Dengan driver [Mountpoint for Amazon S3 Container Storage Interface (CSI)](https://github.com/awslabs/mountpoint-s3-csi-driver), aplikasi Kubernetes Anda dapat mengakses objek Amazon S3 melalui antarmuka sistem file, mencapai throughput agregat tinggi tanpa mengubah kode aplikasi apa pun. Dibangun di [Mountpoint untuk Amazon S3](https://github.com/awslabs/mountpoint-s3), driver CSI menghadirkan bucket Amazon S3 sebagai volume yang dapat diakses oleh kontainer di Amazon EKS dan cluster Kubernetes yang dikelola sendiri.

## Pertimbangan
<a name="s3-csi-considerations"></a>
+ Driver Mountpoint untuk Amazon S3 CSI saat ini tidak kompatibel dengan gambar kontainer berbasis Windows.
+ Driver Mountpoint untuk Amazon S3 CSI saat ini tidak kompatibel dengan Amazon EKS Hybrid Nodes.
+ Driver Mountpoint untuk Amazon S3 CSI tidak mendukung Fargate. AWS Namun, container yang berjalan di Amazon EC2 (baik dengan Amazon EKS atau instalasi Kubernetes kustom) didukung.
+ Driver Mountpoint untuk Amazon S3 CSI hanya mendukung penyediaan statis. Penyediaan dinamis, atau pembuatan bucket baru, tidak didukung.
**catatan**  
Penyediaan statis mengacu pada penggunaan bucket Amazon S3 yang sudah ada yang ditentukan sebagai `bucketName` dalam objek`volumeAttributes`. `PersistentVolume` Untuk informasi selengkapnya, lihat [Penyediaan Statis aktif.](https://github.com/awslabs/mountpoint-s3-csi-driver/blob/main/examples/kubernetes/static_provisioning/README.md) GitHub
+ Volume yang dipasang dengan driver Mountpoint untuk Amazon S3 CSI tidak mendukung semua fitur sistem file POSIX. Untuk detail tentang perilaku sistem file, lihat [Mountpoint untuk perilaku sistem file Amazon S3 aktif](https://github.com/awslabs/mountpoint-s3/blob/main/doc/SEMANTICS.md). GitHub

Untuk detail tentang penerapan driver, lihat[Terapkan Mountpoint untuk driver Amazon S3](s3-csi-create.md). Untuk detail tentang menghapus driver, lihat[Hapus add-on Mountpoint untuk Amazon S3 Amazon EKS](removing-s3-csi-eks-add-on.md).

# Terapkan Mountpoint untuk driver Amazon S3
<a name="s3-csi-create"></a>

Dengan driver [Mountpoint for Amazon S3 Container Storage Interface (CSI)](https://github.com/awslabs/mountpoint-s3-csi-driver), aplikasi Kubernetes Anda dapat mengakses objek Amazon S3 melalui antarmuka sistem file, mencapai throughput agregat tinggi tanpa mengubah kode aplikasi apa pun.

Prosedur ini akan menunjukkan kepada Anda cara menerapkan driver [Mountpoint untuk Amazon S3 CSI](s3-csi.md) Amazon EKS. Sebelum melanjutkan, silakan tinjau [Pertimbangan](s3-csi.md#s3-csi-considerations).

## Prasyarat
<a name="s3-csi-prereqs"></a>
+ Penyedia OpenID Connect (OIDC) AWS Identity and Access Management (IAM) yang sudah ada untuk klaster Anda. Untuk menentukan apakah Anda sudah memiliki satu, atau harus membuat satu, lihat [Buat penyedia IAM OIDC untuk klaster Anda](enable-iam-roles-for-service-accounts.md).
+ Versi 2.12.3 atau yang lebih baru dari AWS CLI diinstal dan dikonfigurasi pada perangkat Anda atau. AWS CloudShell
+ Alat baris `kubectl` perintah diinstal pada perangkat Anda atau AWS CloudShell. Versinya bisa sama dengan atau hingga satu versi minor lebih awal atau lebih lambat dari versi Kubernetes dari klaster Anda. Misalnya, jika versi cluster Anda`1.29`, Anda dapat menggunakan `kubectl` versi`1.28`,`1.29`, atau `1.30` dengan itu. Untuk menginstal atau memutakhirkan `kubectl`, lihat [Mengatur `kubectl` dan `eksctl`](install-kubectl.md).

## Langkah 1: Buat kebijakan IAM
<a name="s3-create-iam-policy"></a>

Driver Mountpoint untuk Amazon S3 CSI memerlukan izin Amazon S3 untuk berinteraksi dengan sistem file Anda. Bagian ini menunjukkan cara membuat kebijakan IAM yang memberikan izin yang diperlukan.

Kebijakan contoh berikut mengikuti rekomendasi izin IAM untuk Mountpoint. Atau, Anda dapat menggunakan kebijakan AWS terkelola [AmazonS3 FullAccess](https://console.aws.amazon.com/iam/home?#/policies/arn:aws:iam::aws:policy/AmazonS3FullAccess$jsonEditor), tetapi kebijakan terkelola ini memberikan lebih banyak izin daripada yang diperlukan untuk Mountpoint.

Untuk informasi selengkapnya tentang izin yang disarankan untuk Mountpoint, lihat Izin IAM [Mountpoint](https://github.com/awslabs/mountpoint-s3/blob/main/doc/CONFIGURATION.md#iam-permissions) pada. GitHub

1. Buka konsol IAM di https://console.aws.amazon.com/iam/.

1. Di panel navigasi di sebelah kiri, pilih **Kebijakan**.

1. Pada halaman **Kebijakan**, pilih **Buat kebijakan**.

1. Untuk **editor Kebijakan**, pilih **JSON**.

1. Di bawah **Editor kebijakan**, salin dan tempel yang berikut ini:
**penting**  
Ganti `amzn-s3-demo-bucket1` dengan nama bucket Amazon S3 Anda sendiri.

   ```
   {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
           {
               "Sid": "MountpointFullBucketAccess",
               "Effect": "Allow",
               "Action": [
                   "s3:ListBucket"
               ],
               "Resource": [
                   "arn:aws:s3:::amzn-s3-demo-bucket1"
               ]
           },
           {
               "Sid": "MountpointFullObjectAccess",
               "Effect": "Allow",
               "Action": [
                   "s3:GetObject",
                   "s3:PutObject",
                   "s3:AbortMultipartUpload",
                   "s3:DeleteObject"
               ],
               "Resource": [
                   "arn:aws:s3:::amzn-s3-demo-bucket1/*"
               ]
           }
      ]
   }
   ```

   Bucket direktori, diperkenalkan dengan kelas penyimpanan Amazon S3 Express One Zone, menggunakan mekanisme otentikasi yang berbeda dari bucket tujuan umum. Alih-alih menggunakan `s3:*` tindakan, Anda harus menggunakan `s3express:CreateSession` tindakan. Untuk informasi tentang bucket direktori, lihat [Bucket direktori di Panduan](https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-buckets-overview.html) Pengguna *Amazon S3*.

   Di bawah ini adalah contoh kebijakan hak istimewa paling tidak yang akan Anda gunakan untuk bucket direktori.

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "s3express:CreateSession",
               "Resource": "arn:aws:s3express:us-west-2:111122223333:bucket/amzn-s3-demo-bucket1--usw2-az1--x-s3"
           }
       ]
   }
   ```

1. Pilih **Berikutnya**.

1. Pada halaman **Tinjau dan buat**, beri nama kebijakan Anda. Contoh panduan ini menggunakan nama. `AmazonS3CSIDriverPolicy`

1. Pilih **Buat kebijakan**.

## Langkah 2: Buat peran IAM
<a name="s3-create-iam-role"></a>

Driver Mountpoint untuk Amazon S3 CSI memerlukan izin Amazon S3 untuk berinteraksi dengan sistem file Anda. Bagian ini menunjukkan cara membuat peran IAM untuk mendelegasikan izin ini. Untuk membuat peran ini, Anda dapat menggunakan salah satu alat ini:
+  [eksctl](#eksctl_s3_store_app_data) 
+  [Konsol Manajemen AWS](#console_s3_store_app_data) 
+  [AWS CLI](#awscli_s3_store_app_data) 

**catatan**  
Kebijakan IAM `AmazonS3CSIDriverPolicy` dibuat di bagian sebelumnya.

### eksctl
<a name="eksctl_s3_store_app_data"></a>

 **Untuk membuat peran IAM driver Mountpoint untuk Amazon S3 CSI Anda dengan `eksctl`** 

Untuk membuat peran IAM dan akun layanan Kubernetes, jalankan perintah berikut. Perintah ini juga melampirkan kebijakan `AmazonS3CSIDriverPolicy` IAM ke peran, membuat anotasi akun layanan Kubernetes (`s3-csi-controller-sa`) dengan Nama Sumber Daya Amazon (ARN) peran IAM, dan menambahkan nama akun layanan Kubernetes ke kebijakan kepercayaan untuk peran IAM.

```
CLUSTER_NAME=my-cluster
REGION=region-code
ROLE_NAME=AmazonEKS_S3_CSI_DriverRole
POLICY_ARN=AmazonEKS_S3_CSI_DriverRole_ARN
eksctl create iamserviceaccount \
    --name s3-csi-driver-sa \
    --namespace kube-system \
    --cluster $CLUSTER_NAME \
    --attach-policy-arn $POLICY_ARN \
    --approve \
    --role-name $ROLE_NAME \
    --region $REGION \
    --role-only
```

### Konsol Manajemen AWS
<a name="console_s3_store_app_data"></a>

1. Buka konsol IAM di https://console.aws.amazon.com/iam/.

1. Di panel navigasi sebelah kiri, pilih **Peran**.

1. Pada halaman **Peran**, pilih **Buat peran**.

1. Pada halaman **Pilih entitas tepercaya**, lakukan hal berikut:

   1. Di bagian **Jenis entitas tepercaya**, pilih **Identitas web**.

   1. Untuk **penyedia Identity**, pilih **URL penyedia OpenID Connect** untuk klaster Anda (seperti yang ditunjukkan di bawah **Ikhtisar** di Amazon EKS).

      Jika tidak URLs ditampilkan, tinjau [Prasyarat](#s3-csi-prereqs).

   1. Untuk **Audiens**, pilih `sts.amazonaws.com`.

   1. Pilih **Berikutnya**.

1. Pada halaman **Tambahkan izin**, lakukan hal berikut:

   1. Di kotak **Filter kebijakan**, masukkan Kebijakan AmazonS3CSIDriver.
**catatan**  
Kebijakan ini dibuat di bagian sebelumnya.

   1. Pilih kotak centang di sebelah kiri `AmazonS3CSIDriverPolicy` hasil yang dikembalikan dalam pencarian.

   1. Pilih **Berikutnya**.

1. Pada halaman **Nama, tinjau, dan buat**, lakukan hal berikut:

   1. Untuk nama Peran, masukkan **nama unik untuk peran** Anda, seperti DriverRole Amazoneks\$1S3\$1CSI\$1.

   1. Di bawah **Tambahkan tag (Opsional)**, tambahkan metadata ke peran dengan melampirkan tag sebagai pasangan nilai kunci. Untuk informasi selengkapnya tentang penggunaan tanda di IAM, lihat [Menandai sumber daya IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html) di *Panduan Pengguna IAM*.

   1. Pilih **Buat peran**.

1. Setelah peran dibuat, pilih peran di konsol untuk dibuka, dan kemudian diedit.

1. Pilih tab **Trust relationship**, lalu pilih **Edit trust policy**.

1. Temukan baris yang serupa dengan yang berikut ini:

   ```
   "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:aud": "sts.amazonaws.com"
   ```

   Tambahkan koma ke akhir baris sebelumnya, lalu tambahkan baris berikut setelahnya. Ganti *region-code* dengan AWS Wilayah tempat klaster Anda berada. Ganti *EXAMPLED539D4633E53DE1B71EXAMPLE* dengan ID penyedia OIDC cluster Anda.

   ```
   "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:sub": "system:serviceaccount:kube-system:s3-csi-driver-sa"
   ```

1. Pastikan `Condition` operator disetel ke`"StringEquals"`.

1. Pilih **Perbarui kebijakan** untuk menyelesaikan.

### AWS CLI
<a name="awscli_s3_store_app_data"></a>

1. Lihat URL penyedia OIDC untuk klaster Anda. Ganti *my-cluster* dengan nama klaster Anda. Jika output dari perintah adalah `None`, tinjau [Prasyarat](#s3-csi-prereqs).

   ```
   aws eks describe-cluster --name my-cluster --query "cluster.identity.oidc.issuer" --output text
   ```

   Contoh output adalah sebagai berikut.

   ```
   https://oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE
   ```

1. Buat IAM role, yang memberikan tindakan `AssumeRoleWithWebIdentity` untuk akun layanan Kubernetes.

   1. Salin konten berikut ke file bernama `aws-s3-csi-driver-trust-policy.json`. Ganti *111122223333* dengan ID akun Anda. Ganti *EXAMPLED539D4633E53DE1B71EXAMPLE* dan *region-code* dengan nilai yang dikembalikan pada langkah sebelumnya.

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
              "Federated": "arn:aws:iam::111122223333:oidc-provider/oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE"
            },
            "Action": "sts:AssumeRoleWithWebIdentity",
            "Condition": {
              "StringEquals": {
                "oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:sub": "system:serviceaccount:kube-system:s3-csi-driver-sa",
                "oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:aud": "sts.amazonaws.com"
              }
            }
          }
        ]
      }
      ```

   1. Buat peran. Anda dapat mengubah *AmazonEKS\$1S3\$1CSI\$1DriverRole* ke nama yang berbeda, tetapi jika Anda melakukannya, pastikan untuk mengubahnya juga dalam langkah berikutnya.

      ```
      aws iam create-role \
        --role-name AmazonEKS_S3_CSI_DriverRole \
        --assume-role-policy-document file://"aws-s3-csi-driver-trust-policy.json"
      ```

1. Lampirkan kebijakan IAM yang dibuat sebelumnya ke peran dengan perintah berikut.

   ```
   aws iam attach-role-policy \
     --policy-arn arn:aws: iam::aws:policy/AmazonS3CSIDriverPolicy \
     --role-name AmazonEKS_S3_CSI_DriverRole
   ```
**catatan**  
Kebijakan IAM `AmazonS3CSIDriverPolicy` dibuat di bagian sebelumnya.

1. Lewati langkah ini jika Anda menginstal driver sebagai add-on Amazon EKS. Untuk instalasi driver yang dikelola sendiri, buat akun layanan Kubernetes yang dianotasi dengan ARN dari peran IAM yang Anda buat.

   1. Simpan konten berikut ini ke file bernama `mountpoint-s3-service-account.yaml`. Ganti *111122223333* dengan ID akun Anda.

      ```
      ---
      apiVersion: v1
      kind: ServiceAccount
      metadata:
        labels:
          app.kubernetes.io/name: aws-mountpoint-s3-csi-driver
        name: mountpoint-s3-csi-controller-sa
        namespace: kube-system
        annotations:
          eks.amazonaws.com/role-arn: arn:aws: iam::111122223333:role/AmazonEKS_S3_CSI_DriverRole
      ```

   1. Buat akun layanan Kubernetes di klaster Anda. Akun layanan Kubernetes (`mountpoint-s3-csi-controller-sa`) dianotasi dengan peran IAM yang Anda buat bernama. *AmazonEKS\$1S3\$1CSI\$1DriverRole*

      ```
      kubectl apply -f mountpoint-s3-service-account.yaml
      ```
**catatan**  
Ketika Anda menyebarkan plugin dalam prosedur ini, itu membuat dan dikonfigurasi untuk menggunakan akun layanan bernama`s3-csi-driver-sa`.

## Langkah 3: Instal Mountpoint untuk driver Amazon S3 CSI
<a name="s3-install-driver"></a>

Anda dapat menginstal driver Mountpoint untuk Amazon S3 CSI melalui add-on Amazon EKS. Anda dapat menggunakan alat berikut untuk menambahkan add-on ke cluster Anda:
+  [eksctl](#eksctl_s3_add_store_app_data) 
+  [Konsol Manajemen AWS](#console_s3_add_store_app_data) 
+  [AWS CLI](#awscli_s3_add_store_app_data) 

Atau, Anda dapat menginstal driver Mountpoint untuk Amazon S3 CSI sebagai instalasi yang dikelola sendiri. Untuk petunjuk cara melakukan instalasi yang dikelola sendiri, lihat [Instalasi aktif](https://github.com/awslabs/mountpoint-s3-csi-driver/blob/main/docs/install.md#deploy-driver). GitHub

Mulai dari`v1.8.0`, Anda dapat mengonfigurasi taint untuk mentolerir Pod driver CSI. Untuk melakukan ini, tentukan satu set taint khusus untuk ditoleransi `node.tolerations` atau tolorasikan semua noda. `node.tolerateAllTaints` Untuk informasi selengkapnya, lihat [Taints and Tolerations dalam dokumentasi](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/) Kubernetes.

### eksctl
<a name="eksctl_s3_add_store_app_data"></a>

 **Untuk menambahkan add-on Amazon S3 CSI menggunakan `eksctl`** 

Jalankan perintah berikut. Ganti *my-cluster* dengan nama klaster Anda, *111122223333* dengan ID akun Anda, dan *AmazonEKS\$1S3\$1CSI\$1DriverRole* dengan nama [peran IAM yang dibuat sebelumnya](#s3-create-iam-role).

```
eksctl create addon --name aws-mountpoint-s3-csi-driver --cluster my-cluster \
  --service-account-role-arn arn:aws: iam::111122223333:role/AmazonEKS_S3_CSI_DriverRole --force
```

Jika Anda menghapus *--force* opsi dan salah satu pengaturan add-on Amazon EKS bertentangan dengan pengaturan yang ada, pembaruan add-on Amazon EKS gagal, dan Anda menerima pesan kesalahan untuk membantu Anda menyelesaikan konflik. Sebelum menentukan opsi ini, pastikan add-on Amazon EKS tidak mengelola pengaturan yang perlu Anda kelola, karena pengaturan tersebut ditimpa dengan opsi ini. Untuk informasi selengkapnya tentang opsi lain untuk setelan ini, lihat [Addons](https://eksctl.io/usage/addons/) dalam `eksctl` dokumentasi. Untuk informasi selengkapnya tentang pengelolaan lapangan Amazon EKS Kubernetes, lihat. [Tentukan bidang yang dapat Anda sesuaikan untuk add-on Amazon EKS](kubernetes-field-management.md)

Anda dapat menyesuaikan `eksctl` melalui file konfigurasi. Untuk informasi selengkapnya, lihat [Bekerja dengan nilai konfigurasi](https://eksctl.io/usage/addons/#working-with-configuration-values) dalam `eksctl` dokumentasi. Contoh berikut menunjukkan bagaimana mentolerir semua noda.

```
# config.yaml
...

addons:
- name: aws-mountpoint-s3-csi-driver
  serviceAccountRoleARN: arn:aws: iam::111122223333:role/AmazonEKS_S3_CSI_DriverRole
  configurationValues: |-
    node:
      tolerateAllTaints: true
```

### Konsol Manajemen AWS
<a name="console_s3_add_store_app_data"></a>

1. Buka [konsol Amazon EKS](https://console.aws.amazon.com/eks/home#/clusters).

1. Pada panel navigasi sebelah kiri, pilih **Klaster**.

1. Pilih nama cluster yang ingin Anda konfigurasikan add-on Mountpoint untuk Amazon S3 CSI.

1. Pilih tab **Add-ons**.

1. Pilih **Get more add-ons**

1. Pada halaman **Pilih add-on**, lakukan hal berikut:

   1. Di bagian **Amazon EKS-Addons**, pilih kotak centang **Mountpoint for Amazon S3 CSI Driver**.

   1. Pilih **Berikutnya**.

1. Pada halaman **Configure selected add-ons settings**, lakukan hal berikut:

   1. Pilih **Versi** yang ingin Anda gunakan.

   1. Untuk peran **Pilih IAM, pilih nama peran** IAM yang Anda lampirkan ke kebijakan IAM driver Mountpoint for Amazon S3 CSI.

   1. (Opsional) Perbarui **metode resolusi Konflik** setelah memperluas **pengaturan konfigurasi Opsional**. Jika Anda memilih **Override**, satu atau beberapa pengaturan untuk add-on yang ada dapat ditimpa dengan pengaturan add-on Amazon EKS. Jika Anda tidak mengaktifkan opsi ini dan ada konflik dengan pengaturan yang ada, operasi gagal. Anda dapat menggunakan pesan kesalahan yang dihasilkan untuk memecahkan masalah konflik. Sebelum memilih opsi ini, pastikan add-on Amazon EKS tidak mengelola pengaturan yang perlu Anda kelola sendiri.

   1. (Opsional) Konfigurasikan toleransi di bidang **Nilai konfigurasi** setelah memperluas **pengaturan konfigurasi opsional**.

   1. Pilih **Berikutnya**.

1. Pada halaman **Review dan add**, pilih **Create**. Setelah penginstalan add-on selesai, Anda melihat add-on yang diinstal.

### AWS CLI
<a name="awscli_s3_add_store_app_data"></a>

 **Untuk menambahkan add-on Mountpoint untuk Amazon S3 CSI menggunakan CLI AWS ** 

Jalankan perintah berikut. Ganti *my-cluster* dengan nama klaster Anda, *111122223333* dengan ID akun Anda, dan *AmazonEKS\$1S3\$1CSI\$1DriverRole* dengan nama peran yang dibuat sebelumnya.

```
aws eks create-addon --cluster-name my-cluster --addon-name aws-mountpoint-s3-csi-driver \
  --service-account-role-arn arn:aws: iam::111122223333:role/AmazonEKS_S3_CSI_DriverRole
```

Anda dapat menyesuaikan perintah dengan `--configuration-values` bendera. Contoh alternatif berikut menunjukkan bagaimana mentolerir semua noda.

```
aws eks create-addon --cluster-name my-cluster --addon-name aws-mountpoint-s3-csi-driver \
  --service-account-role-arn arn:aws: iam::111122223333:role/AmazonEKS_S3_CSI_DriverRole \
  --configuration-values '{"node":{"tolerateAllTaints":true}}'
```

## Langkah 4: Konfigurasikan Mountpoint untuk Amazon S3
<a name="s3-configure-mountpoint"></a>

Dalam kebanyakan kasus, Anda dapat mengonfigurasi Mountpoint untuk Amazon S3 hanya dengan nama bucket. Untuk petunjuk tentang mengonfigurasi Mountpoint untuk Amazon S3, lihat Mengonfigurasi [Mountpoint untuk Amazon S3 aktif](https://github.com/awslabs/mountpoint-s3/blob/main/doc/CONFIGURATION.md). GitHub

## Langkah 5: Menyebarkan aplikasi sampel
<a name="s3-sample-app"></a>

Anda dapat menerapkan penyediaan statis ke driver di bucket Amazon S3 yang ada. Untuk informasi selengkapnya, lihat [Penyediaan statis aktif.](https://github.com/awslabs/mountpoint-s3-csi-driver/blob/main/examples/kubernetes/static_provisioning/README.md) GitHub

# Hapus add-on Mountpoint untuk Amazon S3 Amazon EKS
<a name="removing-s3-csi-eks-add-on"></a>

Anda memiliki dua opsi untuk menghapus driver [Mountpoint untuk Amazon S3](s3-csi.md) CSI.
+  **Pertahankan perangkat lunak add-on di cluster Anda** — Opsi ini menghapus pengelolaan Amazon EKS dari pengaturan apa pun. Ini juga menghapus kemampuan Amazon EKS untuk memberi tahu Anda tentang pembaruan dan secara otomatis memperbarui add-on Amazon EKS setelah Anda memulai pembaruan. Namun, ini mempertahankan perangkat lunak add-on di cluster Anda. Opsi ini menjadikan add-on instalasi yang dikelola sendiri, bukan add-on Amazon EKS. Dengan opsi ini, tidak ada downtime untuk add-on. Perintah dalam prosedur ini menggunakan opsi ini.
+  **Hapus perangkat lunak add-on sepenuhnya dari klaster Anda** — Kami menyarankan Anda menghapus add-on Amazon EKS dari klaster Anda hanya jika tidak ada sumber daya di klaster Anda yang bergantung padanya. Untuk melakukan opsi ini, hapus `--preserve` dari perintah yang Anda gunakan dalam prosedur ini.

Jika add-on memiliki akun IAM yang terkait dengannya, akun IAM tidak akan dihapus.

Anda dapat menggunakan alat berikut untuk menghapus add-on Amazon S3 CSI:
+  [eksctl](#eksctl_s3_remove_store_app_data) 
+  [Konsol Manajemen AWS](#console_s3_remove_store_app_data) 
+  [AWS CLI](#awscli_s3_remove_store_app_data) 

## eksctl
<a name="eksctl_s3_remove_store_app_data"></a>

 **Untuk menghapus add-on Amazon S3 CSI menggunakan `eksctl`** 

Ganti *my-cluster* dengan nama cluster Anda, lalu jalankan perintah berikut.

```
eksctl delete addon --cluster my-cluster --name aws-mountpoint-s3-csi-driver --preserve
```

## Konsol Manajemen AWS
<a name="console_s3_remove_store_app_data"></a>

1. Buka [konsol Amazon EKS](https://console.aws.amazon.com/eks/home#/clusters).

1. Pada panel navigasi sebelah kiri, pilih **Klaster**.

1. Pilih nama cluster yang ingin Anda hapus add-on Amazon EBS CSI.

1. Pilih tab **Add-ons**.

1. Pilih **Mountpoint untuk Driver Amazon S3** CSI.

1. Pilih **Hapus**.

1. Dalam **Hapus: Konfirmasi aws-mountpoint-s 3-csi-driver** kotak dialog, lakukan hal berikut:

   1. Jika Anda ingin Amazon EKS berhenti mengelola pengaturan untuk add-on, pilih **Pertahankan di klaster**. Lakukan ini jika Anda ingin mempertahankan perangkat lunak add-on di cluster Anda. Ini agar Anda dapat mengelola semua pengaturan add-on sendiri.

   1. Masukkan `aws-mountpoint-s3-csi-driver`.

   1. Pilih **Hapus**.

## AWS CLI
<a name="awscli_s3_remove_store_app_data"></a>

 **Untuk menghapus add-on Amazon S3 CSI menggunakan CLI AWS ** 

Ganti *my-cluster* dengan nama cluster Anda, lalu jalankan perintah berikut.

```
aws eks delete-addon --cluster-name my-cluster --addon-name aws-mountpoint-s3-csi-driver --preserve
```

# Aktifkan fungsionalitas snapshot untuk volume CSI
<a name="csi-snapshot-controller"></a>

Fungsionalitas snapshot memungkinkan point-in-time salinan data Anda. Agar kemampuan ini dapat bekerja di Kubernetes, Anda memerlukan driver CSI dengan dukungan snapshot (seperti driver Amazon EBS CSI) dan pengontrol snapshot CSI. Pengontrol snapshot tersedia baik sebagai add-on terkelola Amazon EKS atau sebagai instalasi yang dikelola sendiri.

Berikut adalah beberapa hal yang perlu dipertimbangkan saat menggunakan pengontrol snapshot CSI.
+ Pengontrol snapshot harus diinstal bersama driver CSI dengan fungsionalitas snapshot. Untuk petunjuk penginstalan driver Amazon EBS CSI, lihat. [Gunakan penyimpanan volume Kubernetes dengan Amazon EBS](ebs-csi.md)
+ Kubernetes tidak mendukung snapshot volume yang disajikan melalui migrasi CSI, seperti volume Amazon EBS yang menggunakan penyedia with. `StorageClass` `kubernetes.io/aws-ebs` Volume harus dibuat dengan `StorageClass` yang mereferensikan penyedia driver CSI,. `ebs.csi.aws.com`
+ Amazon EKS Auto Mode tidak termasuk pengontrol snapshot. Kemampuan penyimpanan Mode Otomatis EKS kompatibel dengan pengontrol snapshot.

Kami menyarankan Anda menginstal pengontrol snapshot CSI melalui add-on terkelola Amazon EKS. Add-on ini mencakup definisi sumber daya kustom (CRDs) yang diperlukan untuk membuat dan mengelola snapshot di Amazon EKS. Untuk menambahkan add-on Amazon EKS ke cluster Anda, lihat[Buat add-on Amazon EKS](creating-an-add-on.md). Untuk informasi selengkapnya tentang add-on, lihat[Add-on Amazon EKS](eks-add-ons.md).

Atau, jika Anda menginginkan instalasi yang dikelola sendiri dari pengontrol snapshot CSI, lihat [Penggunaan](https://github.com/kubernetes-csi/external-snapshotter/blob/master/README.md#usage) di Kubernetes upstream aktif. `external-snapshotter` GitHub