匯入現有的 EBS 磁碟區

總覽

如果您已有要匯入 GKE on AWS 的 AWS Elastic Block Store (EBS) 磁碟區,可以建立 PersistentVolume (PV) 物件,並為特定 PersistentVolumeClaim (PVC) 保留該物件。

本頁面說明如何使用已填入資料的現有 EBS 磁碟區建立 PV,以及如何在 Pod 中使用 PV。本頁內容適用於想要設定及管理儲存空間的作業人員和儲存空間專家。如要進一步瞭解我們在 Google Cloud 內容中提及的常見角色和範例工作,請參閱「常見的 GKE 使用者角色和工作」。

事前準備

完成這些步驟前,請務必先完成下列事項:

使用加密的 EBS 磁碟區

如果 EBS 磁碟區是透過 AWS Key Management Service (KMS) 加密,您需要授予 GKE on AWS 控制層 AWS IAM 角色 KMS 金鑰的存取權。

如要授予控制層角色金鑰存取權,請按照下列步驟操作:

  1. 找出叢集控制層角色的名稱。

  2. 選擇用於加密 EBS 磁碟區的 AWS KMS 金鑰,然後按照「允許金鑰使用者使用 KMS 金鑰」一文中的操作說明,將控制平面角色新增為金鑰使用者。

為現有的 EBS 磁碟區建立 PersistentVolume

您可以指定新的 PV,並將其新增至叢集,藉此匯入現有的 EBS 磁碟區。

  1. 將下列 YAML 複製到名為 existing-volume.yaml 的檔案中:

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: VOLUME_NAME
      annotations:
        pv.kubernetes.io/provisioned-by: ebs.csi.aws.com
    spec:
      capacity:
        storage: VOLUME_CAPACITY
      accessModes:
        - ReadWriteOnce
      persistentVolumeReclaimPolicy: Retain
      storageClassName: STORAGE_CLASS_NAME
      claimRef:
        name: my-pvc
        namespace: default
      csi:
        driver: ebs.csi.aws.com
        volumeHandle: EBS_VOLUME_ID
        fsType: FILE_SYSTEM_TYPE
      nodeAffinity:
        required:
          nodeSelectorTerms:
          - matchExpressions:
            - key: topology.ebs.csi.aws.com/zone
              operator: In
              values:
              - ZONE
    
    Replace the following:
    
    • VOLUME_NAME:磁碟區的名稱。
    • VOLUME_CAPACITY:磁碟區大小,例如 30G。如要進一步瞭解如何在 Kubernetes 中指定磁碟區容量,請參閱「記憶體的意義」。
    • STORAGE_CLASS_NAME:提供磁碟區的 StorageClass 名稱,例如 standard-rwo

    • EBS_VOLUME_ID:您的 EBS 磁碟區 ID。例如:vol-05786ec9ec9526b67

    • FS_TYPE:磁碟區的檔案系統,例如 ext4

    • ZONE:代管 EBS 磁碟區的 AWS 可用區,例如 us-east-1c

  2. 將 YAML 套用至叢集

    kubectl apply -f existing-volume.yaml
    
  3. 確認建立 PV

    kubectl describe pv volume-name
    

    這項指令的輸出內容會包含 PV 的狀態。

透過 PersistentVolumeClaim 和 Pod 使用磁碟區

匯入磁碟區後,您可以建立 PVC 和 Pod,並附加 PVC。

  1. 下列 YAML 會建立 PVC,並將其附加至執行 Nginx 網路伺服器的 Pod。將其複製到名為 nginx.yaml 的檔案:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: my-pvc
    spec:
      storageClassName: STORAGE_CLASS_NAME
      volumeName: VOLUME_NAME
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: VOLUME_CAPACITY
    ---
    
    apiVersion: v1
    kind: Pod
    metadata:
      name: web-server
    spec:
      containers:
       - name: web-server
         image: nginx
         volumeMounts:
           - mountPath: /var/lib/www/html
             name: data
      volumes:
       - name: data
         persistentVolumeClaim:
           claimName: PVC_NAME
    

    更改下列內容:

    • STORAGE_CLASS:先前建立的 PersistentVolume 中的 StorageClass 名稱,例如 standard-rwo
    • VOLUME_NAME
    • VOLUME_CAPACITY
    • PVC_NAME:PVC 名稱,例如 my-pvc
  2. 將 YAML 套用至叢集

    kubectl apply -f nginx.yaml
    
  3. 使用 kubectl describe 檢查 Nginx 執行個體的狀態。輸出內容應為 STATUSRunning

    kubectl describe pod web-server
    

後續步驟