概览
如果您有一个 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
将 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-controlplane
AWS IAM 配置文件作为密钥用户添加到用于加密 EBS 卷的 AWS KMS 密钥中。
后续步骤
- 将其他存储驱动程序与 GKE on AWS 搭配使用。