Menu Close

4.3.5. 将数据存储至共享卷中

Metering 默认不配置存储。但是,您可以使用任何 ReadWriteMany 持久性卷(PV)或置备 ReadWriteMany PV 的存储类作为 Metering 存储。

注意

不建议在生产环境中使用 NFS。将 RHEL 上的 NFS 服务器用作存储后端可能无法满足 metering 要求,并可能无法提供 Metering Operator 正常工作所需的性能。

市场中的其他 NFS 实现可能没有这些问题,如 Parallel Network File System(pNFS)。pNFS 是一个带有分布式和并行功能的 NFS 实现。如需了解更多与此问题相关的信息,请联络相关的 NFS 厂商。

流程

  1. 修改 shared-storage.yaml 文件,以使用 ReadWriteMany 持久性卷进行存储:

    shared-storage.yaml 文件示例

    apiVersion: metering.openshift.io/v1
    kind: MeteringConfig
    metadata:
      name: "operator-metering"
    spec:
      storage:
        type: "hive"
        hive:
          type: "sharedPVC"
          sharedPVC:
            claimName: "metering-nfs" 1
            # Uncomment the lines below to provision a new PVC using the specified storageClass. 2
            # createPVC: true
            # storageClass: "my-nfs-storage-class"
            # size: 5Gi

    从以下配置选项中任选一个:

    1
    storage.hive.sharedPVC.claimName 设置为一个现存 ReadWriteMany 持久性卷声明(PVC)的名称。如果您没有动态卷置备,或想要对持久性卷的创建方式拥有更多控制权,则需要此配置。
    2
    storage.hive.sharedPVC.createPVC 设置为 true,并将 storage.hive.sharedPVC.storageClass 设置为具有 ReadWriteMany 访问模式的存储类的名称。此配置使用动态卷置备来自动创建卷。

  2. 为 metering 创建部署 NFS 服务器所需的以下资源对象。使用 oc create -f <file-name\".yaml 命令来创建对象 YAML 文件。

    1. 配置 PersistentVolume 资源对象:

      nfs_persistentvolume.yaml 文件示例

      apiVersion: v1
      kind: PersistentVolume
      metadata:
        name: nfs
        labels:
          role: nfs-server
      spec:
        capacity:
          storage: 5Gi
        accessModes:
        - ReadWriteMany
        storageClassName: nfs-server 1
        nfs:
          path: "/"
          server: REPLACEME
        persistentVolumeReclaimPolicy: Delete

      1
      必须与 [kind: StorageClass].metadata.name 字段值完全匹配。
    2. 使用 nfs-server 角色配置 Pod 资源对象:

      nfs_server.yaml 文件示例

      apiVersion: v1
      kind: Pod
      metadata:
        name: nfs-server
        labels:
          role: nfs-server
      spec:
        containers:
          - name: nfs-server
            image: <image_name> 1
            imagePullPolicy: IfNotPresent
            ports:
              - name: nfs
                containerPort: 2049
            securityContext:
              privileged: true
            volumeMounts:
            - mountPath: "/mnt/data"
              name: local
        volumes:
          - name: local
            emptyDir: {}

      1
      安装您的 NFS 服务器镜像。
    3. 使用 nfs-server 角色配置 Service 资源对象:

      nfs_service.yaml 文件示例

      apiVersion: v1
      kind: Service
      metadata:
        name: nfs-service
        labels:
          role: nfs-server
      spec:
        ports:
        - name: 2049-tcp
          port: 2049
          protocol: TCP
          targetPort: 2049
        selector:
          role: nfs-server
        sessionAffinity: None
        type: ClusterIP

    4. 配置 StorageClass 资源对象:

      nfs_storageclass.yaml 文件示例

      apiVersion: storage.k8s.io/v1
      kind: StorageClass
      metadata:
        name: nfs-server 1
      provisioner: example.com/nfs
      parameters:
        archiveOnDelete: "false"
      reclaimPolicy: Delete
      volumeBindingMode: Immediate

      1
      必须与 [kind: PersistentVolume].spec.storageClassName 字段值完全匹配。
警告

NFS 存储以及所有相关资源对象的具体配置,会取决于您用于 Metering 存储的 NFS 服务器镜像。