匯入現有的 EBS 磁碟區

總覽

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

本頁面說明如何使用已填入資料的現有 EBS 磁碟區建立 PV,以及如何在 Pod 中使用 PV。

事前準備

  • anthos-aws 目錄中,使用 anthos-gke 將環境切換至使用者叢集。
    cd anthos-aws
    env HTTPS_PROXY=http://localhost:8118 \
      anthos-gke aws clusters get-credentials CLUSTER_NAME
    CLUSTER_NAME 替換為使用者叢集名稱。

為現有的 EBS 磁碟區建立 PersistentVolume

您可以指定新的 PV,匯入現有的 EBS 磁碟區。

  1. 將下列 YAML 複製到名為 existing-volume.yaml 的檔案,然後替換值來完成設定:

    • volume-capacity:磁碟區大小。例如:30Gi。如要進一步瞭解如何在 Kubernetes 中指定磁碟區容量,請參閱「記憶體的意義」。
    • storage-class-name:用於佈建磁碟區的 StorageClass 名稱。舉例來說,您可以使用預設的 standard-rwo

    • ebs-id:EBS 磁碟區 ID。 例如:vol-05786ec9ec9526b67

    • fs-type:磁碟區的檔案系統。例如:ext4

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

    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
    
  2. 將 YAML 套用至叢集

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

    kubectl describe pv volume-name
    

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

透過 PersistentVolumeClaim 和 Pod 使用磁碟區

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

下列 YAML 會建立 PVC,並將其附加至執行 Nginx 網路伺服器的 Pod。將其複製到名為 nginx.yaml 的檔案,然後取代值來完成設定:

  • storage-class:您先前建立的 PersistentVolume 中的 StorageClass 名稱。例如:standard-rwo
  • volume-name:先前建立的磁碟區名稱。
  • volume-capacity:磁碟區大小。例如:30Gi
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: my-pvc
  1. 將 YAML 套用至叢集

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

    kubectl describe pod web-server
    

使用加密的 EBS 磁碟區

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

如要取得 AWS IAM 角色名稱,請按照下列步驟操作:

  1. 切換至 GKE on AWS 設定所在的目錄。 您在安裝管理服務時建立了這個目錄。

    cd anthos-aws

  2. 選擇您是否使用 anthos-gke 工具建立 GKE on AWS 環境,或是手動建立 AWS IAM 設定檔。

    anthos-gke 工具

    使用 terraform output 指令,搜尋 iamInstanceProfile 的值。

    terraform output | grep iamInstanceProfile
    

    如果您使用 anthos- gke 工具建立 GKE on AWS 環境,輸出內容會如下所示:

      iamInstanceProfile: gke-CLUSTER_ID-controlplane
      iamInstanceProfile: gke-CLUSTER_ID-nodepool
    

    其中 CLUSTER_ID 是叢集 ID。複製 gke-CLUSTER_ID-controlplane 的值,以供下個步驟使用。

    手動建立

    使用下列指令檢查 terraform output 的輸出內容:

    terraform output | less
    

    捲動輸出內容,在 AWSCluster 定義後找到 iamInstanceProfile。

    kind: AWSCluster
    metadata:
      name: cluster-0
    spec:
      ...
      controlPlane:
       ...
        iamInstanceProfile: INSTANCE_PROFILE_NAME
    

    複製 INSTANCE_PROFILE_NAME 的值,以供下一個步驟使用。

  3. 如要授予控制平面 EBS 磁碟區的存取權,請將 gke-xxxxxx-controlplane AWS IAM 設定檔新增為 AWS KMS 金鑰的主要使用者,該金鑰用於加密 EBS 磁碟區。

後續步驟