5.5. GCP PD CSI Driver Operator
5.5.1. 概述 复制链接链接已复制到粘贴板!
OpenShift Dedicated 可以使用 Google Cloud Platform(GCP)持久性存储的 Container Storage Interface(CSI)驱动程序来置备持久性卷(PV)。
在使用 Container Storage Interface (CSI) Operator 和驱动时,我们建议用户需要熟悉持久性存储和配置 CSI 卷。
要创建挂载到 GCP PD 存储资产中的 CSI 置备持久性卷(PV),OpenShift Dedicated 在 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 磁盘。
5.5.2. 用于裸机和 N4 机器集的 C3 实例类型 复制链接链接已复制到粘贴板!
5.5.2.1. C3 和 N4 实例类型限制 复制链接链接已复制到粘贴板!
对裸机和 N4 机器集的 C3 实例类型的 GCP PD CSI 驱动程序支持有以下限制:
- 在创建超磁盘平衡磁盘时,您必须将卷大小设置为至少 4Gi。OpenShift Dedicated 不舍入最小大小,因此您必须自己指定正确的大小。
- 使用存储池时不支持克隆卷。
- 对于克隆或重新定义大小,超磁盘平衡的磁盘大小必须是 6Gi 或更高。
默认存储类是 standard-csi。
重要您需要手动创建存储类。
有关创建存储类的详情,请参考设置超线程磁盘一节中的第 2 步。
5.5.2.2. 用于 hyperdisk-balanced 磁盘的存储池概述 复制链接链接已复制到粘贴板!
Hyperdisk 存储池可用于计算引擎进行大规模存储。超磁盘存储池是购买的容量、吞吐量和 IOPS 集合,您可以根据需要为应用程序进行配置。您可以使用超磁盘存储池来创建和管理池中的磁盘,并使用多个工作负载的磁盘。通过以聚合的形式管理磁盘,您可以在实现预期容量和性能增长的同时降低成本。通过仅使用超磁盘存储池中所需的存储,您可以降低预测容量的复杂性,并通过管理数百个磁盘来管理单个存储池来减少管理。
要设置存储池,请参阅设置超磁盘平衡的磁盘。
5.5.2.3. 设置超磁盘平衡磁盘 复制链接链接已复制到粘贴板!
先决条件
- 使用管理特权访问集群
流程
完成以下步骤以设置超磁盘平衡的磁盘:
- 使用 Hyperdisk-balanced 磁盘在 Google Cloud Platform (GCP)上创建 OpenShift Dedicated 集群。这可以通过使用支持 hyperdisk-balanced 磁盘(如 Google Cloud Platform (GCP)的 C3 和 N4 机器集)的计算节点类型置备集群来实现。
OSD 集群就绪后,导航到 OpenShift 控制台 以进行存储类创建。在控制台中,导航到 Storage 部分,以创建指定 hyperdisk-balanced 磁盘的存储类:
StorageClass YAML 文件示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果使用存储池,您必须首先在 Google Cloud 控制台中创建类型为 "Hyperdisk Balanced" 的 Hyperdisk 存储池,然后再在 OpenShift Storage Class 引用它。必须在与支持 Hyperdisk 的计算节点相同的区域中创建 Hyperdisk 存储池。有关创建 Hyperdisk 存储池的更多信息,请参阅 Google Cloud 文档中的 创建 Hyperdisk 存储池。
使用以下 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
5.5.3. 关于 CSI 复制链接链接已复制到粘贴板!
在过去,存储厂商一般会把存储驱动作为 Kubernetes 的一个部分提供。随着容器存储接口 (CSI) 的实现,第三方供应商可以使用标准接口来提供存储插件,而无需更改核心 Kubernetes 代码。
CSI Operators 为 OpenShift Dedicated 用户提供了存储选项,如卷快照,它无法通过 in-tree 卷插件实现。
5.5.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 Dedicated 支持的所有 GCP PD CSI 存储类参数。
参数 | 值 | 默认 | 描述 |
---|---|---|---|
|
|
| 允许您选择标准的 PV 或使用固态硬盘的 PV。 驱动程序不会验证值,因此接受所有可能的值。 |
|
|
| 允许您在 zonal 或区域 PV 之间进行选择。 |
| 用于加密新磁盘的密钥的完全限定资源标识符。 | 空字符串 | 使用客户管理的加密密钥(CMEK)加密新磁盘。 |
5.5.5. 创建自定义加密的持久性卷 复制链接链接已复制到粘贴板!
创建 PersistentVolumeClaim
对象时,OpenShift Dedicated 会置备一个新的持久性卷(PV)并创建一个 PersistentVolume
对象。您可以通过加密新创建的 PV,在 Google Cloud Platform(GCP)中添加自定义加密密钥来保护集群中的 PV。
要加密,您新创建的 PV 使用新的或现有的 Google Cloud Key Management Service(KMS)密钥在集群中使用用户管理的加密密钥(CMEK)。
先决条件
- 已登陆到一个正在运行的 OpenShift Dedicated 集群。
- 您已创建了 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 Dedicated 集群上部署存储类: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 Dedicated 集群一起使用。