Menu Close

4.3. 配置持久性存储

metering 需要持久性存储来长久保留通过 metering-operator 收集的数据并存储报告结果。它支持多种存储系统和存储格式。选择您的存储系统并修改示例配置文件,以便为您的 metering 安装配置持久性存储。

4.3.1. 将数据存储至 Amazon S3 中

Metering 可以使用现有的 Amazon S3 存储桶,或为存储创建存储桶。

注意

Metering 不会管理或删除任何 S3 存储桶数据。卸载 metering 时,必须手动清理用于存储 metering 数据的 S3 存储桶。

要将 Amazon S3 用于存储,请编辑以下示例 s3-storage.yaml 文件中的 spec.storage 部分。

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
1
指定要存储数据的存储桶的名称。您可选择指定存储桶中的路径。
2
指定存储桶的区域。
3
metering 命名空间中的一个 secret 的名称。它包含了 AWS 凭证信息(data.aws-access-key-iddata.aws-secret-access-key)。更多详情请见以下示例。
4
如果要提供现有 S3 存储桶,或者如果不想提供具有 CreateBucket 权限的 IAM 凭证,则把该字段设置为 false

使用以下示例 secret 作为模板。

注意

Aws-access-key-id 值和 aws-secret-access-key 值必须采用 base64 编码。

apiVersion: v1
kind: Secret
metadata:
  name: your-aws-secret
data:
  aws-access-key-id: "dGVzdAo="
  aws-secret-access-key: "c2VjcmV0Cg=="

您可使用以下命令创建 secret。

注意

该命令会对您的 aws-access-key-id 值和 aws-secret-access-key 值自动进行 base64 编码。

oc create secret -n openshift-metering generic your-aws-secret --from-literal=aws-access-key-id=your-access-key  --from-literal=aws-secret-access-key=your-secret-key

aws-access-key-idaws-secret-access-key 凭证必须具有存储桶的读取和写入权限。有关授予所需权限的 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"
            ]
        }
    ]
}

如果将 spec.storage.hive.s3.createBucket 设置为 true 或取消设置,则需使用以下 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 部分。

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
1
指定 S3 兼容存储桶的名称。
2
指定存储端点。
3
metering 命名空间中的一个 secret 的名称。它包含了 AWS 凭证信息(data.aws-access-key-iddata.aws-secret-access-key)。详情请见以下示例。

使用以下示例 secret 作为模板。

apiVersion: v1
kind: Secret
metadata:
  name: your-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 部分。

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
1
指定容器名称。
2
指定 metering 命名空间中的 secret。更多详情请见以下示例。
3
您可选择指定要存储数据的目录。

使用以下示例 secret 作为模板。

apiVersion: v1
kind: Secret
metadata:
  name: your-azure-secret
data:
  azure-storage-account-name: "dGVzdAo="
  azure-secret-access-key: "c2VjcmV0Cg=="

您可使用以下命令创建 secret。

oc create secret -n openshift-metering generic your-azure-secret --from-literal=azure-storage-account-name=your-storage-account-name --from-literal=azure-secret-access-key=your-secret-key

4.3.4. 将数据存储至 Google Cloud Storage 中

要将数据存储至 Google Cloud Storage 中,必须使用已有存储桶。编辑以下示例 gcs-storage.yaml 文件中的 spec.storage 部分。

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
1
指定存储桶的名称。您可选择在存储桶中指定要存储数据的目录。
2
指定 metering 命名空间中的 secret。详情请见以下示例。

使用以下示例 secret 作为模板。

apiVersion: v1
kind: Secret
metadata:
  name: your-gcs-secret
data:
  gcs-service-account.json: "c2VjcmV0Cg=="

您可使用以下命令创建 secret。

oc create secret -n openshift-metering generic your-gcs-secret --from-file gcs-service-account.json=/path/to/your/service-account-key.json

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

注意

不建议 metering 使用 NFS。

在默认情况下,metering 没有存储,但它可使用任何 ReadWriteMany PersistentVolume 或置备了一个 ReadWriteMany PersistentVolume 的任何 StorageClass。

流程

  • 要将 ReadWriteMany PersistentVolume 用于存储,请修改以下 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 2
        # storageClass.
        # createPVC: true
        # storageClass: "my-nfs-storage-class"
        # size: 5Gi

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

1
storage.hive.sharedPVC.claimName 设置为一个现存 ReadWriteMany PersistentVolumeClaim (PVC) 的名称。如果您没有使用动态卷置备,或希望对 PersistentVolume 的创建方式拥有更多控制权,则需要这个设置。
2
storage.hive.sharedPVC.createPVC 设置为 true 并将 storage.hive.sharedPVC.storageClass 设置为一个具有 ReadWriteMany 访问模式的 StorageClass 的名称。该操作将使用动态卷置备来自动创建卷。