×

概述

OpenShift Dedicated 可以使用 Google Cloud Platform (GCP) 持久磁盘 (PD) 存储的容器存储接口 (CSI) 驱动程序来配置持久卷 (PV)。

建议在使用容器存储接口 (CSI) 运算符和驱动程序时,熟悉持久性存储配置 CSI 卷

为了创建挂载到 GCP PD 存储资源的 CSI 配置的持久卷 (PV),OpenShift Dedicated 默认在openshift-cluster-csi-drivers命名空间中安装 GCP PD CSI 驱动程序运算符和 GCP PD CSI 驱动程序。

  • GCP PD CSI 驱动程序运算符:默认情况下,该运算符提供一个存储类,您可以使用它来创建 PVC。如果需要,您可以禁用此默认存储类(请参阅管理默认存储类)。您还可以选择创建 GCP PD 存储类,如使用 GCE 持久磁盘的持久性存储中所述。

  • GCP PD 驱动程序:该驱动程序使您可以创建和挂载 GCP PD PV。

关于 CSI

存储供应商传统上将存储驱动程序作为 Kubernetes 的一部分提供。随着容器存储接口 (CSI) 的实现,第三方提供商可以使用标准接口交付存储插件,而无需更改核心 Kubernetes 代码。

CSI 运算符为 OpenShift Dedicated 用户提供了诸如卷快照之类的存储选项,而这些选项在树内卷插件中是不可能的。

GCP PD CSI 驱动程序存储类参数

Google Cloud Platform (GCP) 持久磁盘 (PD) 容器存储接口 (CSI) 驱动程序使用 CSI external-provisioner sidecar 作为控制器。这是一个单独的辅助容器,与 CSI 驱动程序一起部署。sidecar 通过触发CreateVolume操作来管理持久卷 (PV)。

GCP PD CSI 驱动程序使用csi.storage.k8s.io/fstype参数键来支持动态配置。下表描述了 OpenShift Dedicated 支持的所有 GCP PD CSI 存储类参数。

表 1. CreateVolume 参数
参数 默认值 描述

type

pd-ssdpd-standardpd-balanced

pd-standard

允许您在标准 PV 或固态驱动器 PV 之间进行选择。

驱动程序不验证值,因此接受所有可能的值。

replication-type

noneregional-pd

none

允许您在区域性 PV 或跨区域 PV 之间进行选择。

disk-encryption-kms-key

用于加密新磁盘的密钥的完全限定资源标识符。

空字符串

使用客户管理的加密密钥 (CMEK) 加密新磁盘。

创建自定义加密持久卷

创建PersistentVolumeClaim对象时,OpenShift Dedicated 会配置新的持久卷 (PV) 并创建一个PersistentVolume对象。您可以通过加密新创建的 PV,在 Google Cloud Platform (GCP) 中添加自定义加密密钥来保护集群中的 PV。

对于加密,您创建的新附加 PV 使用集群上的客户管理的加密密钥 (CMEK),使用新的或现有的 Google Cloud Key Management Service (KMS) 密钥。

先决条件
  • 您已登录到正在运行的 OpenShift Dedicated 集群。

  • 您已创建 Cloud KMS 密钥环和密钥版本。

有关 CMEK 和 Cloud KMS 资源的更多信息,请参阅使用客户管理的加密密钥 (CMEK)

步骤

要创建自定义加密的 PV,请完成以下步骤

  1. 使用 Cloud KMS 密钥创建存储类。以下示例启用了加密卷的动态配置

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: csi-gce-pd-cmek
    provisioner: pd.csi.storage.gke.io
    volumeBindingMode: "WaitForFirstConsumer"
    allowVolumeExpansion: true
    parameters:
      type: pd-standard
      disk-encryption-kms-key: projects/<key-project-id>/locations/<location>/keyRings/<key-ring>/cryptoKeys/<key> (1)
    1 此字段必须是用于加密新磁盘的密钥的资源标识符。值区分大小写。有关提供密钥 ID 值的更多信息,请参阅检索资源 ID获取 Cloud KMS 资源 ID

    您无法将disk-encryption-kms-key参数添加到现有存储类。但是,您可以删除存储类并使用相同的名称和不同的参数集重新创建它。如果您这样做,现有类的提供程序必须是pd.csi.storage.gke.io

  2. 使用oc命令在您的 OpenShift Dedicated 集群上部署存储类。

    $ oc describe storageclass csi-gce-pd-cmek
    示例输出
    Name:                  csi-gce-pd-cmek
    IsDefaultClass:        No
    Annotations:           None
    Provisioner:           pd.csi.storage.gke.io
    Parameters:            disk-encryption-kms-key=projects/key-project-id/locations/location/keyRings/ring-name/cryptoKeys/key-name,type=pd-standard
    AllowVolumeExpansion:  true
    MountOptions:          none
    ReclaimPolicy:         Delete
    VolumeBindingMode:     WaitForFirstConsumer
    Events:                none
  3. 创建一个名为pvc.yaml的文件,该文件名与您在上一步中创建的存储类对象名称匹配。

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: podpvc
    spec:
      accessModes:
        - ReadWriteOnce
      storageClassName: csi-gce-pd-cmek
      resources:
        requests:
          storage: 6Gi

    如果您将新的存储类标记为默认存储类,则可以省略storageClassName字段。

  4. 在您的集群上应用 PVC。

    $ oc apply -f pvc.yaml
  5. 获取 PVC 的状态,并验证它是否已创建并绑定到新配置的 PV。

    $ oc get pvc
    示例输出
    NAME      STATUS    VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS     AGE
    podpvc    Bound     pvc-e36abf50-84f3-11e8-8538-42010a800002   10Gi       RWO            csi-gce-pd-cmek  9s

    如果您的存储类将volumeBindingMode字段设置为WaitForFirstConsumer,则必须创建一个 Pod 来使用 PVC,然后才能验证它。

您的 CMEK 保护的 PV 现在可以与您的 OpenShift Dedicated 集群一起使用了。