Halaman ini menjelaskan cara menyiapkan PersistentVolume berbasis EFS untuk digunakan dalam GKE pada AWS menggunakan Driver EFS CSI. Elastic File System (EFS) adalah mekanisme AWS dasar 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 bahwa penyimpanan tetap ada meskipun tidak ada beban kerja yang terhubung ke penyimpanan tersebut.
GKE di AWS mendukung penyediaan PersistentVolumes statis dan dinamis. Penyediaan dinamis menggunakan penyiapan yang sedikit berbeda, tetapi setelahnya hanya membutuhkan upaya administratif.
Sebelum memulai
Untuk melakukan langkah-langkah di halaman ini, pertama-tama selesaikan langkah-langkah berikut:
- Pahami cara Kubernetes dan GKE di AWS menangani penyimpanan workload. Untuk mempelajari topik ini, lihat Menggunakan penyimpanan persisten di GKE pada workload AWS dan Membuat resource Amazon EFS.
- Upgrade ke Kubernetes versi 1.25 atau yang lebih baru untuk menggunakan penyediaan dinamis PersistentVolumes menggunakan EFS. Jika Anda menggunakan Kubernetes versi 1.24, hubungi dukungan untuk mendapatkan akses ke fitur ini.
Ringkasan penyediaan statis
Membuat Sistem File Elastic (EFS) dan menyediakannya untuk beban kerja di cluster melalui penyediaan statis memiliki empat langkah:
- Buat resource EFS
- Mengonfigurasi jaringan Anda
- Membuat target pemasangan
- Membuat
PersistentVolume
Langkah terakhir adalah dengan beban kerja: untuk meminta penyimpanan persisten dengan mengeluarkan
PersistentVolumeClaim
.
Ringkasan penyediaan dinamis
Membuat resource EFS dan menyediakannya melalui penyediaan dinamis juga memiliki empat langkah:
- Buat resource EFS
- 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 PersistentVolumeClaims untuk penyimpanan dengan karakteristik tersebut dapat meminta StorageClass
yang sama.
Langkah umum
Baik menggunakan penyediaan statis maupun dinamis di cluster, Anda harus memulai dengan langkah-langkah penyiapan yang tercantum di sini, lalu melanjutkan dengan langkah penyediaan statis atau dinamis yang sesuai. Setelah Anda membuat EFS dan dapat diakses, beban kerja harus mengambil 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 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 selengkapnya tentang 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 dijalankan.
gcloud container aws clusters describe CLUSTER_NAME \ --location=LOCATION \ --format="value(awsRegion)"
Ganti kode berikut:
- CLUSTER_NAME: nama cluster AWS.
- LOCATION: lokasi Google Cloud 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 dijalankan
Outputnya 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 kumpulan node dalam cluster Anda berjalan di subnet yang berbeda, Anda harus membuat target pemasangan yang terpisah di setiap subnet kumpulan node.
Dalam contoh ini, akses ke setiap target pemasangan dilindungi oleh satu grup keamanan yang mencakup target pemasangan dan mesin kumpulan node. Bergantung pada konfigurasi VPC dan persyaratan keamanan, Anda dapat memilih untuk membagi konfigurasi ini menjadi dua grup keamanan atau lebih—misalnya, satu untuk target pemasangan dan satu lagi untuk node pekerja kumpulan node.
Buat grup keamanan khusus untuk mengontrol akses ke EFS
Dapatkan ID VPC AWS tempat cluster dijalankan.
gcloud container aws clusters describe CLUSTER_NAME \ --location=LOCATION \ --format="value(networking.vpcId)"
Ganti kode berikut:
- CLUSTER_NAME
- LOCATION
Outputnya 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.
Outputnya 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.
Mengizinkan 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 kumpulan node.
Mencantumkan subnet yang terkait dengan semua kumpulan node.
gcloud container aws node-pools list \ --cluster=CLUSTER_NAME \ --location=LOCATION \ --format="value(subnetId)"
Ganti kode berikut:
- CLUSTER_NAME
- LOCATION
Output-nya 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 kumpulan node.
- SECURITY_GROUP_ID
Tambahkan grup keamanan EFS ke semua kumpulan node cluster.
Dapatkan daftar semua kumpulan node Anda.
gcloud container aws node-pools list \ --cluster=CLUSTER_NAME \ --location=LOCATION
Ganti kode berikut:
- CLUSTER_NAME
- LOCATION
Outputnya menyertakan nama-nama kumpulan node 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.
Membuat 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 akan menentukan StorageClass untuk ditetapkan dalam PersistentVolumeClaim. Pilih tab yang cocok dengan metode penyediaan yang Anda pilih.
Penyediaan statis
Jika Anda menggunakan penyediaan statis, langkah berikutnya adalah membuat PersistentVolume yang memasang berbagi EFS.
Pilih tab yang sesuai, tergantung apakah Anda terhubung langsung ke berbagi EFS atau melalui titik akses.
Terhubung secara langsung
Salin manifes YAML berikut ke dalam file bernama
efs-volume.yaml
. Manifes merujuk ke kelas 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 yang diberi nama untuk volume persisten.
- CLAIM_NAME dengan nama yang ingin Anda gunakan untuk PersistentVolumeClaim.
- EFS_ID dengan ID resource EFS Anda. Misalnya,
fs-12345678a
.
Titik akses
Untuk membuat volume berbasis titik akses, Anda perlu menyediakannya secara manual. Lihat Bekerja dengan titik akses EFS untuk mengetahui informasi selengkapnya.
Salin manifes YAML berikut ke dalam file bernama
efs-volume.yaml
. Manifes merujuk ke kelas 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 yang diberi nama untuk volume persisten.
- CLAIM_NAME dengan nama yang ingin Anda gunakan untuk PersistentVolumeClaim.
- EFS_ID dengan ID resource EFS Anda. Misalnya,
fs-12345678a
. - ACCESS_POINT_ID dengan ID titik akses Anda. Misalnya,
fsap-1234567890abcde
.
Terapkan YAML ke cluster Anda.
kubectl apply -f efs-volume.yaml
Output-nya mengonfirmasi pembuatan PersistentVolume.
persistentvolume/VOLUME_NAME created
Penyediaan dinamis
Bagian ini menjelaskan cara membuat StorageClass yang mereferensikan resource EFS yang Anda buat sebelumnya. Setelah hal ini dilakukan, developer dapat mengakses resource EFS dengan mengikuti langkah-langkah yang dijelaskan dalam Menggunakan resource EFS.
Buat StorageClass yang merujuk ke 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 EFS StorageClass.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 dijalankan
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
- AWS_REGION: region AWS dari target pemasangan Anda
Hapus semua grup keamanan yang Anda buat.
Menghapus sistem file menggunakan perintah CLI {i>delete-file-system<i}. Anda dapat memperoleh daftar sistem file menggunakan perintah CLI jelaskan-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 selanjutnya
- Pelajari cara menggunakan
PersistentVolumeClaim
dari workload untuk mengakses volume EFS - Pelajari cara lain untuk menggunakan volume EFS dalam
contoh
aws-efs-csi-driver
.