GKE di AWS versi 1.6 dan yang lebih baru mendukung Elastic File System (EFS) AWS melalui EFS CSI Driver. Topik ini menjelaskan cara memasang sistem file EFS yang ada sebagai PersistentVolume pada cluster pengguna Anda.
Sebelum memulai
Untuk melakukan langkah-langkah dalam topik ini, Anda memerlukan hal berikut:
- Sistem file EFS yang sudah ada di VPC AWS yang sama dengan penginstalan GKE di AWS Anda.
- Setidaknya satu target pemasangan EFS di VPC AWS yang sama dengan GKE pada penginstalan AWS.
- Semua target pemasangan EFS harus termasuk dalam kategori berikut:
- Subnet pribadi untuk GKE pada penginstalan AWS. Secara default, GKE di AWS membuat subnet bernama
gke-CLUSTER_ID-private-AWS_ZONE
, dengan CLUSTER_ID sebagai ID cluster pengguna Anda dan AWS_ZONE adalah zona ketersediaan AWS. - Grup keamanan kumpulan node.
Secara default, GKE di AWS membuat node pool dengan nama
gke-CLUSTER_ID-nodepool
, dengan CLUSTER_ID sebagai ID cluster pengguna Anda.
- Subnet pribadi untuk GKE pada penginstalan AWS. Secara default, GKE di AWS membuat subnet bernama
- Dari direktori
anthos-aws
, gunakananthos-gke
untuk mengalihkan konteks ke cluster pengguna.cd anthos-aws env HTTPS_PROXY=http://localhost:8118 \ anthos-gke aws clusters get-credentials CLUSTER_NAME
Ganti CLUSTER_NAME dengan nama cluster pengguna Anda.
Menggunakan PersistentVolume EFS
Untuk menggunakan sistem file EFS sebagai PersistentVolume dengan cluster pengguna, pertama-tama buat PersistentVolume, lalu buat PersistentVolumeClaim yang Anda rujuk dalam workload Anda.
Membuat PersistentVolume
Untuk membuat PersistentVolume dengan driver EFS CSI, lakukan langkah-langkah berikut.
Dari direktori
anthos-aws
, gunakananthos-gke
untuk mengalihkan konteks ke cluster pengguna.cd anthos-aws env HTTPS_PROXY=http://localhost:8118 \ anthos-gke aws clusters get-credentials CLUSTER_NAME
Ganti CLUSTER_NAME dengan nama cluster pengguna Anda.Konfigurasi PersistentVolume yang Anda gunakan bergantung pada apakah Anda terhubung langsung ke Elastic File System atau melalui titik akses. Pilih apakah Anda terhubung ke Elastic File System secara langsung 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_FILE_SYSTEM_ID
Ganti kode berikut:
- VOLUME_NAME yang diberi nama untuk volume persisten.
- CLAIM_NAME dengan nama yang ingin Anda gunakan untuk PersistentVolumeClaim.
- EFS_FILE_SYSTEM_ID dengan ID sistem file EFS Anda. Misalnya,
fs-12345678a
.
Titik akses
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_FILE_SYSTEM_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_FILE_SYSTEM_ID dengan ID sistem file EFS Anda. Misalnya,
fs-12345678a
. - ACCESS_POINT_ID dengan ID titik akses Anda. Misalnya,
fsap-1234567890abcde
.
Terapkan YAML ke cluster pengguna Anda.
env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f efs-volume.yaml
Output-nya mengonfirmasi pembuatan PersistentVolume.
persistentvolume/VOLUME_NAME created
Membuat PersistentVolumeClaim
Untuk menggunakan sistem file EFS dengan workload, buat 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. Contoh,
efs-claim1
.Terapkan YAML ke cluster pengguna Anda.
env HTTPS_PROXY=http://localhost:8118 \ 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.
Langkah-langkah di bagian ini akan membuat contoh StatefulSet dengan terpasangnya sistem
file EFS Anda. 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 sistem file 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 sistem file EFS di/efs-data
. Container menulis setiap lima detik 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-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
.env HTTPS_PROXY=http://localhost:8118 \ 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.env HTTPS_PROXY=http://localhost:8118 \ kubectl exec -it efs-shell-0 -- bash
Perintah
kubectl
meluncurkan shell pada Pod.Untuk memastikan bahwa sistem file EFS Anda 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.
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 selanjutnya
- Pelajari cara lain untuk menggunakan volume EFS dalam
contoh
aws-efs-csi-driver
.