4.3. 配置持久性存储
Metering 是一个已弃用的功能。弃用的功能仍然包含在 OpenShift Container Platform 中,并将继续被支持。但是,这个功能会在以后的发行版本中被删除,且不建议在新的部署中使用。
有关 OpenShift Container Platform 中已弃用或删除的主要功能的最新列表,请参阅 OpenShift Container Platform 发行注记中已弃用和删除的功能部分。
Metering 需要持久性存储来保留 Metering Operator 收集的数据并存储报告结果。它支持多种存储系统和存储格式。选择您的存储系统并修改示例配置文件,以便为您的 metering 安装配置持久性存储。
4.3.1. 将数据存储至 Amazon S3 中
Metering 可以使用现有的 Amazon S3 存储桶,或为存储创建存储桶。
Metering 不会管理或删除任何 S3 存储桶数据。您必须手动清理用于存储 metering 数据的 S3 存储桶。
流程
编辑
s3-storage.yaml
文件中的spec.storage
部分:s3-storage.yaml
文件示例apiVersion: metering.openshift.io/v1 kind: MeteringConfig metadata: name: "operator-metering" spec: storage: type: "hive" hive: type: "s3" s3: bucket: "bucketname/path/" 1 region: "us-west-1" 2 secretName: "my-aws-secret" 3 # Set to false if you want to provide an existing bucket, instead of # having metering create the bucket on your behalf. createBucket: true 4
使用以下
Secret
对象作为模板:AWS
Secret
对象示例apiVersion: v1 kind: Secret metadata: name: my-aws-secret data: aws-access-key-id: "dGVzdAo=" aws-secret-access-key: "c2VjcmV0Cg=="
注意Aws-access-key-id
值和aws-secret-access-key
值必须采用 base64 编码。创建 secret:
$ oc create secret -n openshift-metering generic my-aws-secret \ --from-literal=aws-access-key-id=my-access-key \ --from-literal=aws-secret-access-key=my-secret-key
注意该命令会对您的
aws-access-key-id
值和aws-secret-access-key
值自动进行 base64 编码。
aws-access-key-id
和 aws-secret-access-key
凭证必须具有存储桶的读取和写入权限。以下 aws/read-write.json
文件显示授予所需权限的 IAM 策略:
aws/read-write.json
文件示例
{ "Version": "2012-10-17", "Statement": [ { "Sid": "1", "Effect": "Allow", "Action": [ "s3:AbortMultipartUpload", "s3:DeleteObject", "s3:GetObject", "s3:HeadBucket", "s3:ListBucket", "s3:ListMultipartUploadParts", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::operator-metering-data/*", "arn:aws:s3:::operator-metering-data" ] } ] }
如果 s3-storage.yaml
文件中的 spec.storage.hive.s3.createBucket
被设置为 true
或取消设置,那么您应该使用包含创建和删除存储桶权限的 aws/read-write-create.json
文件:
aws/read-write-create.json
文件示例
{ "Version": "2012-10-17", "Statement": [ { "Sid": "1", "Effect": "Allow", "Action": [ "s3:AbortMultipartUpload", "s3:DeleteObject", "s3:GetObject", "s3:HeadBucket", "s3:ListBucket", "s3:CreateBucket", "s3:DeleteBucket", "s3:ListMultipartUploadParts", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::operator-metering-data/*", "arn:aws:s3:::operator-metering-data" ] } ] }
4.3.2. 将数据存储至 S3 兼容存储中
您可以使用 S3 兼容存储,如 Noobaa。
流程
编辑
s3-compatible-storage.yaml
文件中的spec.storage
部分:s3-compatible-storage.yaml
文件示例apiVersion: metering.openshift.io/v1 kind: MeteringConfig metadata: name: "operator-metering" spec: storage: type: "hive" hive: type: "s3Compatible" s3Compatible: bucket: "bucketname" 1 endpoint: "http://example:port-number" 2 secretName: "my-aws-secret" 3
使用以下
Secret
对象作为模板:S3 兼容
Secret
对象示例apiVersion: v1 kind: Secret metadata: name: my-aws-secret data: aws-access-key-id: "dGVzdAo=" aws-secret-access-key: "c2VjcmV0Cg=="
4.3.3. 将数据存储至 Microsoft Azure 中
要将数据存储至 Azure blob 存储中,必须使用已有容器。
流程
编辑
azure-blob-storage.yaml
文件中的spec.storage
部分:azure-blob-storage.yaml
文件示例apiVersion: metering.openshift.io/v1 kind: MeteringConfig metadata: name: "operator-metering" spec: storage: type: "hive" hive: type: "azure" azure: container: "bucket1" 1 secretName: "my-azure-secret" 2 rootDirectory: "/testDir" 3
使用以下
Secret
对象作为模板:Azure
Secret
对象示例apiVersion: v1 kind: Secret metadata: name: my-azure-secret data: azure-storage-account-name: "dGVzdAo=" azure-secret-access-key: "c2VjcmV0Cg=="
创建 secret:
$ oc create secret -n openshift-metering generic my-azure-secret \ --from-literal=azure-storage-account-name=my-storage-account-name \ --from-literal=azure-secret-access-key=my-secret-key
4.3.4. 将数据存储至 Google Cloud Storage 中
要将数据存储至 Google Cloud Storage 中,您必须使用现有的存储桶。
流程
编辑
gcs-storage.yaml
文件中的spec.storage
部分:gcs-storage.yaml
文件示例apiVersion: metering.openshift.io/v1 kind: MeteringConfig metadata: name: "operator-metering" spec: storage: type: "hive" hive: type: "gcs" gcs: bucket: "metering-gcs/test1" 1 secretName: "my-gcs-secret" 2
使用以下
Secret
对象作为模板:Google Cloud Storage
Secret
对象示例apiVersion: v1 kind: Secret metadata: name: my-gcs-secret data: gcs-service-account.json: "c2VjcmV0Cg=="
创建 secret:
$ oc create secret -n openshift-metering generic my-gcs-secret \ --from-file gcs-service-account.json=/path/to/my/service-account-key.json
4.3.5. 将数据存储至共享卷中
Metering 默认不配置存储。但是,您可以使用任何 ReadWriteMany 持久性卷(PV)或置备 ReadWriteMany PV 的存储类作为 Metering 存储。
不建议在生产环境中使用 NFS。将 RHEL 上的 NFS 服务器用作存储后端可能无法满足 metering 要求,并可能无法提供 Metering Operator 正常工作所需的性能。
市场中的其他 NFS 实现可能没有这些问题,如 Parallel Network File System(pNFS)。pNFS 是一个带有分布式和并行功能的 NFS 实现。如需了解更多与此问题相关的信息,请联络相关的 NFS 厂商。
流程
修改
shared-storage.yaml
文件,以使用 ReadWriteMany 持久性卷进行存储: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
从以下配置选项中任选一个:
为 metering 创建部署 NFS 服务器所需的以下资源对象。使用
oc create -f <file-name\".yaml
命令来创建对象 YAML 文件。配置
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
字段值完全匹配。
使用
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 服务器镜像。
使用
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
配置
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 服务器镜像。