使用 EFS 資源

彈性檔案系統 (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。如要繫結至預設儲存空間類別,請將此欄位留白
  1. 將 YAML 套用至叢集。

      kubectl apply -f efs-claim.yaml
    

    這項輸出內容會確認 PersistentVolumeClaim 的建立作業。

    persistentvolumeclaim/CLAIM_NAME created
    

動態

這些操作說明假設叢集管理員已為動態佈建佈建至少一個 StorageClass。如要使用這個 StorageClass 建立動態佈建的 PersistentVolume,並搭配工作負載使用基礎 EFS 存取點,請建立 PersistentVolumeClaim。

如要建立 PersistentVolumeClaim,請按照下列步驟操作。EFS CSI 驅動程式會使用這個 PersistentVolumeClaim 和指定的 StorageClass,動態佈建 PersistentVolume。

  1. 將下列 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 名稱。將此欄位留空,即可繫結至預設儲存空間類別
  1. 將 YAML 套用至叢集。

      kubectl apply -f efs-claim.yaml
    

    輸出內容會確認 PersistentVolumeClaim 的建立作業。

    persistentvolumeclaim/CLAIM_NAME created
    

建立 StatefulSet

建立 PersistentVolumeClaim 後,即可在工作負載中使用。本節會建立使用 PersistentVolumeClaim 的範例 StatefulSet。您也可以在 spec.volumes 中參照要求,將 PersistentVolumeClaim 用於其他工作負載類型,例如 Pod 和 Deployment。

如要建立 StatefulSet,並掛接 PersistentVolumeClaim 中參照的 EFS 資源,請執行下列步驟。

  1. 將下列 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

  2. 將 YAML 套用至叢集。

     kubectl apply -f efs-statefulset.yaml
    

    輸出內容會確認 StatefulSet 的建立作業。

    statefulset.apps/efs-shell created
    

    StatefulSet 可能需要幾分鐘才能下載及啟動容器映像檔。

  3. 使用 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
    
  4. Pod 處於「Running」狀態後,請使用 kubectl exec 連線至代管 StatefulSet 的 Pod。

      kubectl exec -it efs-shell-0 -- bash
    

    kubectl 指令會在 Pod 上啟動殼層。

  5. 如要確認 EFS 資源是否已掛接,請使用 tail 指令檢查 out.txt 檔案的內容。

    tail /efs-data/out.txt
    

    輸出內容會顯示最近的時間 (以世界標準時間為準)。

  6. 使用 exit 指令與 Pod 中斷連線。

      exit
    

    殼層會返回本機電腦。

清除所用資源

如要移除 StatefulSet,請使用 kubectl delete

  kubectl delete -f efs-statefulset.yaml

後續步驟