导入现有的 EBS 卷

概览

如果您已有 AWS Elastic Block Store (EBS)

卷要导入到 GKE on AWS 中,则可以创建 PersistentVolume (PV) 对象并将其预留用于特定的 PersistentVolumeClaim (PVC)。

本页面介绍如何使用填充了数据的现有 EBS 卷来创建 PV,以及如何在 pod 中使用 PV。

准备工作

在完成以下步骤之前,您必须:

使用加密的 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 和一个挂接该 PVC 的 pod。

  1. 下面的 YAML 会创建一个 PVC 并将其挂接到运行 Nginx Web 服务器的 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 实例的状态。输出的 STATUS 应为 Running

    kubectl describe pod web-server
    

后续步骤