3.3. 永続ストレージの設定

メータリングでは、metering-operator によって収集されるデータを永続化し、レポートの結果を保存するための永続ストレージが必要です。数多くの異なるストレージプロバイダーおよびストレージ形式がサポートされています。ストレージプロバイダーを選択し、設定ファイルのサンプルを変更して、メータリングのインストール用に永続ストレージを設定します。

3.3.1. Amazon S3 でのデータの保存

メータリングは既存の Amazon S3 バケットを使用するか、またはストレージのバケットを作成できます。

注記

メータリングは S3 バケットデータを管理または削除しません。メータリングをアンインストールする際に、メータリングデータを保存するために使用される 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
data.aws-access-key-id および data.aws-secret-access-key フィールドに AWS 認証情報を含むメータリング namespace のシークレットの名前。詳細は、以下のサンプルを参照してください。
4
既存の S3 バケットを指定する必要がある場合や、 CreateBucket パーミッションを持つ IAM 認証情報を指定する必要がない場合は、このフィールドを false に設定します。

テンプレートとして以下のシークレットサンプルを使用します。

注記

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=="

以下のコマンドを使用してシークレットを作成できます。

注記

このコマンドは、aws-access-key-idaws-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-id および aws-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.createBuckettrue に設定しているか、または未設定にしている場合、以下の 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"
            ]
        }
    ]
}

3.3.2. S3 互換ストレージへのデータの保存

Noobaa などの S3 互換ストレージを使用するには、以下のサンプルの 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
data.aws-access-key-id および data.aws-secret-access-key フィールドに AWS 認証情報を含むメータリング namespace のシークレットの名前。詳細は、以下のサンプルを参照してください。

テンプレートとして以下のシークレットサンプルを使用します。

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

3.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
シークレットをメータリング namespace に指定します。詳細は、以下のサンプルを参照してください。
3
オプションで、データを格納するディレクトリーを指定できます。

テンプレートとして以下のシークレットサンプルを使用します。

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

以下のコマンドを使用してシークレットを作成できます。

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

3.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
シークレットをメータリング namespace に指定します。詳細は、以下の例を参照してください。

以下のサンプルのシークレットをテンプレートとして使用します。

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

以下のコマンドを使用してシークレットを作成できます。

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

3.3.5. 共有ボリュームへのデータの保存

注記

NFS をメータリングと併用することは推奨されません。

メータリングにはデフォルトでストレージがありませんが、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.createPVCtrue に設定し、storage.hive.sharedPVC.storageClass を ReadWriteMany アクセスモードの StorageClass に設定します。これにより、動的ボリュームのプロビジョニングを使用して、ボリュームを自動的に作成できます。