Halaman ini menjelaskan cara menyiapkan PersistentVolume berbasis EFS untuk digunakan di GKE di AWS menggunakan Driver CSI EFS. Elastic File System (EFS) adalah mekanisme AWS yang mendasarinya yang menyediakan sistem file jaringan ke cluster Anda. PersistentVolume berbasis EFS adalah resource cluster yang menyediakan penyimpanan untuk workload Anda melalui titik akses EFS, dan memastikan penyimpanan tetap ada meskipun tidak ada workload yang terhubung ke sana.
Halaman ini ditujukan bagi Operator dan spesialis Penyimpanan yang ingin mengonfigurasi dan mengelola penyimpanan. Untuk mempelajari lebih lanjut peran umum dan contoh tugas yang kami referensikan dalam konten, lihat Peran dan tugas pengguna GKE umum. Google Cloud
GKE di AWS mendukung penyediaan PersistentVolume statis dan dinamis. Penyediaan dinamis menggunakan penyiapan yang sedikit berbeda, tetapi memerlukan lebih sedikit upaya administratif setelahnya.
Sebelum memulai
Untuk melakukan langkah-langkah di halaman ini, selesaikan terlebih dahulu langkah-langkah berikut:
- Pahami cara Kubernetes dan GKE di AWS menangani penyimpanan workload. Untuk mempelajari topik ini, lihat artikel Menggunakan penyimpanan persisten di workload GKE di AWS dan Membuat resource Amazon EFS.
- Lakukan upgrade ke Kubernetes versi 1.25 atau yang lebih baru untuk menggunakan penyediaan dinamis PersistentVolume menggunakan EFS. Jika Anda menggunakan Kubernetes versi 1.24, hubungi dukungan untuk mendapatkan akses ke fitur ini.
Ringkasan penyediaan statis
Membuat Elastic File System (EFS) dan menyediakannya untuk beban kerja di cluster Anda melalui penyediaan statis memiliki empat langkah:
- Buat resource EFS Anda
- Mengonfigurasi jaringan Anda
- Membuat target pemasangan
- Membuat
PersistentVolume
Langkah terakhir dilakukan oleh workload: meminta penyimpanan persisten dengan mengeluarkan
PersistentVolumeClaim
.
Ringkasan penyediaan dinamis
Membuat resource EFS dan menyediakannya melalui penyediaan dinamis juga memiliki empat langkah:
- Buat resource EFS Anda
- Mengonfigurasi jaringan Anda
- Membuat target pemasangan
- Membuat
StorageClass
Pembuatan StorageClass
adalah operasi satu kali. Setelah kelas penyimpanan dengan karakteristik tertentu ditentukan, beban kerja dapat mengeluarkan PersistentVolumeClaim, atau meminta penyimpanan persisten. Semua PersistentVolumeClaim untuk penyimpanan dengan
karakteristik tersebut dapat meminta StorageClass
yang sama.
Langkah-langkah umum
Baik Anda menggunakan penyediaan statis atau dinamis di cluster, Anda harus memulai dengan langkah-langkah penyiapan yang tercantum di sini, lalu melanjutkan dengan langkah-langkah penyediaan statis atau dinamis yang sesuai. Setelah Anda membuat EFS dan membuatnya dapat diakses, workload harus melakukan langkah-langkah terakhir untuk mengaksesnya. Langkah-langkah untuk melakukannya dijelaskan dalam Menggunakan penyimpanan EFS.
Membuat Resource AWS EFS
Resource EFS diperlukan baik Anda menggunakan penyediaan statis maupun dinamis. Jika cluster Anda menggunakan keduanya, Anda dapat membuat resource EFS terpisah untuk keduanya atau menggunakan resource yang sama untuk keduanya. Lihat Membuat sistem file Amazon EFS untuk membaca lebih lanjut cara membuat resource EFS.
Anda juga dapat menggunakan kembali EFS yang ada. Dalam hal ini, Anda dapat melewati bagian ini dan melanjutkan ke Membuat target pemasangan.
Dapatkan region AWS tempat cluster Anda berjalan.
gcloud container aws clusters describe CLUSTER_NAME \ --location=LOCATION \ --format="value(awsRegion)"
Ganti kode berikut:
- CLUSTER_NAME: nama cluster AWS.
- LOCATION: Google Cloud lokasi cluster AWS
Buat sistem resource EFS di region AWS yang sama dengan perintah berikut.
aws efs create-file-system \ --region AWS_REGION \ --performance-mode generalPurpose \ --query 'FileSystemId' \ --output text
Ganti kode berikut:
- AWS_REGION: region AWS tempat cluster berjalan
Output-nya mencakup ID sistem file. Simpan nilai ini. Anda nanti akan membutuhkannya.
Membuat target pemasangan
Driver CSI untuk EFS mengakses sistem file melalui target pemasangan EFS. Target pemasangan adalah alamat IP pribadi yang menggunakan grup keamanan AWS untuk mengontrol akses ke EFS yang mendasarinya.
Jika node pool di cluster Anda berjalan di subnet yang berbeda, Anda harus membuat target pemasangan terpisah di setiap subnet node pool.
Dalam contoh ini, akses ke setiap target pemasangan dilindungi oleh satu grup keamanan yang mencakup target pemasangan dan mesin node pool. Bergantung pada konfigurasi VPC dan persyaratan keamanan, Anda dapat memilih untuk membagi konfigurasi ini menjadi dua atau lebih grup keamanan—misalnya, satu untuk target pemasangan dan satu lagi untuk node pekerja node pool.
Buat grup keamanan khusus untuk mengontrol akses ke EFS
Dapatkan ID VPC AWS tempat cluster berjalan.
gcloud container aws clusters describe CLUSTER_NAME \ --location=LOCATION \ --format="value(networking.vpcId)"
Ganti kode berikut:
- CLUSTER_NAME
- LOCATION
Output-nya mencakup ID VPC Anda. Simpan nilai ini. Anda nanti akan membutuhkannya.
Buat grup keamanan untuk mengontrol akses ke target pemasangan EFS Anda.
aws ec2 create-security-group \ --group-name gke-efs-security-group \ --description "EFS security group" \ --vpc-id VPC_ID \ --output text
Ganti VPC_ID dengan ID VPC AWS tempat cluster berjalan.
Output-nya mencakup ID grup keamanan baru. Simpan nilai ini. Anda nanti akan membutuhkannya.
Secara default, AWS membuat grup keamanan dengan aturan default yang mengizinkan semua traffic keluar. Hapus aturan keluar default.
aws ec2 revoke-security-group-egress \ --group-id SECURITY_GROUP_ID --ip-permissions '[{"IpProtocol":"-1","FromPort":-1,"ToPort":-1,"IpRanges":[{"CidrIp":"0.0.0.0/0"}]}]'
Ganti SECURITY_GROUP_ID dengan ID grup keamanan AWS.
Otorisasi traffic masuk dan keluar untuk EFS (port 2049).
aws ec2 authorize-security-group-ingress \ --group-id SECURITY_GROUP_ID \ --protocol tcp \ --port 2049 \ --source-group SECURITY_GROUP_ID
aws ec2 authorize-security-group-egress \ --group-id SECURITY_GROUP_ID \ --protocol tcp \ --port 2049 \ --source-group SECURITY_GROUP_ID
Buat target pemasangan EFS di setiap subnet node pool.
Mencantumkan subnet yang terkait dengan semua node pool.
gcloud container aws node-pools list \ --cluster=CLUSTER_NAME \ --location=LOCATION \ --format="value(subnetId)"
Ganti kode berikut:
- CLUSTER_NAME
- LOCATION
Outputnya adalah daftar ID subnet. Simpan nilai ini. Anda nanti akan membutuhkannya.
Untuk setiap subnet, buat target pemasangan EFS terkait dengan grup keamanan yang diterapkan.
aws efs create-mount-target \ --file-system-id EFS_ID \ --subnet-id SUBNET_ID \ --security-groups SECURITY_GROUP_ID
Ganti kode berikut:
- EFS_ID: ID resource EFS Anda.
- SUBNET_ID: ID subnet node pool.
- SECURITY_GROUP_ID
Tambahkan grup keamanan EFS ke semua node pool cluster.
Dapatkan daftar semua node pool Anda.
gcloud container aws node-pools list \ --cluster=CLUSTER_NAME \ --location=LOCATION
Ganti kode berikut:
- CLUSTER_NAME
- LOCATION
Output menyertakan nama node pool cluster Anda. Simpan nilai ini. Anda nanti akan membutuhkannya.
Perbarui setiap kumpulan node untuk menyertakan grup keamanan EFS baru.
gcloud container aws node-pools update NODE_POOL_NAME \ --cluster=CLUSTER_NAME \ --location=LOCATION \ --security-group-ids=SECURITY_GROUP_IDS
Ganti kode berikut:
- NODE_POOL_NAME: nama node pool.
- CLUSTER_NAME: nama cluster Anda.
- LOCATION
- SECURITY_GROUP_IDS daftar ID grup keamanan untuk node pekerja.
Buat PersistentVolume (statis) atau StorageClass (dinamis)
Jika Anda menggunakan penyediaan statis, langkah berikutnya adalah membuat PersistentVolume. Jika Anda menggunakan penyediaan dinamis, driver EFS akan melakukannya untuk Anda; sebagai gantinya, Anda menentukan StorageClass untuk workload yang akan ditentukan dalam PersistentVolumeClaim-nya. Pilih tab yang sesuai dengan metode penyediaan yang Anda pilih.
Penyediaan statis
Jika Anda menggunakan penyediaan statis, langkah berikutnya adalah membuat PersistentVolume yang memasang share EFS.
Pilih tab yang sesuai, bergantung pada apakah Anda terhubung langsung ke share EFS atau melalui titik akses.
Terhubung langsung
Salin manifes YAML berikut ke dalam file bernama
efs-volume.yaml
. Manifes mereferensikan class penyimpanan EFS yang Anda buat sebelumnya.apiVersion: v1 kind: PersistentVolume metadata: name: VOLUME_NAME spec: capacity: # Note: storage capacity is not used by the EFS CSI driver. # It is required by the PersistentVolume spec. storage: 5Gi volumeMode: Filesystem accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain storageClassName: "" # storageClassName is not required, see note in the following section. claimRef: name: CLAIM_NAME namespace: default csi: driver: efs.csi.aws.com volumeHandle: EFS_ID
Ganti kode berikut:
- VOLUME_NAME dengan nama untuk volume persisten.
- CLAIM_NAME dengan nama yang ingin Anda gunakan untuk PersistentVolumeClaim.
- EFS_ID dengan ID resource EFS Anda. Contoh,
fs-12345678a
.
Titik akses
Untuk membuat volume berbasis titik akses, Anda harus menyediakan volume tersebut secara manual. Lihat Bekerja dengan titik akses EFS untuk mengetahui informasi selengkapnya.
Salin manifes YAML berikut ke dalam file bernama
efs-volume.yaml
. Manifes mereferensikan class penyimpanan EFS yang Anda buat sebelumnya.apiVersion: v1 kind: PersistentVolume metadata: name: VOLUME_NAME spec: capacity: # Note: storage capacity is not used by the EFS CSI driver. # It is required by the PersistentVolume spec. storage: 5Gi volumeMode: Filesystem accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain # Set storageClassName to empty string for static provisioning. See [Use an EFS resource](/kubernetes-engine/multi-cloud/docs/aws/how-to/use-efs) storageClassName: "" claimRef: name: CLAIM_NAME namespace: default csi: driver: efs.csi.aws.com volumeHandle: EFS_ID::ACCESS_POINT_ID
Ganti kode berikut:
- VOLUME_NAME dengan nama untuk volume persisten.
- CLAIM_NAME dengan nama yang ingin Anda gunakan untuk PersistentVolumeClaim.
- EFS_ID dengan ID resource EFS Anda. Contoh,
fs-12345678a
. - ACCESS_POINT_ID dengan ID titik akses Anda. Contoh,
fsap-1234567890abcde
.
Terapkan YAML ke cluster Anda.
kubectl apply -f efs-volume.yaml
Output mengonfirmasi pembuatan PersistentVolume.
persistentvolume/VOLUME_NAME created
Penyediaan dinamis
Bagian ini menjelaskan cara membuat StorageClass yang mereferensikan resource EFS yang Anda buat sebelumnya. Setelah selesai, developer dapat mengakses resource EFS dengan mengikuti langkah-langkah yang dijelaskan dalam Menggunakan resource EFS.
Buat StorageClass yang mereferensikan ID resource EFS.
Salin fragmen YAML berikut ke file baru bernama
efs-storage-class.yaml
. Untuk mempelajari lebih lanjut cara menyesuaikan karakteristik StorageClass yang dijelaskan oleh file ini, lihat dokumentasi tentang parameter StorageClass EFS.kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: EFS_STORAGE_CLASS_NAME provisioner: efs.csi.aws.com mountOptions: - tls parameters: provisioningMode: efs-ap fileSystemId: EFS_ID directoryPerms: "700"
Ganti:
- EFS_STORAGE_CLASS_NAME dengan nama yang Anda pilih untuk StorageClass.
- EFS_ID dengan ID resource EFS Anda - misalnya, fs-12345678a.
Terapkan YAML ke cluster Anda.
kubectl apply -f efs-storage-class.yaml
Jika berhasil, output perintah ini akan berisi baris yang mirip dengan berikut:
storageclass/EFS_STORAGE_CLASS_NAME created
Pembersihan
Untuk menghapus resource yang Anda buat di bagian sebelumnya, jalankan perintah berikut:
Gunakan
kubectl
untuk menghapus resource klaim EFS dari cluster Anda:kubectl delete -f efs-claim.yaml
Jika menggunakan penyediaan statis, gunakan
kubectl
untuk menghapus resource terkait dari cluster Anda:kubectl delete -f efs-volume.yaml
Jika menggunakan penyediaan dinamis, gunakan
kubectl
untuk menghapus resource terkait dari cluster Anda:kubectl delete -f efs-storage-class.yaml
Temukan ID target pemasangan Anda:
aws efs describe-mount-targets \ --file-system-id EFS_ID \ --profile adminuser \ --region AWS_REGION
Ganti kode berikut:
- EFS_ID: ID resource EFS Anda
- AWS_REGION: region AWS tempat cluster berjalan
Output-nya mencakup ID target pemasangan. Simpan nilai ini. Anda nanti akan membutuhkannya.
Hapus target pemasangan EFS Anda:
aws efs delete-mount-target \ --mount-target-id MOUNT_TARGET_ID \ --profile adminuser \ --region AWS_REGION
Ganti kode berikut:
- MOUNT_TARGET_ID: ID target pemasangan EFS Anda
- AWS_REGION: region AWS target pemasangan Anda
Hapus semua grup keamanan yang Anda buat.
Hapus sistem file menggunakan perintah CLI delete-file-system. Anda dapat mendapatkan daftar sistem file menggunakan perintah CLI describe-file-systems. ID sistem file ada dalam respons.
aws efs delete-file-system \ --file-system-id EFS_ID \ --profile adminuser \ --region AWS_REGION
Ganti kode berikut:
- EFS_ID
- AWS_REGION
Langkah berikutnya
- Pelajari cara menggunakan
PersistentVolumeClaim
dari workload untuk mengakses volume EFS - Pelajari cara tambahan untuk menggunakan volume EFS dalam
contoh
aws-efs-csi-driver
.