×

概述

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

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

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

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

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

OpenShift Container Platform 为 GCE 持久磁盘树内卷插件提供自动迁移到其等效的 CSI 驱动程序。有关更多信息,请参阅CSI 自动迁移

关于 CSI

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

CSI 运算符为 OpenShift Container Platform 用户提供了树内卷插件无法提供的存储选项,例如卷快照。

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

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

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

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

类型

pd-ssdpd-standardpd-balanced

pd-standard

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

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

复制类型

noneregional-pd

none

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

磁盘加密 KMS 密钥

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

空字符串

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

创建自定义加密的持久卷

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

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

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

  • 您已创建 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 Container Platform 集群上部署存储类。

    $ 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 Container Platform 集群一起使用了。

用户管理的加密

用户管理的加密功能允许您在安装期间提供用于加密 OpenShift Container Platform 节点根卷的密钥,并使所有受管理的存储类能够使用这些密钥来加密预配的存储卷。您必须在 install-config YAML 文件中的platform.<cloud_type>.defaultMachinePlatform字段中指定自定义密钥。

此功能支持以下存储类型:

  • Amazon Web Services (AWS) Elastic Block Storage (EBS)

  • Microsoft Azure 磁盘存储

  • Google Cloud Platform (GCP) 持久性磁盘 (PD) 存储

  • IBM Virtual Private Cloud (VPC) 块存储

有关使用用户管理的加密安装 GCP PD 的信息,请参阅 安装配置参数