彈性檔案系統 (EFS) 是 AWS 的基礎機制,可為叢集提供儲存空間 (磁碟空間)。PersistentVolume 是叢集資源,可供工作負載使用 EFS 儲存空間,並確保儲存空間在沒有工作負載連線時仍可持續使用。本主題說明工作負載如何透過 PersistentVolumeClaim 存取 PersistentVolume。
本頁適用於想要設定及管理儲存空間的運算子和儲存空間專家。如要進一步瞭解內容中提及的常見角色和範例工作,請參閱「常見的 GKE Enterprise 使用者角色和工作」。 Google Cloud
GKE on AWS 支援所有 Kubernetes 支援版本的 PersistentVolumes 靜態佈建。如果是 Kubernetes 1.24 以上版本的叢集,GKE on AWS 也支援動態佈建。如要使用動態佈建,叢集管理員必須進行設定。如要瞭解如何設定,請參閱設定 PersistentVolume
。
建立 PersistentVolumeClaim
根據您希望工作負載連線至靜態或動態佈建的永久磁碟區,選擇下方的適當分頁標籤。
靜態
這些操作說明假設叢集管理員已佈建至少一個 PersistentVolume。如要存取這個 PersistentVolume,並透過工作負載使用其基礎 EFS,請建立 PersistentVolumeClaim。
如要為靜態佈建的 PersistentVolume 建立 PersistentVolumeClaim,請將下列 YAML 資訊清單複製到名為 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
取代:
- CLAIM_NAME:您為要繫結的 PersistentVolumeClaim 選擇的名稱,例如
efs-claim1
。如要繫結至預設儲存空間類別,請將此欄位留白
將 YAML 套用至叢集。
kubectl apply -f efs-claim.yaml
這項輸出內容會確認 PersistentVolumeClaim 的建立作業。
persistentvolumeclaim/CLAIM_NAME created
動態
這些操作說明假設叢集管理員已為動態佈建佈建至少一個 StorageClass。如要使用這個 StorageClass 建立動態佈建的 PersistentVolume,並搭配工作負載使用基礎 EFS 存取點,請建立 PersistentVolumeClaim。
如要建立 PersistentVolumeClaim,請按照下列步驟操作。EFS CSI 驅動程式會使用這個 PersistentVolumeClaim 和指定的 StorageClass,動態佈建 PersistentVolume。
- 將下列 YAML 資訊清單複製到名為
efs-claim.yaml
的檔案。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: CLAIM_NAME
spec:
accessModes:
- ReadWriteMany
storageClassName: "EFS_STORAGE_CLASS_NAME"
resources:
requests:
storage: 5Gi
取代:
- CLAIM_NAME:您為 PersistentVolumeClaim 選擇的名稱,例如
efs-claim1
- EFS_STORAGE_CLASS_NAME:您希望 PersistentVolumeClaim 繫結的 StorageClass 名稱。將此欄位留空,即可繫結至預設儲存空間類別
將 YAML 套用至叢集。
kubectl apply -f efs-claim.yaml
輸出內容會確認 PersistentVolumeClaim 的建立作業。
persistentvolumeclaim/CLAIM_NAME created
建立 StatefulSet
建立 PersistentVolumeClaim 後,即可在工作負載中使用。本節會建立使用 PersistentVolumeClaim 的範例 StatefulSet。您也可以在 spec.volumes
中參照要求,將 PersistentVolumeClaim 用於其他工作負載類型,例如 Pod 和 Deployment。
如要建立 StatefulSet,並掛接 PersistentVolumeClaim 中參照的 EFS 資源,請執行下列步驟。
將下列 YAML 資訊清單複製到名為
efs-statefulset.yaml
的檔案。 這個範例資訊清單會啟動 Ubuntu Linux 容器,並在/efs-data
掛接 EFS 資源。容器每五秒會寫入 EFS 資源上名為out.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
將 CLAIM_NAME 替換為您先前指定的 PersistentVolumeClaim 名稱,例如
efs-claim1
。將 YAML 套用至叢集。
kubectl apply -f efs-statefulset.yaml
輸出內容會確認 StatefulSet 的建立作業。
statefulset.apps/efs-shell created
StatefulSet 可能需要幾分鐘才能下載及啟動容器映像檔。
使用
kubectl get pods
確認 StatefulSet 的 Pod 處於Running
狀態。kubectl get pods -l app=test-efs
輸出內容會顯示 Pod 名稱和狀態。在以下回應中,Pod 的名稱為
efs-shell-0
。NAME READY STATUS RESTARTS AGE efs-shell-0 1/1 Running 0 1m
Pod 處於「Running」狀態後,請使用
kubectl exec
連線至代管 StatefulSet 的 Pod。kubectl exec -it efs-shell-0 -- bash
kubectl
指令會在 Pod 上啟動殼層。如要確認 EFS 資源是否已掛接,請使用
tail
指令檢查out.txt
檔案的內容。tail /efs-data/out.txt
輸出內容會顯示最近的時間 (以世界標準時間為準)。
使用
exit
指令與 Pod 中斷連線。exit
殼層會返回本機電腦。
清除所用資源
如要移除 StatefulSet,請使用 kubectl delete
。
kubectl delete -f efs-statefulset.yaml
後續步驟
- 瞭解如何設定 EFS 資源
- 瞭解如何在工作負載中使用 StorageClasses