4.4. 使用 Cinder 的持久性存储


OpenShift Container Platform 支持 OpenStack Cinder。我们假设您对 Kubernetes 和 OpenStack 有一定的了解。

Cinder 卷可以动态置备。持久性卷不与某个特定项目或命名空间相关联,它们可以在 OpenShift Container Platform 集群间共享。持久性卷声明是针对某个项目或者命名空间的,相应的用户可请求它。

重要

OpenShift Container Platform 默认使用 in-tree(非 CSI)插件来置备 Cinder 存储。

在以后的 OpenShift Container Platform 版本中,计划使用现有树内插件置备的卷迁移到对应的 CSI 驱动程序。CSI 自动迁移应该可以无缝进行。迁移不会改变您使用所有现有 API 对象的方式,如持久性卷、持久性卷声明和存储类。有关迁移的更多信息,请参阅 CSI 自动迁移

完全迁移后,未来的 OpenShift Container Platform 版本将最终删除树内插件。

其他资源

  • 如需了解有关 OpenStack Block Storage 如何为虚拟硬盘提供持久块存储管理的信息,请参阅 OpenStack Cinder

4.4.1. 使用 Cinder 手动置备

当存储可以被挂载为 OpenShift Container Platform 中的卷之前,它必须已存在于底层的存储系统中。

先决条件

  • 为 Red Hat OpenStack Platform(RHOSP)配置 OpenShift Container Platform
  • Cinder 卷 ID

4.4.1.1. 创建持久性卷

您必须在对象定义中定义持久性卷 (PV) ,然后才能在 OpenShift Container Platform 中创建它:

流程

  1. 将对象定义保存到文件中。

    cinder-persistentvolume.yaml

    apiVersion: "v1"
    kind: "PersistentVolume"
    metadata:
      name: "pv0001" 1
    spec:
      capacity:
        storage: "5Gi" 2
      accessModes:
        - "ReadWriteOnce"
      cinder: 3
        fsType: "ext3" 4
        volumeID: "f37a03aa-6212-4c62-a805-9ce139fab180" 5

    1
    持久性卷声明或 Pod 使用的卷名称。
    2
    为这个卷分配的存储量。
    3
    为 Red Hat OpenStack Platform(RHOSP)Cinder 卷指定 cinder
    4
    当这个卷被第一次挂载时,文件系统会被创建。
    5
    要使用的 Cinder 卷。
    重要

    在卷被格式化并置备后,不要更改 fstype 参数的值。更改此值可能会导致数据丢失和 pod 失败。

  2. 创建在上一步中保存的对象定义文件。

    $ oc create -f cinder-persistentvolume.yaml

4.4.1.2. 持久性卷格式化

因为 OpenShift Container Platform 在首次使用卷前会进行格式化,所以可以使用未格式化的 Cinder 卷作为 PV。

在 OpenShift Container Platform 挂载卷并将其传递给容器之前,它会检查在 PV 定义中是否包含由 fsType 参数指定的文件系统。如果没有使用文件系统格式化该设备,该设备中的所有数据都会被删除,并使用指定的文件系统自动格式化该设备。

4.4.1.3. Cinder 卷安全

如果在应用程序中使用 Cinder PV,请在其部署配置中配置安全性。

先决条件

  • 必须创建一个使用适当 fsGroup 策略的 SCC。

流程

  1. 创建一个服务帐户并将其添加到 SCC:

    $ oc create serviceaccount <service_account>
    $ oc adm policy add-scc-to-user <new_scc> -z <service_account> -n <project>
  2. 在应用程序的部署配置中,提供服务帐户名称和 securityContext

    apiVersion: v1
    kind: ReplicationController
    metadata:
      name: frontend-1
    spec:
      replicas: 1  1
      selector:    2
        name: frontend
      template:    3
        metadata:
          labels:  4
            name: frontend 5
        spec:
          containers:
          - image: openshift/hello-openshift
            name: helloworld
            ports:
            - containerPort: 8080
              protocol: TCP
          restartPolicy: Always
          serviceAccountName: <service_account> 6
          securityContext:
            fsGroup: 7777 7
    1
    要运行的 pod 的副本数。
    2
    要运行的 pod 的标签选择器。
    3
    控制器创建的 pod 模板。
    4
    pod 上的标签。它们必须包含标签选择器中的标签。
    5
    扩展任何参数后的最大名称长度为 63 个字符。
    6
    指定您创建的服务帐户。
    7
    为 pod 指定 fsGroup

4.4.1.4. 节点上的 Cinder 卷的最大数量

默认情况下,OpenShift Container Platform 支持最多附加至一个节点的 256 Cinder 卷,并且禁用限制可附加卷的 Cinder predicate。要启用 predicate,将 MaxCinderVolumeCount 字符串添加到调度程序策略中的 predicates 字段。

其他资源

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.