Elastic File System (EFS) adalah mekanisme AWS dasar untuk menyediakan penyimpanan (ruang disk) ke cluster Anda. PersistentVolume adalah resource cluster yang menyediakan penyimpanan EFS untuk workload Anda dan memastikannya tetap ada meskipun tidak ada workload yang terhubung ke dalamnya. Topik ini menjelaskan cara beban kerja dapat mengakses PersistentVolume dengan PersistentVolumeClaim.
GKE di AWS mendukung penyediaan statis PersistentVolumes untuk semua versi Kubernetes yang didukung. Untuk cluster di Kubernetes versi 1.24 atau yang lebih baru, GKE di AWS juga mendukung penyediaan dinamis. Untuk menggunakan penyediaan dinamis, administrator cluster Anda harus mengonfigurasinya. Untuk mempelajari caranya, lihat
mengonfigurasi PersistentVolume
.
Membuat PersistentVolumeClaim
Pilih tab yang sesuai di bawah ini, bergantung pada apakah Anda ingin workload terhubung ke volume persisten yang disediakan secara statis atau dinamis.
Statis
Petunjuk ini mengasumsikan bahwa administrator cluster Anda telah menyediakan setidaknya satu PersistentVolume. Untuk mengakses PersistentVolume ini dan menggunakan EFS dasar dengan workload Anda, buat PersistentVolumeClaim.
Untuk membuat PersistentVolumeClaim untuk PersistentVolume yang disediakan secara statis, salin manifes YAML berikut ke dalam file bernama efs-claim.yaml
.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: CLAIM_NAME
spec:
accessModes:
- ReadWriteMany
storageClassName: "" # Leave as empty string for static provisioning
resources:
requests:
storage: 5Gi
Ganti:
- CLAIM_NAME: nama yang Anda pilih untuk diikat oleh PersistentVolumeClaim - misalnya,
efs-claim1
. Biarkan kosong untuk mengikat ke kelas penyimpanan default
Terapkan YAML ke cluster Anda.
kubectl apply -f efs-claim.yaml
Output ini mengonfirmasi pembuatan PersistentVolumeClaim.
persistentvolumeclaim/CLAIM_NAME created
Dinamis
Petunjuk ini mengasumsikan bahwa administrator cluster Anda telah menyediakan setidaknya satu StorageClass untuk penyediaan dinamis. Untuk membuat PersistentVolume yang disediakan secara dinamis dengan StorageClass ini dan menggunakan titik akses EFS yang mendasarinya dengan workload Anda, buat PersistentVolumeClaim.
Untuk membuat PersistentVolumeClaim, ikuti langkah-langkah berikut. Driver EFS CSI menggunakan PersistentVolumeClaim ini dengan StorageClass yang ditunjukkan untuk menyediakan PersistentVolume secara dinamis.
- Salin manifes YAML berikut ke dalam file bernama
efs-claim.yaml
.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: CLAIM_NAME
spec:
accessModes:
- ReadWriteMany
storageClassName: "EFS_STORAGE_CLASS_NAME"
resources:
requests:
storage: 5Gi
Ganti:
- CLAIM_NAME: nama yang Anda pilih untuk PersistentVolumeClaim - misalnya,
efs-claim1
- EFS_STORAGE_CLASS_NAME: nama StorageClass yang Anda inginkan untuk diikat oleh PersistentVolumeClaim. Biarkan kolom ini kosong untuk mengikat ke kelas penyimpanan {i>default<i}
Terapkan YAML ke cluster Anda.
kubectl apply -f efs-claim.yaml
Output-nya mengonfirmasi pembuatan PersistentVolumeClaim.
persistentvolumeclaim/CLAIM_NAME created
Membuat StatefulSet
Setelah membuat PersistentVolumeClaim, Anda dapat menggunakannya dalam beban kerja.
Bagian ini membuat contoh StatefulSet yang menggunakan PersistentVolumeClaim.
Anda juga dapat menggunakan PersistentVolumeClaim dengan jenis beban kerja lainnya seperti Pod dan Deployment dengan mereferensikan klaim di spec.volumes
.
Untuk membuat StatefulSet yang memasang resource EFS yang dirujuk dalam PersistentVolumeClaim, lakukan langkah-langkah berikut.
Salin manifes YAML berikut ke dalam file bernama
efs-statefulset.yaml
. Manifes contoh ini meluncurkan container Linux Ubuntu yang memasang resource EFS di/efs-data
. Container menulis setiap lima detik ke file di resource 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 CLAIM_NAME dengan nama PersistentVolumeClaim yang Anda tentukan sebelumnya - misalnya,
efs-claim1
.Terapkan YAML ke cluster Anda.
kubectl apply -f efs-statefulset.yaml
Output-nya mengonfirmasi pembuatan StatefulSet.
statefulset.apps/efs-shell created
StatefulSet mungkin memerlukan waktu beberapa menit untuk mendownload dan meluncurkan image container.
Pastikan Pod StatefulSet memiliki status
Running
dengankubectl get pods
.kubectl get pods -l app=test-efs
Output mencakup 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 dalam status Running, gunakan
kubectl exec
untuk terhubung ke Pod yang menghosting StatefulSet.kubectl exec -it efs-shell-0 -- bash
Perintah
kubectl
meluncurkan shell pada Pod.Untuk memastikan bahwa resource EFS sudah terpasang, periksa isi 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 akan kembali ke komputer lokal Anda.
Pembersihan
Untuk menghapus StatefulSet, gunakan kubectl delete
.
kubectl delete -f efs-statefulset.yaml
Langkah selanjutnya
- Pelajari cara mengonfigurasi resource EFS
- Pelajari cara menggunakan StorageClass dengan workload Anda