6.13. GCP PD CSI Driver Operator
6.13.1. 概述 复制链接链接已复制到粘贴板!
OpenShift Container Platform 可以使用 Google Cloud Platform(GCP)持久性存储的 Container Storage Interface(CSI)驱动程序来置备持久性卷(PV)。
在使用 Container Storage Interface (CSI) Operator 和驱动时,我们建议用户需要熟悉持久性存储和配置 CSI 卷。
要创建挂载到 GCP PD 存储资产中的 CSI 置备持久性卷(PV),OpenShift Container Platform 在 openshift-cluster-csi-drivers
命名空间中默认安装 GCP PD CSI Driver Operator 和 GCP PD CSI 驱动程序。
- GCP PD CSI Driver Operator:默认情况下,Operator 提供了一个可用来创建 PVC 的存储类。如果需要,您可以禁用此默认存储类 (请参阅管理默认存储类)。您还可以选择创建 GCP PD 存储类,如使用 GCE Persistent Disk 的 Persistent Storage 所述。
GCP PD 驱动程序:该驱动程序可让您创建并挂载 GCP PD PV。
GCP PD CSI 驱动程序支持裸机和 N4 机器集的 C3 实例类型。C3 实例类型和 N4 机器集支持 hyperdisk-balanced 磁盘。
OpenShift Container Platform 为 GCE Persistent Disk in-tree 卷插件提供自动迁移到对应的 CSI 驱动程序。如需更多信息,请参阅 CSI 自动迁移。
6.13.2. 用于裸机和 N4 机器集的 C3 实例类型 复制链接链接已复制到粘贴板!
6.13.2.1. C3 和 N4 实例类型限制 复制链接链接已复制到粘贴板!
对裸机和 N4 机器集的 C3 实例类型的 GCP PD CSI 驱动程序支持有以下限制:
- 在创建超磁盘平衡磁盘时,您必须将卷大小设置为至少 4Gi。OpenShift Container Platform 不舍入最小大小,因此您必须自己指定正确的大小。
- 使用存储池时不支持克隆卷。
- 对于克隆或重新定义大小,超磁盘平衡的磁盘大小必须是 6Gi 或更高。
默认存储类是 standard-csi。
重要您需要手动创建存储类。
有关创建存储类的详情,请参考设置超线程磁盘一节中的第 2 步。
- 不支持使用不同存储类型(如 N2 和 N4)的混合虚拟机(VM)的集群。这是因为 hyperdisks-balanced 磁盘在大多数旧虚拟机上不可用。同样,常规持久磁盘在 N4/C3 虚拟机上不可用。
- 具有 c3-standard-2、c3-standard-4、n4-standard-2 和 n4-standard-4 节点的 GCP 集群可能会错误地超过最大可附加磁盘号码,其应为 16 (JIRA 链接)。
- 其他限制.
6.13.2.2. 用于 hyperdisk-balanced 磁盘的存储池概述 复制链接链接已复制到粘贴板!
Hyperdisk 存储池可用于计算引擎进行大规模存储。超磁盘存储池是购买的容量、吞吐量和 IOPS 集合,您可以根据需要为应用程序进行配置。您可以使用超磁盘存储池来创建和管理池中的磁盘,并使用多个工作负载的磁盘。通过以聚合的形式管理磁盘,您可以在实现预期容量和性能增长的同时降低成本。通过仅使用超磁盘存储池中所需的存储,您可以降低预测容量的复杂性,并通过管理数百个磁盘来管理单个存储池来减少管理。
要设置存储池,请参阅设置超磁盘平衡的磁盘。
6.13.2.3. 设置超磁盘平衡磁盘 复制链接链接已复制到粘贴板!
先决条件
- 使用管理特权访问集群
流程
完成以下步骤以设置超磁盘平衡的磁盘:
- 使用通过 hyperdisk-balanced 磁盘置备的附加磁盘创建 GCP 集群。
在安装过程中创建指定超磁盘平衡磁盘的存储类:
按照使用自定义在 GCP 上安装集群中的步骤操作。
对于 install-config.yaml 文件,请使用以下示例文件:
install-config YAML 文件示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意集群中的所有节点都必须支持 hyperdisk-balanced 卷。不支持使用混合节点的集群,如使用 hyperdisk-balanced 磁盘的 N2 和 N3。
在 合并 Cloud Credential Operator 工具清单 部分的第 3 步后,将以下清单复制到安装程序创建的 manifests 目录中:
- cluster_csi_driver.yaml - 指定不使用默认存储类创建
StorageClass.yaml - 创建一个特定于磁盘的存储类
集群 CSI 驱动程序 YAML 文件示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定禁用创建默认 OpenShift Container Platform 存储类。
存储类 YAML 文件示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定存储类的名称。在本例中,它是
hyperdisk-sc
。 - 2
pd.csi.storage.gke.io
指定 GCP CSI 置备程序。- 3
- 使用 hyperdisk-balanced 磁盘指定。
- 4
- 使用 "Mi" qualifier 指定 MiBps 中的吞吐量值。例如,如果您的所需的吞吐量为 250 MiBps,请指定 "250Mi"。如果没有指定值,则容量基于磁盘类型默认值。
- 5
- 指定没有限定符的 IOPS 值。例如,如果您需要 7,000 IOPS,请指定 "7000"。如果没有指定值,则容量基于磁盘类型默认值。
- 6
- 如果使用存储池,请指定您要使用的特定存储池的列表: projects/PROJECT_ID/zones/ZONE/storagePools/STORAGE_POOL_NAME。
- 7
- 如果使用存储池,请设置
allowedTopologies
,将置备卷的拓扑限制为存储池所在的位置。在本例中,us-east4-c
。
使用以下 YAML 文件示例,创建一个使用 hyperdisk 特定存储类的持久性卷声明(PVC):
PVC YAML 文件示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建使用您刚才创建的 PVC 的部署。使用部署有助于确保应用程序可以访问持久性存储,即使 pod 重启和重新调度:
- 在创建部署前,请确保具有指定机器集的节点池已启动并在运行。否则,pod 无法调度。
使用以下示例 YAML 文件创建部署:
部署 YAML 文件示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令确认部署是否已成功创建:
oc get deployment
$ oc get deployment
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY UP-TO-DATE AVAILABLE AGE postgres 0/1 1 0 42s
NAME READY UP-TO-DATE AVAILABLE AGE postgres 0/1 1 0 42s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可能需要过几分钟后,超磁盘实例才会完成调配,并显示 READY 状态。
运行以下命令确认 PVC
my-pvc
已成功绑定到持久性卷(PV):oc get pvc my-pvc
$ oc get pvc my-pvc
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE my-pvc Bound pvc-1ff52479-4c81-4481-aa1d-b21c8f8860c6 2Ti RWO hyperdisk-sc <unset> 2m24s
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE my-pvc Bound pvc-1ff52479-4c81-4481-aa1d-b21c8f8860c6 2Ti RWO hyperdisk-sc <unset> 2m24s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 确认 hyperdisk-balanced 磁盘的预期配置:
gcloud compute disks list
$ gcloud compute disks list
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME LOCATION LOCATION_SCOPE SIZE_GB TYPE STATUS instance-20240914-173145-boot us-central1-a zone 150 pd-standard READY instance-20240914-173145-data-workspace us-central1-a zone 100 pd-balanced READY c4a-rhel-vm us-central1-a zone 50 hyperdisk-balanced READY
NAME LOCATION LOCATION_SCOPE SIZE_GB TYPE STATUS instance-20240914-173145-boot us-central1-a zone 150 pd-standard READY instance-20240914-173145-data-workspace us-central1-a zone 100 pd-balanced READY c4a-rhel-vm us-central1-a zone 50 hyperdisk-balanced READY
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Hyperdisk-balanced 磁盘。
如果使用存储池,请运行以下命令检查卷是否在存储类和 PVC 中指定:
gcloud compute storage-pools list-disks pool-us-east4-c --zone=us-east4-c
$ gcloud compute storage-pools list-disks pool-us-east4-c --zone=us-east4-c
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME STATUS PROVISIONED_IOPS PROVISIONED_THROUGHPUT SIZE_GB pvc-1ff52479-4c81-4481-aa1d-b21c8f8860c6 READY 3000 140 2048
NAME STATUS PROVISIONED_IOPS PROVISIONED_THROUGHPUT SIZE_GB pvc-1ff52479-4c81-4481-aa1d-b21c8f8860c6 READY 3000 140 2048
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.13.3. 关于 CSI 复制链接链接已复制到粘贴板!
在过去,存储厂商一般会把存储驱动作为 Kubernetes 的一个部分提供。随着容器存储接口 (CSI) 的实现,第三方供应商可以使用标准接口来提供存储插件,而无需更改核心 Kubernetes 代码。
CSI Operators 为 OpenShift Container Platform 用户提供了存储选项,如卷快照,它无法通过 in-tree 卷插件实现。
6.13.4. GCP PD CSI 驱动程序存储类参数 复制链接链接已复制到粘贴板!
Google Cloud Platform(GCP)持久磁盘(PD)Container Storage Interface(CSI)驱动程序使用 CSI external-provisioner
sidecar 作为控制器。这是和 CSI 驱动程序一起部署的单独的 helper 容器。sidecar 通过触发 CreateVolume
操作来管理持久性卷(PV)。
GCP PD CSI 驱动程序使用 csi.storage.k8s.io/fstype
参数键来支持动态置备。下表描述了 OpenShift Container Platform 支持的所有 GCP PD CSI 存储类参数。
参数 | 值 | 默认 | 描述 |
---|---|---|---|
|
|
| 允许您选择标准的 PV 或使用固态硬盘的 PV。 驱动程序不会验证值,因此接受所有可能的值。 |
|
|
| 允许您在 zonal 或区域 PV 之间进行选择。 |
| 用于加密新磁盘的密钥的完全限定资源标识符。 | 空字符串 | 使用客户管理的加密密钥(CMEK)加密新磁盘。 |
6.13.5. 创建自定义加密的持久性卷 复制链接链接已复制到粘贴板!
创建 PersistentVolumeClaim
对象时,OpenShift Container Platform 会置备一个新的持久性卷(PV)并创建一个 PersistentVolume
对象。您可以通过加密新创建的 PV,在 Google Cloud Platform(GCP)中添加自定义加密密钥来保护集群中的 PV。
要加密,您新创建的 PV 使用新的或现有的 Google Cloud Key Management Service(KMS)密钥在集群中使用用户管理的加密密钥(CMEK)。
先决条件
- 登陆到一个正在运行的 OpenShift Container Platform 集群。
- 您已创建了 Cloud KMS 密钥环以及密钥版本。
有关 CMEK 和 Cloud KMS 资源的更多信息,请参阅使用客户管理的加密密钥(CMEK)。
流程
要创建自定义加密 PV,请完成以下步骤:
使用 Cloud KMS 密钥创建存储类。以下示例启用加密卷的动态置备:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 此字段必须是用于加密新磁盘的密钥的资源标识符。值是区分大小写的。有关提供关键 ID 值的更多信息,请参阅检索资源 ID 和 获取 Cloud KMS 资源 ID。
注意您不能将
disk-encryption-kms-key
参数添加到现有的存储类中。但是,您可以删除存储类并使用相同的名称和不同的参数集合重新创建该存储类。如果您这样做,现有类的置备程序必须是pd.csi.storage.gke.io
。使用
oc
命令在 OpenShift Container Platform 集群上部署存储类:oc describe storageclass csi-gce-pd-cmek
$ oc describe storageclass csi-gce-pd-cmek
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建名为
pvc.yaml
的文件,该文件与您在上一步中创建的存储类对象的名称匹配:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果将新存储类标记为默认值,可以省略
storageClassName
字段。在集群中应用 PVC:
oc apply -f pvc.yaml
$ oc apply -f pvc.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 获取 PVC 的状态,并验证它是否已创建并绑定到新置备的 PV:
oc get pvc
$ oc get pvc
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE podpvc Bound pvc-e36abf50-84f3-11e8-8538-42010a800002 10Gi RWO csi-gce-pd-cmek 9s
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE podpvc Bound pvc-e36abf50-84f3-11e8-8538-42010a800002 10Gi RWO csi-gce-pd-cmek 9s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果您的存储类将
volumeBindingMode
字段设置为WaitForFirstConsumer
,您必须创建一个 pod 来使用 PVC,然后才能验证它。
您的 CMEK 保护 PV 现在可以与 OpenShift Container Platform 集群一起使用。
6.13.6. 用户管理的加密 复制链接链接已复制到粘贴板!
用户管理的加密功能允许您在安装过程中提供加密 OpenShift Container Platform 节点根卷的密钥,并允许所有受管存储类使用这些密钥加密置备的存储卷。您必须在 install-config YAML 文件中的 platform.<cloud_type>.defaultMachinePlatform
字段中指定自定义密钥。
此功能支持以下存储类型:
- Amazon Web Services (AWS) Elastic Block storage (EBS)
- Microsoft Azure Disk 存储
- Google Cloud Platform (GCP) 持久磁盘 (PD) 存储
- IBM Virtual Private Cloud (VPC) Block 存储
有关使用用户管理的 GCP PD 加密安装的详情,请参考安装配置参数。