概览
如果您有一个 AWS Elastic Block Store (EBS) 卷要导入到 GKE on AWS,则可以创建 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 
为预先存在的 EBS 卷创建 PersistentVolume
您可以指定新的 PV 来导入现有的 EBS 卷。
- 将以下 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
- volume-capacity:卷的大小。例如 
- 将 YAML 应用到您的集群 - kubectl apply -f existing-volume.yaml
- 确认已创建 PV - kubectl describe pv volume-name- 此命令的输出内容中包含 PV 的状态。 
将卷与 PersistentVolumeClaim 和 pod 一起使用
导入卷后,您可以创建一个 PVC 和一个挂接该 PVC 的 pod。
下面的 YAML 会创建一个 PVC 并将其挂接到运行 Nginx Web 服务器的 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
- 将 YAML 应用到您的集群 - kubectl apply -f nginx.yaml
- 使用 - kubectl describe检查 Nginx 实例的状态。输出的- STATUS应为- Running。- kubectl describe pod web-server
使用加密的 EBS 卷
如果您的 EBS 卷是使用 AWS Key Management Service (KMS) 加密的,则需要授予 GKE on AWS 控制平面 AWS IAM 角色对 KMS 密钥的访问权限。
如需获取 AWS IAM 角色名称,请执行以下步骤:
- 切换到您的 GKE on AWS 配置所在的目录。 您在安装管理服务时创建了此目录。 - cd anthos-aws 
- 选择您是使用 - 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的值以供以下步骤使用。
- 如需授予控制平面访问 EBS 卷的权限,请将 - gke-xxxxxx-controlplaneAWS IAM 配置文件作为密钥用户添加到用于加密 EBS 卷的 AWS KMS 密钥中。
后续步骤
- 将其他存储驱动程序与 GKE on AWS 搭配使用。