GKE di AWS versi 1.6 dan yang lebih baru mendukung Elastic File System (EFS) AWS melalui Driver CSI EFS. Topik ini menjelaskan cara memasang sistem file EFS yang ada sebagai PersistentVolume di cluster pengguna Anda.
Sebelum memulai
Untuk melakukan langkah-langkah dalam topik ini, Anda memerlukan hal berikut:
- Sistem file EFS yang ada di AWS VPC yang sama dengan penginstalan GKE di AWS Anda.
- Setidaknya satu target pemasangan EFS di AWS VPC yang sama dengan penginstalan GKE di AWS.
- Semua target pemasangan EFS Anda harus termasuk dalam:
- Subnet pribadi untuk penginstalan GKE di AWS. Secara default, GKE di AWS membuat subnet bernama
gke-CLUSTER_ID-private-AWS_ZONE
, dengan CLUSTER_ID adalah ID cluster pengguna dan AWS_ZONE adalah zona ketersediaan AWS. -
Grup keamanan node pool.
Secara default, GKE di AWS membuat node pool bernama
gke-CLUSTER_ID-nodepool
, dengan CLUSTER_ID adalah ID cluster pengguna Anda.
- Subnet pribadi untuk penginstalan GKE di AWS. Secara default, GKE di AWS membuat subnet bernama
- Dari direktori
anthos-aws
, gunakananthos-gke
untuk beralih konteks ke cluster pengguna Anda. Ganti CLUSTER_NAME dengan nama cluster pengguna Anda.cd anthos-aws env HTTPS_PROXY=http://localhost:8118 \ anthos-gke aws clusters get-credentials CLUSTER_NAME
Menggunakan PersistentVolume EFS
Untuk menggunakan sistem file EFS sebagai PersistentVolume dengan cluster pengguna, Anda harus membuat PersistentVolume terlebih dahulu, lalu membuat PersistentVolumeClaim yang Anda referensikan di workload.
Membuat PersistentVolume
Untuk membuat PersistentVolume dengan driver CSI EFS, lakukan langkah-langkah berikut.
Dari direktori
anthos-aws
, gunakananthos-gke
untuk beralih konteks ke cluster pengguna Anda. Ganti CLUSTER_NAME dengan nama cluster pengguna Anda.cd anthos-aws env HTTPS_PROXY=http://localhost:8118 \ anthos-gke aws clusters get-credentials CLUSTER_NAME
Konfigurasi PersistentVolume yang Anda gunakan bergantung pada apakah Anda terhubung langsung ke Elastic File System atau melalui titik akses. Pilih jika Anda terhubung ke Elastic File System secara langsung 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_FILE_SYSTEM_ID
Ganti kode berikut:
- VOLUME_NAME dengan nama untuk volume persisten.
- CLAIM_NAME dengan nama yang ingin Anda gunakan untuk PersistentVolumeClaim.
- EFS_FILE_SYSTEM_ID dengan ID sistem file EFS Anda. Contoh,
fs-12345678a
.
Titik akses
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_FILE_SYSTEM_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_FILE_SYSTEM_ID dengan ID sistem file EFS Anda. Contoh,
fs-12345678a
. - ACCESS_POINT_ID dengan ID titik akses Anda. Contoh,
fsap-1234567890abcde
.
Terapkan YAML ke cluster pengguna Anda.
env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f efs-volume.yaml
Output mengonfirmasi pembuatan PersistentVolume.
persistentvolume/VOLUME_NAME created
Membuat PersistentVolumeClaim
Untuk menggunakan sistem file EFS dengan beban kerja, Anda membuat PersistentVolumeClaim.
Untuk membuat PersistentVolumeClaim, salin manifes YAML berikut ke dalam file bernama
efs-claim.yaml
.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: CLAIM_NAME spec: accessModes: - ReadWriteMany storageClassName: "" resources: requests: storage: 5Gi
Ganti CLAIM_NAME dengan nama untuk PersistentVolumeClaim Anda. Contoh,
efs-claim1
.Terapkan YAML ke cluster pengguna Anda.
env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f efs-claim.yaml
Output mengonfirmasi pembuatan PersistentVolumeClaim.
persistentvolumeclaim/CLAIM_NAME created
Buat StatefulSet
Setelah membuat PersistentVolumeClaim, Anda dapat menggunakannya dalam workload.
Langkah-langkah di bagian ini akan membuat contoh StatefulSet dengan sistem file EFS Anda yang terpasang. Anda juga dapat menggunakan PersistentVolumeClaim dengan jenis workload lain seperti Pod dan Deployment dengan mereferensikan klaim di spec.volumes
.
Untuk membuat StatefulSet yang memasang sistem file EFS yang dirujuk di PersistentVolumeClaim Anda, lakukan langkah-langkah berikut.
Salin manifes YAML berikut ke dalam file bernama
efs-statefulset.yaml
. Manifes contoh ini meluncurkan container Ubuntu Linux yang memasang sistem file EFS Anda di/efs-data
. Setiap lima detik, container menulis ke file di sistem file EFS Anda yang bernamaout.txt
.apiVersion: apps/v1 kind: StatefulSet metadata: name: efs-shell spec: selector: matchLabels: app: test-efs serviceName: efs-app replicas: 1 template: metadata: labels: app: test-efs spec: terminationGracePeriodSeconds: 10 containers: - name: linux image: ubuntu:bionic command: ["/bin/sh"] args: ["-c", "while true; do echo $(date -u) >> /efs-data/out.txt; sleep 5; done"] volumeMounts: - name: efs-volume mountPath: /efs-data volumes: - name: efs-volume persistentVolumeClaim: claimName: CLAIM_NAME
Ganti kode berikut:
- CLAIM_NAME dengan nama PersistentVolumeClaim yang Anda tentukan sebelumnya. Contoh,
efs-claim1
.
- CLAIM_NAME dengan nama PersistentVolumeClaim yang Anda tentukan sebelumnya. Contoh,
Terapkan YAML ke cluster pengguna Anda.
env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f efs-statefulset.yaml
Output mengonfirmasi pembuatan StatefulSet.
statefulset.apps/efs-shell created
StatefulSet mungkin memerlukan waktu beberapa menit untuk mendownload image container dan meluncurkan.
Konfirmasi bahwa Pod StatefulSet berstatus
Running
dengankubectl get pods
.env HTTPS_PROXY=http://localhost:8118 \ kubectl get pods -l app=test-efs
Output menyertakan nama Pod dan statusnya. Dalam respons berikut, nama Pod adalah
efs-shell-0
.NAME READY STATUS RESTARTS AGE efs-shell-0 1/1 Running 0 1m
Setelah Pod berstatus Berjalan, gunakan
kubectl exec
untuk terhubung ke Pod yang menghosting StatefulSet.env HTTPS_PROXY=http://localhost:8118 \ kubectl exec -it efs-shell-0 -- bash
Perintah
kubectl
meluncurkan shell di Pod.Untuk mengonfirmasi bahwa sistem file EFS Anda telah dipasang, periksa konten file
out.txt
dengan perintahtail
.tail /efs-data/out.txt
Output berisi waktu terbaru dalam UTC.
Putuskan koneksi dari Pod dengan perintah
exit
.exit
Shell Anda akan kembali ke komputer lokal Anda.
Untuk menghapus StatefulSet, gunakan
kubectl delete
.env HTTPS_PROXY=http://localhost:8118 \ kubectl delete -f efs-statefulset.yaml
Pembersihan
Untuk menghapus resource yang Anda buat di bagian sebelumnya, jalankan perintah berikut:
env HTTPS_PROXY=http://localhost:8118 \
kubectl delete -f efs-statefulset.yaml
env HTTPS_PROXY=http://localhost:8118 \
kubectl delete -f efs-claim.yaml
env HTTPS_PROXY=http://localhost:8118 \
kubectl delete -f efs-volume.yaml
Langkah berikutnya
- Pelajari cara tambahan untuk menggunakan volume EFS dalam
contoh
aws-efs-csi-driver
.