ハイブリッドおよびマルチクラウドリソースの管理


Red Hat OpenShift Data Foundation 4.16

Multicloud Object Gateway (NooBaa) を使用したハイブリッドクラウドまたはマルチクラウド環境でのストレージリソースを管理する方法

Red Hat Storage Documentation Team

概要

このドキュメントでは、ハイブリッドクラウドまたはマルチクラウド環境でストレージリソースを管理する方法を説明します。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。まずは、マスター (master)、スレーブ (slave)、ブラックリスト (blacklist)、ホワイトリスト (whitelist) の 4 つの用語の置き換えから始めます。この取り組みは膨大な作業を要するため、用語の置き換えは、今後の複数のリリースにわたって段階的に実施されます。詳細は、Red Hat CTO である Chris Wright のメッセージ をご覧ください。

Red Hat ドキュメントへのフィードバック (英語のみ)

Red Hat ドキュメントに対するご意見をお聞かせください。ドキュメントの改善点があれば、ぜひお知らせください。

フィードバックを送信するには、Bugzilla チケットを作成します。

  1. Bugzilla の Web サイトに移動します。
  2. Component セクションで、documentation を選択します。
  3. Description フィールドに、ドキュメントの改善に向けたご提案を記入してください。ドキュメントの該当部分へのリンクも記載してください。
  4. Submit Bug をクリックします。

第1章 Multicloud Object Gateway について

Multicloud Object Gateway (MCG) は OpenShift の軽量オブジェクトストレージサービスであり、ユーザーは必要に応じて、複数のクラスター、およびクラウドネイティブストレージを使用して、オンプレミスで小規模に開始し、その後にスケーリングできます。

第2章 アプリケーションの使用による Multicloud Object Gateway へのアクセス

AWS S3 を対象とするアプリケーションまたは AWS S3 Software Development Kit(SDK) を使用するコードを使用して、オブジェクトサービスにアクセスできます。アプリケーションは、Multicloud Object Gateway (MCG) エンドポイント、アクセスキー、およびシークレットアクセスキーを指定する必要があります。ターミナルまたは MCG CLI を使用して、この情報を取得できます。

RADOS Object Gateway (RGW) S3 エンドポイントへのアクセスについては、Accessing the RADOS Object Gateway S3 endpoint を参照してください。

前提条件

  • 実行中の OpenShift Data Foundation Platform。

2.1. ターミナルから Multicloud Object Gateway へのアクセス

手順

describe コマンドを実行し、アクセスキー (AWS_ACCESS_KEY_ID 値) およびシークレットアクセスキー (AWS_SECRET_ACCESS_KEY 値) を含む Multicloud Object Gateway (MCG) エンドポイントの情報を表示します。

# oc describe noobaa -n openshift-storage

出力は以下のようになります。

Name:         noobaa
Namespace:    openshift-storage
Labels:       <none>
Annotations:  <none>
API Version:  noobaa.io/v1alpha1
Kind:         NooBaa
Metadata:
  Creation Timestamp:  2019-07-29T16:22:06Z
  Generation:          1
  Resource Version:    6718822
  Self Link:           /apis/noobaa.io/v1alpha1/namespaces/openshift-storage/noobaas/noobaa
  UID:                 019cfb4a-b21d-11e9-9a02-06c8de012f9e
Spec:
Status:
  Accounts:
    Admin:
      Secret Ref:
        Name:           noobaa-admin
        Namespace:      openshift-storage
  Actual Image:         noobaa/noobaa-core:4.0
  Observed Generation:  1
  Phase:                Ready
  Readme:

  Welcome to NooBaa!
  -----------------

  Welcome to NooBaa!
    -----------------
    NooBaa Core Version:
    NooBaa Operator Version:

    Lets get started:

    1. Connect to Management console:

      Read your mgmt console login information (email & password) from secret: "noobaa-admin".

        kubectl get secret noobaa-admin -n openshift-storage -o json | jq '.data|map_values(@base64d)'

      Open the management console service - take External IP/DNS or Node Port or use port forwarding:

        kubectl port-forward -n openshift-storage service/noobaa-mgmt 11443:443 &
        open https://localhost:11443

    2. Test S3 client:

      kubectl port-forward -n openshift-storage service/s3 10443:443 &
1
      NOOBAA_ACCESS_KEY=$(kubectl get secret noobaa-admin -n openshift-storage -o json | jq -r '.data.AWS_ACCESS_KEY_ID|@base64d')
2
      NOOBAA_SECRET_KEY=$(kubectl get secret noobaa-admin -n openshift-storage -o json | jq -r '.data.AWS_SECRET_ACCESS_KEY|@base64d')
      alias s3='AWS_ACCESS_KEY_ID=$NOOBAA_ACCESS_KEY AWS_SECRET_ACCESS_KEY=$NOOBAA_SECRET_KEY aws --endpoint https://localhost:10443 --no-verify-ssl s3'
      s3 ls


    Services:
      Service Mgmt:
        External DNS:
          https://noobaa-mgmt-openshift-storage.apps.mycluster-cluster.qe.rh-ocs.com
          https://a3406079515be11eaa3b70683061451e-1194613580.us-east-2.elb.amazonaws.com:443
        Internal DNS:
          https://noobaa-mgmt.openshift-storage.svc:443
        Internal IP:
          https://172.30.235.12:443
        Node Ports:
          https://10.0.142.103:31385
        Pod Ports:
          https://10.131.0.19:8443
      serviceS3:
        External DNS: 3
          https://s3-openshift-storage.apps.mycluster-cluster.qe.rh-ocs.com
          https://a340f4e1315be11eaa3b70683061451e-943168195.us-east-2.elb.amazonaws.com:443
        Internal DNS:
          https://s3.openshift-storage.svc:443
        Internal IP:
          https://172.30.86.41:443
        Node Ports:
          https://10.0.142.103:31011
        Pod Ports:
          https://10.131.0.19:6443
1
アクセスキー (AWS_ACCESS_KEY_ID 値)
2
シークレットアクセスキー (AWS_SECRET_ACCESS_KEY 値)
3
MCG エンドポイント
注記

oc describe noobaa コマンドには、利用可能な内部および外部 DNS 名がリスト表示されます。内部 DNS を使用する場合、トラフィックは無料になります。外部 DNS はロードバランシングを使用してトラフィックを処理するため、1 時間あたりのコストがかかります。

2.2. MCG コマンドラインインターフェイスからの Multicloud Object Gateway へのアクセス

前提条件

  • カスタマーポータル から Multicloud Object Gateway (MCG) コマンドラインインターフェイスバイナリーをダウンロードし、実行可能にする。

    注記

    アーキテクチャーに応じて適切な製品バリアントを選択してください。利用可能なプラットフォームは、Linux (x86_64)、Windows、Mac OS です。

手順

status コマンドを実行して、エンドポイント、アクセスキー、およびシークレットアクセスキーにアクセスします。

noobaa status -n openshift-storage

出力は以下のようになります。

INFO[0000] Namespace: openshift-storage
INFO[0000]
INFO[0000] CRD Status:
INFO[0003] ✅ Exists: CustomResourceDefinition "noobaas.noobaa.io"
INFO[0003] ✅ Exists: CustomResourceDefinition "backingstores.noobaa.io"
INFO[0003] ✅ Exists: CustomResourceDefinition "bucketclasses.noobaa.io"
INFO[0004] ✅ Exists: CustomResourceDefinition "objectbucketclaims.objectbucket.io"
INFO[0004] ✅ Exists: CustomResourceDefinition "objectbuckets.objectbucket.io"
INFO[0004]
INFO[0004] Operator Status:
INFO[0004] ✅ Exists: Namespace "openshift-storage"
INFO[0004] ✅ Exists: ServiceAccount "noobaa"
INFO[0005] ✅ Exists: Role "ocs-operator.v0.0.271-6g45f"
INFO[0005] ✅ Exists: RoleBinding "ocs-operator.v0.0.271-6g45f-noobaa-f9vpj"
INFO[0006] ✅ Exists: ClusterRole "ocs-operator.v0.0.271-fjhgh"
INFO[0006] ✅ Exists: ClusterRoleBinding "ocs-operator.v0.0.271-fjhgh-noobaa-pdxn5"
INFO[0006] ✅ Exists: Deployment "noobaa-operator"
INFO[0006]
INFO[0006] System Status:
INFO[0007] ✅ Exists: NooBaa "noobaa"
INFO[0007] ✅ Exists: StatefulSet "noobaa-core"
INFO[0007] ✅ Exists: Service "noobaa-mgmt"
INFO[0008] ✅ Exists: Service "s3"
INFO[0008] ✅ Exists: Secret "noobaa-server"
INFO[0008] ✅ Exists: Secret "noobaa-operator"
INFO[0008] ✅ Exists: Secret "noobaa-admin"
INFO[0009] ✅ Exists: StorageClass "openshift-storage.noobaa.io"
INFO[0009] ✅ Exists: BucketClass "noobaa-default-bucket-class"
INFO[0009] ✅ (Optional) Exists: BackingStore "noobaa-default-backing-store"
INFO[0010] ✅ (Optional) Exists: CredentialsRequest "noobaa-cloud-creds"
INFO[0010] ✅ (Optional) Exists: PrometheusRule "noobaa-prometheus-rules"
INFO[0010] ✅ (Optional) Exists: ServiceMonitor "noobaa-service-monitor"
INFO[0011] ✅ (Optional) Exists: Route "noobaa-mgmt"
INFO[0011] ✅ (Optional) Exists: Route "s3"
INFO[0011] ✅ Exists: PersistentVolumeClaim "db-noobaa-core-0"
INFO[0011] ✅ System Phase is "Ready"
INFO[0011] ✅ Exists:  "noobaa-admin"

#------------------#
#- Mgmt Addresses -#
#------------------#

ExternalDNS : [https://noobaa-mgmt-openshift-storage.apps.mycluster-cluster.qe.rh-ocs.com https://a3406079515be11eaa3b70683061451e-1194613580.us-east-2.elb.amazonaws.com:443]
ExternalIP  : []
NodePorts   : [https://10.0.142.103:31385]
InternalDNS : [https://noobaa-mgmt.openshift-storage.svc:443]
InternalIP  : [https://172.30.235.12:443]
PodPorts    : [https://10.131.0.19:8443]

#--------------------#
#- Mgmt Credentials -#
#--------------------#

email    : admin@noobaa.io
password : HKLbH1rSuVU0I/souIkSiA==

#----------------#
#- S3 Addresses -#
#----------------#

1
ExternalDNS : [https://s3-openshift-storage.apps.mycluster-cluster.qe.rh-ocs.com https://a340f4e1315be11eaa3b70683061451e-943168195.us-east-2.elb.amazonaws.com:443]
ExternalIP  : []
NodePorts   : [https://10.0.142.103:31011]
InternalDNS : [https://s3.openshift-storage.svc:443]
InternalIP  : [https://172.30.86.41:443]
PodPorts    : [https://10.131.0.19:6443]

#------------------#
#- S3 Credentials -#
#------------------#

2
AWS_ACCESS_KEY_ID     : jVmAsu9FsvRHYmfjTiHV
3
AWS_SECRET_ACCESS_KEY : E//420VNedJfATvVSmDz6FMtsSAzuBv6z180PT5c

#------------------#
#- Backing Stores -#
#------------------#

NAME                           TYPE     TARGET-BUCKET                                               PHASE   AGE
noobaa-default-backing-store   aws-s3   noobaa-backing-store-15dc896d-7fe0-4bed-9349-5942211b93c9   Ready   141h35m32s

#------------------#
#- Bucket Classes -#
#------------------#

NAME                          PLACEMENT                                                             PHASE   AGE
noobaa-default-bucket-class   {Tiers:[{Placement: BackingStores:[noobaa-default-backing-store]}]}   Ready   141h35m33s

#-----------------#
#- Bucket Claims -#
#-----------------#

No OBC's found.
1
endpoint
2
アクセスキー
3
シークレットアクセスキー

アプリケーションに接続するための関連するエンドポイント、アクセスキー、およびシークレットアクセスキーが必要です。

以下に例を示します。

AWS S3 CLI がアプリケーションである場合、以下のコマンドは OpenShift Data Foundation のバケットをリスト表示します。

AWS_ACCESS_KEY_ID=<AWS_ACCESS_KEY_ID>
AWS_SECRET_ACCESS_KEY=<AWS_SECRET_ACCESS_KEY>
aws --endpoint <ENDPOINT> --no-verify-ssl s3 ls

2.3. Multicloud Object Gateway データバケット API のサポート

次の表は、Multicloud Object Gateway (MCG) データバケット API とそのサポートレベルを示しています。

データバケット

サポート

 

List buckets

サポート対象

 

Delete bucket

サポート対象

レプリケーション設定は、MCG バケットクラス設定の一部です。

Create bucket

サポート対象

固定 ACL のさまざまなセット。

Post bucket

サポート対象外

 

Put bucket

一部サポート対象

レプリケーション設定は、MCG バケットクラス設定の一部です。

Bucket lifecycle

一部サポート対象

オブジェクトの有効期限のみ。

Policy (Buckets, Objects)

一部サポート対象

バケットポリシーがサポートされています。

Bucket Website

サポート対象

 

Bucket ACLs (Get, Put)

サポート対象

固定 ACL のさまざまなセット。

Bucket Location

一部

デフォルト値のみを返します。

Bucket Notification

サポート対象外

 

Bucket Object Versions

サポート対象

 

Get Bucket Info (HEAD)

サポート対象

 

Bucket Request Payment

一部サポート対象

バケットの所有者を返します。

Put Object

サポート対象

 

Delete Object

サポート対象

 

Get Object

サポート対象

 

Object ACLs (Get, Put)

サポート対象

 

Get Object Info (HEAD)

サポート対象

 

POST Object

サポート対象

 

Copy Object

サポート対象

 

Multipart Uploads

サポート対象

 

Object Tagging

サポート対象

 

Storage Class

サポート対象外

 
注記

cors、メトリクス、インベントリー、分析、インベントリー、ロギング、通知、高速化、レプリケーション、要求支払い、ロック動詞 はサポートされていません。

第3章 ハイブリッドまたはマルチクラウド用のストレージリソースの追加

3.1. 新規バッキングストアの作成

以下の手順を使用して、OpenShift Data Foundation で新規のバッキングストアを作成します。

前提条件

  • OpenShift Data Foundation への管理者アクセス。

手順

  1. OpenShift Web コンソールで、StorageObject Storage をクリックします。
  2. Backing Store タブをクリックします。
  3. Create Backing Store をクリックします。
  4. Create New Backing Store ページで、以下を実行します。

    1. Backing Store Name を入力します。
    2. Provider を選択します。
    3. Region を選択します。
    4. オプション: Endpoint を入力します。
    5. ドロップダウンリストから Secret を選択するか、独自のシークレットを作成します。オプションで、Switch to Credentials ビューを選択すると、必要なシークレットを入力できます。

      OCP シークレットの作成に関する詳細は、Openshift Container Platform ドキュメントのCreating the secretを参照してください。

      バッキングストアごとに異なるシークレットが必要です。特定のバッキングストアのシークレット作成の詳細は、「MCG コマンドラインインターフェイスを使用したハイブリッドまたはマルチクラウドのストレージリソースの追加」 を参照して、YAML を使用したストレージリソースの追加手順を実行します。

      注記

      このメニューは、Google Cloud およびローカル PVC 以外のすべてのプロバイダーに関連します。

    6. Target bucket を入力します。ターゲットバケットは、リモートクラウドサービスでホストされるコンテナーストレージです。MCG に対してシステム用にこのバケットを使用できることを通知する接続を作成できます。
  5. Create Backing Store をクリックします。

検証手順

  1. OpenShift Web コンソールで、StorageObject Storage をクリックします。
  2. Backing Store タブをクリックして、すべてのバッキングストアを表示します。

3.2. デフォルトのバッキングストアをオーバーライドする

デフォルトのバッキングストア設定を使用したくない場合は、manualDefaultBackingStore フラグを使用してデフォルトの NooBaa バッキングストアをオーバーライドし、削除できます。これにより、バッキングストア設定をカスタマイズし、特定のニーズに合わせて柔軟に調整できます。この機能を活用すると、システムをさらに最適化し、パフォーマンスを向上させることができます。

前提条件

  • OpenShift Data Foundation Operator がインストールされた OpenShift Container Platform。
  • カスタマーポータル から Multicloud Object Gateway (MCG) コマンドラインインターフェイスバイナリーをダウンロードし、実行可能にする。

    注記

    アーキテクチャーに応じて適切な製品バリアントを選択してください。利用可能なプラットフォームは、Linux (x86_64)、Windows、Mac OS です。

手順

  1. noobaa-default-backing-store が存在するかどうかを確認します。

    $ oc get backingstore
    NAME TYPE PHASE AGE
    noobaa-default-backing-store pv-pool Creating 102s
  2. NooBaa CR にパッチを適用して manualDefaultBackingStore を有効にします。

    $ oc patch noobaa/noobaa --type json --patch='[{"op":"add","path":"/spec/manualDefaultBackingStore","value":true}]'
    重要

    Multicloud Object Gateway CLI を使用して、新しいバッキングストアを作成し、アカウントを更新します。

  3. 新しいデフォルトのバッキングストアを作成して、デフォルトのバッキングストアをオーバーライドします。以下に例を示します。

    $ noobaa backingstore create pv-pool _NEW-DEFAULT-BACKING-STORE_ --num-volumes 1 --pv-size-gb 16
    1. NEW-DEFAULT-BACKING-STORE を新しいデフォルトのバッキングストアに使用する名前に置き換えます。
  4. 新しいデフォルトのバッキングストアをデフォルトのリソースとして使用するように、管理者アカウントを更新します。

    $ noobaa account update admin@noobaa.io --new_default_resource=_NEW-DEFAULT-BACKING-STORE_
    1. NEW-DEFAULT-BACKING-STORE を前の手順のバッキングストアの名前に置き換えます。

      管理者アカウントのデフォルトのリソースを更新すると、システム全体で新しい設定が使用されるようになります。

  5. 新しいデフォルトのバッキングストアを使用するように、default-bucketclass を設定します。

    $ oc patch Bucketclass noobaa-default-bucket-class -n openshift-storage --type=json --patch='[{"op": "replace", "path": "/spec/placementPolicy/tiers/0/backingStores/0", "value": "NEW-DEFAULT-BACKING-STORE"}]'
  6. オプション: noobaa-default-backing-store を削除します。

    1. noobaa-default-backing-store に関連付けられているすべてのインスタンスとバケットを削除し、それをリソースとして使用してアカウントを更新します。
    2. noobaa-default-backing-store を削除します。

      $ oc delete backingstore noobaa-default-backing-store -n openshift-storage | oc patch -n openshift-storage backingstore/noobaa-default-backing-store --type json --patch='[ { "op": "remove", "path": "/metadata/finalizers" } ]'

      続行する前に、manualDefaultBackingStore フラグを有効にする必要があります。さらに、スムーズな移行を確保するには、デフォルトのリソースを使用するすべてのアカウントを更新し、デフォルトのバッキングストアに関連付けられたすべてのインスタンスとバケットを削除することが重要です。

3.3. MCG コマンドラインインターフェイスを使用したハイブリッドまたはマルチクラウドのストレージリソースの追加

Multicloud Object Gateway (MCG) は、クラウドプロバイダーおよびクラスター全体にまたがるデータの処理を単純化します。

MCG で使用できるバッキングストレージを追加します。

デプロイメントのタイプに応じて、以下のいずれかの手順を選択してバッキングストレージを作成できます。

VMware デプロイメントの場合は、「s3 と互換性のある Multicloud Object Gateway バッキングストアの作成」 に進み、詳細の手順を確認します。

3.3.1. AWS でサポートされるバッキングストアの作成

前提条件

  • カスタマーポータル から Multicloud Object Gateway (MCG) コマンドラインインターフェイスバイナリーをダウンロードし、実行可能にする。

    注記

    アーキテクチャーに応じて適切な製品バリアントを選択してください。利用可能なプラットフォームは、Linux (x86_64)、Windows、Mac OS です。

手順

MCG コマンドラインインターフェイスの使用

  • MCG コマンドラインインターフェイスから、以下のコマンドを実行します。

    noobaa backingstore create aws-s3 <backingstore_name> --access-key=<AWS ACCESS KEY> --secret-key=<AWS SECRET ACCESS KEY> --target-bucket <bucket-name> -n openshift-storage
    <backingstore_name>
    バッキングストアの名前。
    <AWS ACCESS KEY><AWS SECRET ACCESS KEY>
    この目的のために作成した AWS アクセスキー ID とシークレットアクセスキー。
    <bucket-name>

    既存の AWS バケット名。この引数は、バッキングストアのターゲットバケットとして使用するバケットを MCG に示し、その後、データストレージと管理を行います。

    出力は次のようになります。

    INFO[0001] ✅ Exists: NooBaa "noobaa"
    INFO[0002] ✅ Created: BackingStore "aws-resource"
    INFO[0002] ✅ Created: Secret "backing-store-secret-aws-resource"

YAML を使用してストレージリソースを追加する

  1. 認証情報でシークレットを作成します。

    apiVersion: v1
    kind: Secret
    metadata:
      name: <backingstore-secret-name>
      namespace: openshift-storage
    type: Opaque
    data:
      AWS_ACCESS_KEY_ID: <AWS ACCESS KEY ID ENCODED IN BASE64>
      AWS_SECRET_ACCESS_KEY: <AWS SECRET ACCESS KEY ENCODED IN BASE64>
    <AWS ACCESS KEY> および <AWS SECRET ACCESS KEY>
    Base64 を使用して独自の AWS アクセスキー ID とシークレットアクセスキーを指定してエンコードし、その結果を <AWS ACCESS KEY ID ENCODED IN BASE64><AWS SECRET ACCESS KEY ENCODED IN BASE64> に使用します。
    <backingstore-secret-name>
    前のステップで作成された backingstore シークレットの名前。
  2. 特定のバッキングストアについて以下の YAML を適用します。

    apiVersion: noobaa.io/v1alpha1
    kind: BackingStore
    metadata:
      finalizers:
      - noobaa.io/finalizer
      labels:
        app: noobaa
      name: bs
      namespace: openshift-storage
    spec:
      awsS3:
        secret:
          name: <backingstore-secret-name>
          namespace: openshift-storage
        targetBucket: <bucket-name>
      type: aws-s3
    <bucket-name>
    既存の AWS バケット名。
    <backingstore-secret-name>
    前のステップで作成された backingstore シークレットの名前。

3.3.2. AWS-STS でサポートされるバッキングストアの作成

Amazon Web Services セキュリティートークンサービス (AWS STS) は AWS の機能であり、有効期間の短い認証情報を使用して認証する方法です。AWS-STS がサポートするバッキングストアを作成するには、次の作業が必要です。

  • スクリプトを使用して AWS ロールを作成し、ロールセッションの一時的なセキュリティー認証情報を取得
  • AWS STS OpenShift クラスターへの OpenShift Data Foundation Operator のインストール
  • AWS STS OpenShift クラスターでのバッキングストアの作成
3.3.2.1. スクリプトを使用した AWS ロールの作成

OpenShift Data Foundation Operator のインストール中に、ロールを作成し、ロール Amazon リソース名 (ARN) を指定する必要があります。

前提条件

手順

  • OpenShift Data Foundation 上の Multicloud Object Gateway (MCG) の OpenID Connect (OIDC) 設定に一致するスクリプトを使用して、AWS ロールを作成します。

    以下の例は、ロールの作成に必要な詳細を示しています。

    {
        “Version”: “2012-10-17",
        “Statement”: [
            {
                “Effect”: “Allow”,
                “Principal”: {
                    “Federated”: “arn:aws:iam::123456789123:oidc-provider/mybucket-oidc.s3.us-east-2.amazonaws.com”
                },
                “Action”: “sts:AssumeRoleWithWebIdentity”,
                “Condition”: {
                    “StringEquals”: {
                        “mybucket-oidc.s3.us-east-2.amazonaws.com:sub”: [
                            “system:serviceaccount:openshift-storage:noobaa”,
                            “system:serviceaccount:openshift-storage:noobaa-endpoint”
                        ]
                    }
                }
            }
        ]
    }

    ここでは、以下のようになります。

    123456789123
    AWS アカウント ID です。
    mybucket
    バケット名です (パブリックバケット設定を使用)。
    us-east-2
    AWS リージョンです。
    openshift-storage

    namespace 名

    サンプルスクリプト

    #!/bin/bash
    set -x
    
    # This is a sample script to help you deploy MCG on AWS STS cluster.
    # This script shows how to create role-policy and then create the role in AWS.
    # For more information see: https://docs.openshift.com/rosa/authentication/assuming-an-aws-iam-role-for-a-service-account.html
    
    # WARNING: This is a sample script. You need to adjust the variables based on your requirement.
    
    # Variables :
    # user variables - REPLACE these variables with your values:
    ROLE_NAME="<role-name>" # role name that you pick in your AWS account
    NAMESPACE="<namespace>" # namespace name where MCG is running. For OpenShift Data Foundation, it is openshift-storage.
    
    # MCG variables
    SERVICE_ACCOUNT_NAME_1="<service-account-name-1>" # The service account name of statefulset core and deployment operator (MCG operator)
    SERVICE_ACCOUNT_NAME_2="<service-account-name-2>" # The service account name of deployment endpoint (MCG endpoint)
    
    # AWS variables
    # Make sure these values are not empty (AWS_ACCOUNT_ID, OIDC_PROVIDER)
    # AWS_ACCOUNT_ID is your AWS account number
    AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query "Account" --output text)
    # If you want to create the role before using the cluster, replace this field too.
    # The OIDC provider is in the structure:
    # 1) <OIDC-bucket>.s3.<aws-region>.amazonaws.com. for OIDC bucket configurations are in an S3 public bucket
    # 2) `<characters>.cloudfront.net` for OIDC bucket configurations in an S3 private bucket with a public CloudFront distribution URL
    OIDC_PROVIDER=$(oc get authentication cluster -ojson | jq -r .spec.serviceAccountIssuer | sed -e "s/^https:\/\///")
    # the permission (S3 full access)
    POLICY_ARN_STRINGS="arn:aws:iam::aws:policy/AmazonS3FullAccess"
    
    # Creating the role (with AWS command line interface)
    
    read -r -d '' TRUST_RELATIONSHIP <<EOF
    {
     "Version": "2012-10-17",
     "Statement": [
       {
     	"Effect": "Allow",
     	"Principal": {
       	"Federated": "arn:aws:iam::${AWS_ACCOUNT_ID}:oidc-provider/${OIDC_PROVIDER}"
     	},
     	"Action": "sts:AssumeRoleWithWebIdentity",
     	"Condition": {
       	"StringEquals": {
        	"${OIDC_PROVIDER}:sub": [
          	"system:serviceaccount:${NAMESPACE}:${SERVICE_ACCOUNT_NAME_1}",
          	"system:serviceaccount:${NAMESPACE}:${SERVICE_ACCOUNT_NAME_2}"
          	]
       	}
     	}
       }
     ]
    }
    EOF
    
    echo "${TRUST_RELATIONSHIP}" > trust.json
    
    aws iam create-role --role-name "$ROLE_NAME" --assume-role-policy-document file://trust.json --description "role for demo"
    
    while IFS= read -r POLICY_ARN; do
       echo -n "Attaching $POLICY_ARN ... "
       aws iam attach-role-policy \
       	--role-name "$ROLE_NAME" \
       	--policy-arn "${POLICY_ARN}"
       echo "ok."
    done <<< "$POLICY_ARN_STRINGS"
3.3.2.2. AWS STS OpenShift クラスターへの OpenShift Data Foundation Operator のインストール

前提条件

手順

  • Operator Hub から OpenShift Data Foundation Operator をインストールします。

    • インストール中に、ロール ARN を ARN Details フィールドに追加します。
    • Update approval フィールドが Manual に設定されていることを確認します。
3.3.2.3. 新規 AWS STS バッキングストアの作成

前提条件

手順

  1. Multicloud Object Gateway (MCG) をインストールします。

    これは、有効期間の短い認証情報を使用して、デフォルトのバッキングストアとともにインストールされます。

  2. MCG システムの準備ができたら、次の MCG コマンドラインインターフェイスコマンドを使用して、aws-sts-s3 タイプのバッキングストアをさらに作成できます。

    $ noobaa backingstore create aws-sts-s3 <backingstore-name> --aws-sts-arn=<aws-sts-role-arn> --region=<region> --target-bucket=<target-bucket>

    ここでは、以下のようになります。

    backingstore-name
    バッキングストアの名前
    aws-sts-role-arn
    ロールを引き受ける AWS STS ロール ARN
    region
    AWS バケットリージョン
    target-bucket
    クラウド上のターゲットバケット名

3.3.3. IBM COS でサポートされるバッキングストアの作成

前提条件

  • カスタマーポータル から Multicloud Object Gateway (MCG) コマンドラインインターフェイスバイナリーをダウンロードし、実行可能にする。

    注記

    アーキテクチャーに応じて適切な製品バリアントを選択してください。利用可能なプラットフォームは、Linux (x86_64)、Windows、Mac OS です。

手順

コマンドラインインターフェイスの使用

  1. MCG コマンドラインインターフェイスから、以下のコマンドを実行します。

    noobaa backingstore create ibm-cos <backingstore_name> --access-key=<IBM ACCESS KEY> --secret-key=<IBM SECRET ACCESS KEY> --endpoint=<IBM COS ENDPOINT> --target-bucket <bucket-name> -n openshift-storage
    <backingstore_name>
    バッキングストアの名前。
    <IBM ACCESS KEY><IBM SECRET ACCESS KEY>、および <IBM COS ENDPOINT>

    IBM アクセスキー ID、シークレットアクセスキー、および既存の IBM バケットの場所に対応する該当する地域エンドポイント

    IBM クラウドで上記のキーを生成するには、ターゲットバケットのサービス認証情報を作成する際に HMAC 認証情報を含める必要があります。

    <bucket-name>

    既存の IBM バケット名。この引数は、バッキングストア、およびその後のデータストレージと管理のターゲットバケットとして使用するバケットに関する MCG を示します。

    出力は次のようになります。

    INFO[0001] ✅ Exists: NooBaa "noobaa"
    INFO[0002] ✅ Created: BackingStore "ibm-resource"
    INFO[0002] ✅ Created: Secret "backing-store-secret-ibm-resource"

YAML を使用してストレージリソースを追加する

  1. 認証情報でシークレットを作成します。

    apiVersion: v1
    kind: Secret
    metadata:
      name: <backingstore-secret-name>
      namespace: openshift-storage
    type: Opaque
    data:
      IBM_COS_ACCESS_KEY_ID: <IBM COS ACCESS KEY ID ENCODED IN BASE64>
      IBM_COS_SECRET_ACCESS_KEY: <IBM COS SECRET ACCESS KEY ENCODED IN BASE64>
    <IBM COS ACCESS KEY ID ENCODED IN BASE64><IBM COS SECRET ACCESS KEY ENCODED IN BASE64>
    Base64 を使用して独自の IBM COS アクセスキー ID とシークレットアクセスキーを提供およびエンコードし、これらの属性の代わりに結果をそれぞれ使用します。
    <backingstore-secret-name>
    backingstore シークレットの名前。
  2. 特定のバッキングストアについて以下の YAML を適用します。

    apiVersion: noobaa.io/v1alpha1
    kind: BackingStore
    metadata:
      finalizers:
      - noobaa.io/finalizer
      labels:
        app: noobaa
      name: bs
      namespace: openshift-storage
    spec:
      ibmCos:
        endpoint: <endpoint>
        secret:
          name: <backingstore-secret-name>
          namespace: openshift-storage
        targetBucket: <bucket-name>
      type: ibm-cos
    <bucket-name>
    既存の IBM COS バケット名。この引数は、バッキングストアのターゲットバケットとして使用するバケットについて MCG に指示し、その後、データストレージと管理を行います。
    <endpoint>
    既存の IBM バケット名の場所に対応する地域エンドポイント。この引数は、バッキングストアに使用するエンドポイントを MCG に示し、その後、データストレージと管理を行います。
    <backingstore-secret-name>
    前のステップで作成されたシークレットの名前。

3.3.4. Azure でサポートされるバッキングストアの作成

前提条件

  • カスタマーポータル から Multicloud Object Gateway (MCG) コマンドラインインターフェイスバイナリーをダウンロードし、実行可能にする。

    注記

    アーキテクチャーに応じて適切な製品バリアントを選択してください。利用可能なプラットフォームは、Linux (x86_64)、Windows、Mac OS です。

手順

MCG コマンドラインインターフェイスの使用

  • MCG コマンドラインインターフェイスから、以下のコマンドを実行します。

    noobaa backingstore create azure-blob <backingstore_name> --account-key=<AZURE ACCOUNT KEY> --account-name=<AZURE ACCOUNT NAME> --target-blob-container <blob container name> -n openshift-storage
    <backingstore_name>
    バッキングストアの名前。
    <AZURE ACCOUNT KEY> および <AZURE ACCOUNT NAME>
    この目的のために作成した AZURE アカウントキーとアカウント名。
    <blob container name>

    既存の Azure Blob コンテナー名。この引数は、バッキングストアのターゲットバケットとして使用するバケットについて MCG に指示し、その後、データストレージと管理を行います。

    出力は次のようになります。

    INFO[0001] ✅ Exists: NooBaa "noobaa"
    INFO[0002] ✅ Created: BackingStore "azure-resource"
    INFO[0002] ✅ Created: Secret "backing-store-secret-azure-resource"

YAML を使用してストレージリソースを追加する

  1. 認証情報でシークレットを作成します。

    apiVersion: v1
    kind: Secret
    metadata:
      name: <backingstore-secret-name>
    type: Opaque
    data:
      AccountName: <AZURE ACCOUNT NAME ENCODED IN BASE64>
      AccountKey: <AZURE ACCOUNT KEY ENCODED IN BASE64>
    <AZURE ACCOUNT NAME ENCODED IN BASE64> および <AZURE ACCOUNT KEY ENCODED IN BASE64>
    Base64 を使用して独自の Azure アカウント名とアカウントキーを指定してエンコードし、これらの属性の代わりに結果をそれぞれ使用します。
    <backingstore-secret-name>
    backingstore シークレットの一意の名前。
  2. 特定のバッキングストアについて以下の YAML を適用します。

    apiVersion: noobaa.io/v1alpha1
    kind: BackingStore
    metadata:
      finalizers:
      - noobaa.io/finalizer
      labels:
        app: noobaa
      name: bs
      namespace: openshift-storage
    spec:
      azureBlob:
        secret:
          name: <backingstore-secret-name>
          namespace: openshift-storage
        targetBlobContainer: <blob-container-name>
      type: azure-blob
    <blob-container-name>
    既存の Azure Blob コンテナー名。この引数は、バッキングストアのターゲットバケットとして使用するバケットについて MCG に指示し、その後、データストレージと管理を行います。
    <backingstore-secret-name>
    前の手順で作成したシークレットの名前に置き換えます。

3.3.5. GCP でサポートされるバッキングストアの作成

前提条件

  • カスタマーポータル から Multicloud Object Gateway (MCG) コマンドラインインターフェイスバイナリーをダウンロードし、実行可能にする。

    注記

    アーキテクチャーに応じて適切な製品バリアントを選択してください。利用可能なプラットフォームは、Linux (x86_64)、Windows、Mac OS です。

手順

MCG コマンドラインインターフェイスの使用

  • MCG コマンドラインインターフェイスから、以下のコマンドを実行します。

    noobaa backingstore create google-cloud-storage <backingstore_name> --private-key-json-file=<PATH TO GCP PRIVATE KEY JSON FILE> --target-bucket <GCP bucket name> -n openshift-storage
    <backingstore_name>
    バッキングストアの名前。
    <PATH TO GCP PRIVATE KEY JSON FILE>
    この目的のために作成された GCP 秘密鍵へのパス。
    <GCP bucket name>

    既存の GCP オブジェクトストレージバケット名。この引数は、MCG に対して、バッキングストア、およびその後のデータストレージおよび管理のためのターゲットバケットとして使用するバケットについて指示します。

    出力は次のようになります。

    INFO[0001] ✅ Exists: NooBaa "noobaa"
    INFO[0002] ✅ Created: BackingStore "google-gcp"
    INFO[0002] ✅ Created: Secret "backing-store-google-cloud-storage-gcp"

YAML を使用してストレージリソースを追加する

  1. 認証情報でシークレットを作成します。

    apiVersion: v1
    kind: Secret
    metadata:
      name: <backingstore-secret-name>
    type: Opaque
    data:
      GoogleServiceAccountPrivateKeyJson: <GCP PRIVATE KEY ENCODED IN BASE64>
    <GCP PRIVATE KEY ENCODED IN BASE64>
    Base64 を使用して独自の GCP サービスアカウントの秘密鍵を提供およびエンコードし、この属性の結果を使用します。
    <backingstore-secret-name>
    backingstore シークレットの一意の名前。
  2. 特定のバッキングストアについて以下の YAML を適用します。

    apiVersion: noobaa.io/v1alpha1
    kind: BackingStore
    metadata:
      finalizers:
      - noobaa.io/finalizer
      labels:
        app: noobaa
      name: bs
      namespace: openshift-storage
    spec:
      googleCloudStorage:
        secret:
          name: <backingstore-secret-name>
          namespace: openshift-storage
        targetBucket: <target bucket>
      type: google-cloud-storage
    <target bucket>
    既存の Google ストレージバケット。この引数は、バッキングストアのターゲットバケットとして使用するバケットについて MCG に指示し、その後、データストレージ dfdand 管理を行います。
    <backingstore-secret-name>
    前のステップで作成されたシークレットの名前。

3.3.6. ローカル永続ボリュームでサポートされるバッキングストアの作成

前提条件

  • カスタマーポータル から Multicloud Object Gateway (MCG) コマンドラインインターフェイスバイナリーをダウンロードし、実行可能にする。

    注記

    アーキテクチャーに応じて適切な製品バリアントを選択してください。利用可能なプラットフォームは、Linux (x86_64)、Windows、Mac OS です。

手順

MCG コマンドラインインターフェイスを使用したストレージリソースの追加

  • MCG コマンドラインインターフェイスから、以下のコマンドを実行します。

    注記

    このコマンドは、openshift-storage namespace 内から実行する必要があります。

    $ noobaa -n openshift-storage backingstore create pv-pool <backingstore_name> --num-volumes <NUMBER OF VOLUMES>  --pv-size-gb <VOLUME SIZE> --request-cpu <CPU REQUEST> --request-memory <MEMORY REQUEST> --limit-cpu <CPU LIMIT> --limit-memory <MEMORY LIMIT> --storage-class <LOCAL STORAGE CLASS>

YAML を使用してストレージリソースの追加

  • 特定のバッキングストアについて以下の YAML を適用します。

    apiVersion: noobaa.io/v1alpha1
    kind: BackingStore
    metadata:
      finalizers:
      - noobaa.io/finalizer
      labels:
        app: noobaa
      name: <backingstore_name>
      namespace: openshift-storage
    spec:
       pvPool:
        numVolumes: <NUMBER OF VOLUMES>
        resources:
          requests:
            storage: <VOLUME SIZE>
            cpu: <CPU REQUEST>
            memory: <MEMORY REQUEST>
          limits:
            cpu: <CPU LIMIT>
            memory: <MEMORY LIMIT>
        storageClass: <LOCAL STORAGE CLASS>
      type: pv-pool
    <backingstore_name>
    バッキングストアの名前。
    <NUMBER OF VOLUMES>
    作成するボリュームの数。ボリュームの数を増やすと、ストレージが拡大することに注意してください。
    <VOLUME SIZE>
    各ボリュームの必要なサイズ (GB)。
    <CPU REQUEST>
    CPU ユニット m で要求された CPU の保証量。
    <MEMORY REQUEST>
    要求されたメモリー量の保証。
    <CPU LIMIT>
    CPU ユニット m で消費できる CPU の最大量。
    <MEMORY LIMIT>
    消費できるメモリーの最大量。
    <LOCAL STORAGE CLASS>

    ocs-storagecluster-ceph-rbd の使用を推奨するローカルストレージクラス名。

    出力は次のようになります。

    INFO[0001] ✅ Exists: NooBaa "noobaa"
    INFO[0002] ✅ Exists: BackingStore "local-mcg-storage"

3.4. s3 と互換性のある Multicloud Object Gateway バッキングストアの作成

Multicloud Object Gateway (MCG) は、任意の S3 と互換性のあるオブジェクトストレージをバッキングストアとして使用できます (例: Red Hat Ceph Storage の RADOS Object Gateway (RGW))。以下の手順では、Red Hat Ceph Storage の RGW 用の S3 と互換性のある MCG バッキングストアを作成する方法を説明します。RGW がデプロイされると、OpenShift Data Foundation operator は MCG の S3 と互換性のあるバッキングストアを自動的に作成することに注意してください。

手順

  1. MCG コマンドラインインターフェイスから、以下のコマンドを実行します。

    注記

    このコマンドは、openshift-storage namespace 内から実行する必要があります。

    noobaa backingstore create s3-compatible rgw-resource --access-key=<RGW ACCESS KEY> --secret-key=<RGW SECRET KEY> --target-bucket=<bucket-name> --endpoint=<RGW endpoint> -n openshift-storage
    1. <RGW ACCESS KEY> および <RGW SECRET KEY> を取得するには、RGW ユーザーシークレット名を使用して以下のコマンドを実行します。

      oc get secret <RGW USER SECRET NAME> -o yaml -n openshift-storage
    2. Base64 からアクセスキー ID とアクセスキーをデコードし、それらのキーを保持します。
    3. <RGW USER ACCESS KEY><RGW USER SECRET ACCESS KEY> を、直前の手順でデコードした適切なデータに置き換えます。
    4. <bucket-name> を既存の RGW バケット名に置き換えます。この引数は、MCG に対して、バッキングストア、およびその後のデータストレージおよび管理のためのターゲットバケットとして使用するバケットについて指示します。
    5. <RGW endpoint> を取得するには、RADOS Object Gateway S3 エンドポイントへのアクセス を参照してください。

      出力は次のようになります。

      INFO[0001] ✅ Exists: NooBaa "noobaa"
      INFO[0002] ✅ Created: BackingStore "rgw-resource"
      INFO[0002] ✅ Created: Secret "backing-store-secret-rgw-resource"

YAML を使用してバッキングストアを作成することもできます。

  1. CephObjectStore ユーザーを作成します。これにより、RGW 認証情報が含まれるシークレットも作成されます。

    apiVersion: ceph.rook.io/v1
    kind: CephObjectStoreUser
    metadata:
      name: <RGW-Username>
      namespace: openshift-storage
    spec:
      store: ocs-storagecluster-cephobjectstore
      displayName: "<Display-name>"
    1. <RGW-Username><Display-name> を、一意のユーザー名および表示名に置き換えます。
  2. 以下の YAML を S3 と互換性のあるバッキングストアについて適用します。

    apiVersion: noobaa.io/v1alpha1
    kind: BackingStore
    metadata:
      finalizers:
      - noobaa.io/finalizer
      labels:
        app: noobaa
      name: <backingstore-name>
      namespace: openshift-storage
    spec:
      s3Compatible:
        endpoint: <RGW endpoint>
        secret:
          name: <backingstore-secret-name>
          namespace: openshift-storage
        signatureVersion: v4
        targetBucket: <RGW-bucket-name>
      type: s3-compatible
    1. <backingstore-secret-name> を、直前の手順で CephObjectStore で作成したシークレットの名前に置き換えます。
    2. <bucket-name> を既存の RGW バケット名に置き換えます。この引数は、MCG に対して、バッキングストア、およびその後のデータストレージおよび管理のためのターゲットバケットとして使用するバケットについて指示します。
    3. <RGW endpoint> を取得するには、RADOS Object Gateway S3 エンドポイントへのアクセス を参照してください。

3.5. 新規バケットクラスの作成

バケットクラスは、Object Bucket Class の階層ポリシーおよびデータ配置を定義するバケットのクラスを表す CRD です。

以下の手順を使用して、OpenShift Data Foundation でバケットクラスを作成します。

手順

  1. OpenShift Web コンソールで、StorageObject Storage をクリックします。
  2. Bucket Class タブをクリックします。
  3. Create Bucket Class をクリックします。
  4. Create new Bucket Class ページで、以下を実行します。

    1. バケットクラスターイプを選択し、バケットクラス名を入力します。

      1. BucketClass タイプを選択します。以下のいずれかのオプションを選択します。

        • Standard: データは Multicloud Object Gateway (MCG) に使用され、重複排除、圧縮、および暗号化されます。
        • Namespace: データは、重複排除、圧縮、または暗号化を実行せずに NamespaceStores に保存されます。

          デフォルトでは、Standard が選択されます。

      2. Bucket Class Name 名を入力します。
      3. Next をクリックします。
    2. Placement PolicyTier 1 - Policy Type を選択し、Next をクリックします。要件に応じて、いずれかのオプションを選択できます。

      • Spread により、選択したリソース全体にデータを分散できます。
      • Mirror により、選択したリソース全体でデータを完全に複製できます。
      • Add Tier をクリックし、別のポリシー階層を追加します。
    3. Tier 1 - Policy TypeSpread を選択した場合は、利用可能なリストから 1 つ以上の Backing Store リソースを選択してから、Next をクリックします。または、新しいバッキングストアを作成 することもできます。

      注記

      直前の手順で Policy Type に Mirror を選択する場合は、2 つ以上のバッキングストアを選択する必要があります。

    4. Bucket Class 設定を確認し、確認します。
    5. Create Bucket Class をクリックします。

検証手順

  1. OpenShift Web コンソールで、StorageObject Storage をクリックします。
  2. Bucket Class タブをクリックし、新しい Bucket Class を検索します。

3.6. バケットクラスの編集

以下の手順に従って、Openshift Web コンソールの edit ボタンをクリックし、YAML ファイルを使用してバケットクラスコンポーネントを編集します。

前提条件

  • OpenShift Web コンソールへの管理者アクセス。

手順

  1. OpenShift Web コンソールで、StorageObject Storage をクリックします。
  2. Bucket Class タブをクリックします。
  3. 編集する Bucket クラスの横にあるアクションメニュー (⋮) をクリックします。
  4. Edit Bucket Class をクリックします。
  5. YAML ファイルにリダイレクトされ、このファイルで必要な変更を加え、Save をクリックします。

3.7. バケットクラスのバッキングストアの編集

以下の手順を使用して、既存の Multicloud Object Gateway (MCG) バケットクラスを編集し、バケットクラスで使用される基礎となるバッキングストアを変更します。

前提条件

  • OpenShift Web コンソールへの管理者アクセス。
  • バケットクラス。
  • バッキングストア。

手順

  1. OpenShift Web コンソールで、StorageObject Storage をクリックします。
  2. Bucket Class タブをクリックします。
  3. 編集する Bucket クラスの横にあるアクションメニュー (⋮) をクリックします。
  4. Edit Bucket Class Resources をクリックします。
  5. Edit Bucket Class Resources ページで、バッキングストアをバケットクラスに追加するか、バケットクラスからバッキングストアを削除してバケットクラスリソースを編集します。1 つまたは 2 つの層を使用して作成されたバケットクラスリソースや、異なる配置ポリシーが指定されたバケットクラスリソースを編集することもできます。

    • バッキングストアをバケットクラスに追加するには、バッキングストアの名前を選択します。
    • バケットクラスからバッキングストアを削除するには、バッキングストアの名前を消去します。
  6. Save をクリックします。

第4章 namespace バケットの管理

namespace バケットを使用すると、さまざまなプロバイダーのデータリポジトリーをまとめて接続できるため、単一の統合ビューを通じてすべてのデータを操作できます。各プロバイダーに関連付けられたオブジェクトバケットを namespace バケットに追加し、namespace バケット経由でデータにアクセスし、一度にすべてのオブジェクトバケットを表示します。これにより、他の複数のストレージプロバイダーから読み込む間に、希望するストレージプロバイダーへの書き込みを行うことができ、新規ストレージプロバイダーへの移行コストが大幅に削減されます。

注記

namespace バケットは、このバケットの write ターゲットが利用可能で機能している場合にのみ使用できます。

4.1. namespace バケットのオブジェクトの Amazon S3 API エンドポイント

Amazon Simple Storage Service (S3) API を使用して namespace バケットのオブジェクトと対話できます。

Multicloud Object Gateway (MCG) に提供された認証情報を使用して、AWS S3 namespace バケット操作を実行できることを確認します。AWS ツール aws-cli を使用して、すべての操作がターゲットバケットで実行できることを確認できます。また、この MCG アカウントを使用しているリストバケットには、ターゲットバケットが表示されます。

Red Hat OpenShift Data Foundation は、次の namespace バケット操作をサポートしています。

これらの操作および使用方法に関する最新情報は、Amazon S3 API リファレンスのドキュメントを参照してください。

4.2. Multicloud Object Gateway CLI および YAML を使用した namespace バケットの追加

namespace バケットの詳細は、namespace バケットの管理 を参照してください。

デプロイメントのタイプに応じて、また YAML または Multicloud Object Gateway (MCG) CLI を使用するかどうかに応じて、以下の手順のいずれかを選択して namespace バケットを追加します。

4.2.1. YAML を使用した AWS S3 namespace バケットの追加

前提条件

手順

  1. 認証情報でシークレットを作成します。

    apiVersion: v1
    kind: Secret
    metadata:
      name: <namespacestore-secret-name>
      type: Opaque
    data:
      AWS_ACCESS_KEY_ID: <AWS ACCESS KEY ID ENCODED IN BASE64>
      AWS_SECRET_ACCESS_KEY: <AWS SECRET ACCESS KEY ENCODED IN BASE64>

    ここで、<namespacestore-secret-name> は一意の NamespaceStore 名になります。

    Base64 を使用して独自の AWS アクセスキー ID およびシークレットアクセスキーを指定してエンコードし、その結果を <AWS ACCESS KEY ID ENCODED IN BASE64> および <AWS SECRET ACCESS KEY ENCODED IN BASE64> の代わりに使用する必要があります。

  2. OpenShift カスタムリソース定義 (CRD) を使用して NamespaceStore リソースを作成します。

    NamespaceStore は、MCG namespace バケットでデータの read または write ターゲットとして使用される基礎となるストレージを表します。

    NamespaceStore リソースを作成するには、以下の YAML を適用します。

    apiVersion: noobaa.io/v1alpha1
    kind: NamespaceStore
    metadata:
      finalizers:
      - noobaa.io/finalizer
      labels:
        app: noobaa
      name: <resource-name>
      namespace: openshift-storage
    spec:
      awsS3:
        secret:
          name: <namespacestore-secret-name>
          namespace: <namespace-secret>
        targetBucket: <target-bucket>
      type: aws-s3
    <resource-name>
    リソースに指定する名前。
    <namespacestore-secret-name>
    前の手順で作成されたシークレット
    <namespace-secret>
    シークレットが見つかる namespace。
    <target-bucket>
    NamespaceStore 用に作成したターゲットバケット。
  3. namespace バケットの namespace ポリシーを定義する namespace バケットクラスを作成します。namespace ポリシーには、single または multi のタイプが必要です。

    • タイプ single の namespace ポリシーには、以下の設定が必要です。

      apiVersion: noobaa.io/v1alpha1
      kind: BucketClass
      metadata:
        labels:
          app: noobaa
        name: <my-bucket-class>
        namespace: openshift-storage
      spec:
        namespacePolicy:
          type:
          single:
            resource: <resource>
      <my-bucket-class>
      一意の namespace バケットクラス名。
      <resource>
      namespace バケットの読み取りおよび書き込みターゲットを定義する単一の NamespaceStore の名前。
    • タイプが multi の namespace ポリシーには、以下の設定が必要です。

      apiVersion: noobaa.io/v1alpha1
      
      kind: BucketClass
      metadata:
        labels:
          app: noobaa
        name: <my-bucket-class>
        namespace: openshift-storage
      spec:
        namespacePolicy:
          type: Multi
          multi:
            writeResource: <write-resource>
            readResources:
            - <read-resources>
            - <read-resources>
      <my-bucket-class>
      一意のバケットクラス名。
      <write-resource>
      namespace バケットの write ターゲットを定義する単一の NamespaceStore の名前。
      <read-resources>
      namespace バケットの read ターゲットを定義する NamespaceStores の名前のリスト。
  4. 以下の YAML を使用して前の手順に定義されたバケットクラスを使用する Object Bucket Class (OBC) リソースを使用して、バケットを作成します。

    apiVersion: objectbucket.io/v1alpha1
    kind: ObjectBucketClaim
    metadata:
      name: <resource-name>
      namespace: openshift-storage
    spec:
      generateBucketName: <my-bucket>
      storageClassName: openshift-storage.noobaa.io
      additionalConfig:
        bucketclass: <my-bucket-class>
    <resource-name>
    リソースに指定する名前。
    <my-bucket>
    バケットに指定したい名前。
    <my-bucket-class>
    前のステップで作成されたバケットクラス。

OBC が Operator によってプロビジョニングされると、バケットが MCG で作成され、Operator は OBC と同じ namespace 上に同じ名前で Secret および ConfigMap を作成します。

4.2.2. YAML を使用した IBM COS namespace バケットの追加

前提条件

手順

  1. 認証情報でシークレットを作成します。

    apiVersion: v1
    kind: Secret
    metadata:
      name: <namespacestore-secret-name>
      type: Opaque
    data:
      IBM_COS_ACCESS_KEY_ID: <IBM COS ACCESS KEY ID ENCODED IN BASE64>
      IBM_COS_SECRET_ACCESS_KEY: <IBM COS SECRET ACCESS KEY ENCODED IN BASE64>
    <namespacestore-secret-name>

    一意の NamespaceStore 名。

    Base64 を使用して独自の IBM COS アクセスキー ID およびシークレットアクセスキーを指定してエンコードし、その結果を <IBM COS ACCESS KEY ID ENCODED IN BASE64> および <IBM COS SECRET ACCESS KEY ENCODED IN BASE64> の代わりに使用する必要があります。

  2. OpenShift カスタムリソース定義 (CRD) を使用して NamespaceStore リソースを作成します。

    NamespaceStore は、MCG namespace バケットでデータの read または write ターゲットとして使用される基礎となるストレージを表します。

    NamespaceStore リソースを作成するには、以下の YAML を適用します。

    apiVersion: noobaa.io/v1alpha1
    kind: NamespaceStore
    metadata:
      finalizers:
      - noobaa.io/finalizer
      labels:
        app: noobaa
      name: bs
      namespace: openshift-storage
    spec:
      s3Compatible:
        endpoint: <IBM COS ENDPOINT>
        secret:
          name: <namespacestore-secret-name>
          namespace: <namespace-secret>
        signatureVersion: v2
        targetBucket: <target-bucket>
      type: ibm-cos
    <IBM COS ENDPOINT>
    適切な IBM COS エンドポイント。
    <namespacestore-secret-name>
    前の手順で作成されたシークレット
    <namespace-secret>
    シークレットが見つかる namespace。
    <target-bucket>
    NamespaceStore 用に作成したターゲットバケット。
  3. namespace バケットの namespace ポリシーを定義する namespace バケットクラスを作成します。namespace ポリシーには、single または multi のタイプが必要です。

    • タイプ single の namespace ポリシーには、以下の設定が必要です。

      apiVersion: noobaa.io/v1alpha1
      kind: BucketClass
      metadata:
        labels:
          app: noobaa
        name: <my-bucket-class>
        namespace: openshift-storage
      spec:
        namespacePolicy:
          type:
          single:
            resource: <resource>
      <my-bucket-class>
      一意の namespace バケットクラス名。
      <resource>
      namespace バケットの read および write ターゲットを定義する単一の NamespaceStore の名前。
    • タイプが multi の namespace ポリシーには、以下の設定が必要です。

      apiVersion: noobaa.io/v1alpha1
      kind: BucketClass
      metadata:
        labels:
          app: noobaa
        name: <my-bucket-class>
        namespace: openshift-storage
      spec:
        namespacePolicy:
          type: Multi
          multi:
            writeResource: <write-resource>
            readResources:
            - <read-resources>
            - <read-resources>
      <my-bucket-class>
      一意のバケットクラス名。
      <write-resource>
      namespace バケットの書き込みターゲットを定義する単一の NamespaceStore の名前。
      <read-resources>
      namespace バケットの read ターゲットを定義する NamespaceStores 名のリスト。
  4. 以下の YAML を適用して、前の手順で定義されたバケットクラスを使用する Object Bucket Class (OBC) リソースを使用してバケットを作成します。

    apiVersion: objectbucket.io/v1alpha1
    kind: ObjectBucketClaim
    metadata:
      name: <resource-name>
      namespace: openshift-storage
    spec:
      generateBucketName: <my-bucket>
      storageClassName: openshift-storage.noobaa.io
      additionalConfig:
        bucketclass: <my-bucket-class>
    <resource-name>
    リソースに指定する名前。
    <my-bucket>
    バケットに指定したい名前。
    <my-bucket-class>

    前のステップで作成されたバケットクラス。

    OBC が Operator によってプロビジョニングされると、バケットが MCG で作成され、Operator は OBC と同じ namespace 上に同じ名前で Secret および ConfigMap を作成します。

4.2.3. Multicloud Object Gateway CLI を使用した AWS S3 namespace バケットの追加

前提条件

  • OpenShift Data Foundation Operator がインストールされた OpenShift Container Platform。
  • Multicloud Object Gateway (MCG) へのアクセス。第 2 章 アプリケーションの使用による Multicloud Object Gateway へのアクセス を参照してください。
  • カスタマーポータル から Multicloud Object Gateway (MCG) コマンドラインインターフェイスバイナリーをダウンロードし、実行可能にする。

    注記

    アーキテクチャーに応じて適切な製品バリアントを選択してください。利用可能なプラットフォームは Linux (x86_64)、Windows、Mac OS です。

手順

  1. MCG コマンドラインインターフェイスで、NamespaceStore リソースを作成します。

    NamespaceStore は、MCG namespace バケットでデータの read または write ターゲットとして使用される基礎となるストレージを表します。

    $ noobaa namespacestore create aws-s3 <namespacestore> --access-key <AWS ACCESS KEY> --secret-key <AWS SECRET ACCESS KEY> --target-bucket <bucket-name> -n openshift-storage
    <namespacestore>
    NamespaceStore の名前。
    <AWS ACCESS KEY><AWS SECRET ACCESS KEY>
    この目的のために作成した AWS アクセスキー ID とシークレットアクセスキー。
    <bucket-name>
    既存の AWS バケット名。この引数は、MCG に対して、バッキングストア、およびその後のデータストレージおよび管理のためのターゲットバケットとして使用するバケットについて指示します。
  2. namespace バケットの namespace ポリシーを定義する namespace バケットクラスを作成します。namespace ポリシーは、single または multi のいずれかになります。

    • タイプが single の namespace ポリシーを使用して namespace バケットクラスを作成するには、以下を実行します。

      $ noobaa bucketclass create namespace-bucketclass single <my-bucket-class> --resource <resource> -n openshift-storage
      <resource-name>
      リソースに指定する名前。
      <my-bucket-class>
      一意のバケットクラス名。
      <resource>
      namespace バケットの read および write ターゲットを定義する単一の namespace-store。
    • タイプ multi の namespace ポリシーを使用して namespace バケットクラスを作成するには、以下を実行します。

      $ noobaa bucketclass create namespace-bucketclass multi <my-bucket-class> --write-resource <write-resource> --read-resources <read-resources> -n openshift-storage
      <resource-name>
      リソースに指定する名前。
      <my-bucket-class>
      一意のバケットクラス名。
      <write-resource>
      namespace バケットの write ターゲットを定義する単一の namespace-store。
      <read-resources>s
      namespace バケットの read ターゲットを定義する、コンマで区切られた namespace-store のリスト。
  3. 前の手順で定義したバケットクラスを使用する Object Bucket Class (OBC) リソースを使用して、バケットを作成します。

    $ noobaa obc create my-bucket-claim -n openshift-storage --app-namespace my-app --bucketclass <custom-bucket-class>
    <bucket-name>
    選択したバケット名。
    <custom-bucket-class>
    前の手順で作成したバケットクラスの名前。

    OBC が Operator によってプロビジョニングされると、バケットが MCG で作成され、Operator は OBC と同じ namespace 上に同じ名前で Secret および ConfigMap を作成します。

4.2.4. Multicloud Object Gateway CLI を使用した IBM COS namespace バケットの追加

前提条件

手順

  1. MCG コマンドラインインターフェイスで、NamespaceStore リソースを作成します。

    NamespaceStore は、MCG namespace バケットでデータの read または write ターゲットとして使用される基礎となるストレージを表します。

    $ noobaa namespacestore create ibm-cos <namespacestore> --endpoint <IBM COS ENDPOINT> --access-key <IBM ACCESS KEY> --secret-key <IBM SECRET ACCESS KEY> --target-bucket <bucket-name> -n openshift-storage
    <namespacestore>
    NamespaceStore の名前。
    <IBM ACCESS KEY><IBM SECRET ACCESS KEY><IBM COS ENDPOINT>
    IBM アクセスキー ID、シークレットアクセスキー、および既存の IBM バケットの場所に対応する該当する地域エンドポイント
    <bucket-name>
    既存の IBM バケット名。この引数は、MCG に対して、バッキングストア、およびその後のデータストレージおよび管理のためのターゲットバケットとして使用するバケットについて指示します。
  2. namespace バケットの namespace ポリシーを定義する namespace バケットクラスを作成します。namespace ポリシーには、single または multi のタイプが必要です。

    • タイプが single の namespace ポリシーを使用して namespace バケットクラスを作成するには、以下を実行します。

      $ noobaa bucketclass create namespace-bucketclass single <my-bucket-class> --resource <resource> -n openshift-storage
      <resource-name>
      リソースに指定する名前。
      <my-bucket-class>
      一意のバケットクラス名。
      <resource>
      namespace バケットの read および write ターゲットを定義する単一の NamespaceStore。
    • タイプ multi の namespace ポリシーを使用して namespace バケットクラスを作成するには、以下を実行します。

      $ noobaa bucketclass create namespace-bucketclass multi <my-bucket-class> --write-resource <write-resource> --read-resources <read-resources> -n openshift-storage
      <resource-name>
      リソースに指定する名前。
      <my-bucket-class>
      一意のバケットクラス名。
      <write-resource>
      namespace バケットの write ターゲットを定義する単一の NamespaceStore。
      <read-resources>
      namespace バケットの read ターゲットを定義する NamespaceStores のコンマ区切りリスト。
  3. 前の手順で定義したバケットクラスを使用する Object Bucket Class (OBC) リソースを使用して、バケットを作成します。

    $ noobaa obc create my-bucket-claim -n openshift-storage --app-namespace my-app --bucketclass <custom-bucket-class>
    <bucket-name>
    選択したバケット名。
    <custom-bucket-class>
    前の手順で作成したバケットクラスの名前。

OBC が Operator によってプロビジョニングされると、バケットが MCG で作成され、Operator は OBC と同じ namespace 上に同じ名前で Secret および ConfigMap を作成します。

4.3. OpenShift Container Platform ユーザーインターフェイスを使用した namespace バケットの追加

OpenShift Container Platform ユーザーインターフェイスを使用して namespace バケットを追加できます。namespace バケットの詳細は、namespace バケットの管理 を参照してください。

前提条件

  • OpenShift Data Foundation Operator を使用する Openshift Container Platform がすでにインストールされている。
  • Multicloud Object Gateway (MCG) へのアクセス。

手順

  1. OpenShift Web コンソールで、StorageObject StorageNamespace Store タブに移動します。
  2. Create Namespace Store タブをクリックして、namespace バケットで使用される namespacestore リソースを作成します。

    1. namespacestore 名を入力します。
    2. プロバイダーとリージョンを選択します。
    3. 既存のシークレットを選択するか、Switch to credentials をクリックして、シークレットキーおよびシークレットアクセスキーを入力してシークレットを作成します。
    4. ターゲットバケットを入力します。
    5. Create をクリックします。
  3. Namespace Store タブで、新規作成された namespacestoreReady 状態にあることを確認します。
  4. 必要な量のリソースをすべて作成するまで、手順 2 と 3 を繰り返します。
  5. Bucket Class タブに移動し、Create Bucket Class をクリックします。

    1. Namespace BucketClass type ラジオボタンを選択します。
    2. BucketClass 名 を入力し、Next をクリックします。
    3. namespace バケットの Namespace Policy Type を選択し、Next をクリックします。

      • namespace ポリシータイプが Single の場合、読み取りリソースを選択する必要があります。
      • namespace ポリシータイプが Multi の場合、読み取りリソースおよび書き込みリソースを選択する必要があります。
      • namespace ポリシータイプが Cache の場合は、namespace バケットの読み取りおよび書き込みターゲットを定義する Hub namespace ストアを選択する必要があります。
    4. namespace バケットの読み取りおよび書き込みターゲットを定義する Read and Write NamespaceStore を 1 つ選択し、Next をクリックします。
    5. 新しいバケットクラスの詳細を確認し、Create Bucket Class をクリックします。
  6. Bucket Class タブに移動し、新たに作成されたリソースが Ready フェーズにあることを確認します。
  7. Object Bucket Claims タブに移動し、Create Object Bucket Claim をクリックします。

    1. namespace バケットの ObjectBucketClaim Name を入力します。
    2. StorageClassopenshift-storage.noobaa.io として選択します。
    3. 一覧から、namespacestore 用に以前に作成した BucketClass を選択します。デフォルトでは、noobaa-default-bucket-class が選択されます。
    4. Create をクリックします。namespace バケットが、namespace の Object Bucket Claim とともに作成されます。
  8. Object Bucket Claims タブに移動し、作成された Object Bucket Claim が Bound 状態にあることを確認します。
  9. Object Buckets タブに移動し、namespace バケットがリストに存在し、Bound 状態にあることを確認します。

4.4. S3 プロトコルを使用してレガシーアプリケーションデータをクラウドネイティブアプリケーションと共有する

多くのレガシーアプリケーションは、ファイルシステムを使用してデータセットを共有します。S3 操作を使用して、ファイルシステム内のレガシーデータにアクセスして共有できます。データを共有するには、次のことを行う必要があります。

  • 既存のファイルシステムデータセット、つまり Ceph FileSystem (CephFS) などの RWX ボリュームをエクスポートするか、S3 プロトコルを使用して新しいファイルシステムデータセットを作成します。
  • ファイルシステムと S3 プロトコルの両方からファイルシステムデータセットにアクセスします。
  • S3 アカウントを設定し、それらを既存または新規のファイルシステムの一意の識別子 (UID) とグループ識別子 (GID) にマップします。

4.4.1. ファイルシステムを使用するための NamespaceStore の作成

前提条件

  • OpenShift Data Foundation Operator がインストールされた OpenShift Container Platform。
  • Multicloud Object Gateway (MCG) へのアクセス。

手順

  1. OpenShift Web コンソールにログインします。
  2. StorageObject Storage をクリックします。
  3. NamespaceStore タブをクリックして、namespace バケットで使用する NamespaceStore リソースを作成します。
  4. Create namespaces をクリックします。
  5. NamespaceStore の名前を入力します。
  6. プロバイダーとしてファイルシステムを選択します。
  7. 永続ボリュームクレームを選択します。
  8. フォルダー名を入力します。

    フォルダー名が存在する場合は、そのフォルダーを使用して NamespaceStore を作成するか、その名前のフォルダーを作成します。

  9. Create をクリックします。
  10. NamespaceStore が Ready 状態であることを確認します。

4.4.2. NamespaceStore ファイルシステム設定を使用したアカウントの作成

NamespaceStore ファイルシステム設定を使用して新しいアカウントを作成するか、YAML を編集して既存の通常のアカウントを NamespaceStore ファイルシステムアカウントに変換できます。

注記

NamespaceStore ファイルシステム設定をアカウントから削除することはできません。

前提条件

  • カスタマーポータル から Multicloud Object Gateway (MCG) コマンドラインインターフェイスバイナリーをダウンロードし、実行可能にする。

    注記

    アーキテクチャーに応じて適切な製品バリアントを選択してください。利用可能なプラットフォームは、Linux (x86_64)、Windows、Mac OS です。

手順

  • MCG コマンドラインインターフェイスを使用して、NamespaceStore ファイルシステム設定で新しいアカウントを作成します。

    $ noobaa account create <noobaa-account-name> [flags]

    以下に例を示します。

    $ noobaa account create testaccount --full_permission --nsfs_account_config --gid 10001 --uid 10001 –default_resource fs_namespacestore

    allow_bucket_create

    アカウントが新しいバケットの作成を許可されているかどうかを示します。サポートされている値は true または false です。デフォルト値は true です。

    allowed_buckets

    ユーザーがアクセス権と管理権を持つことを許可されているバケット名のコンマ区切りのリスト。

    default_resource

    S3 CreateBucket 操作を使用するときに新しいバケットが作成される NamespaceStore リソース。NamespaceStore は、RWX (ReadWriteMany) 永続ボリューム要求 (PVC) によってサポートされている必要があります。

    full_permission

    アカウントに完全な権限を与えるかどうかを示します。サポートされている値は true または false です。デフォルト値は false です。

    new_buckets_path

    新しいバケットに対応するディレクトリーが作成されるファイルシステムパス。パスは、NamespaceStore ファイルシステム PVC のファイルシステム内にあり、新しく作成されたオブジェクトバケットクラスのファイルシステムマッピングとして機能する新しいディレクトリーが作成されます。

    nsfs_account_config

    アカウントが NamespaceStore ファイルシステムに使用されているかどうかを示す必須フィールド。

    nsfs_only

    アカウントが NamespaceStore ファイルシステムにのみ使用されるかどうかを示します。サポートされている値は true または false です。デフォルト値は false です。'true' に設定すると、他のタイプのバケットへのアクセスが制限されます。

    uid

    MCG アカウントがマップされるファイルシステムのユーザー ID であり、ファイルシステム上のデータにアクセスして管理するために使用されます。

    gid

    MCG アカウントがマップされるファイルシステムのグループ ID であり、ファイルシステム上のデータにアクセスして管理するために使用されます。

    MCG システムは、アカウント設定とその S3 クレデンシャルを含む応答を送信します。

    # NooBaaAccount spec:
    allow_bucket_creation: true
    Allowed_buckets:
      full_permission: true
      permission_list: []
    default_resource: noobaa-default-namespace-store
    Nsfs_account_config:
      gid: 10001
      new_buckets_path: /
      nsfs_only: true
      uid: 10001
    INFO[0006] ✅ Exists: Secret "noobaa-account-testaccount"
    Connection info:
      AWS_ACCESS_KEY_ID      : <aws-access-key-id>
      AWS_SECRET_ACCESS_KEY  : <aws-secret-access-key>

    次のコマンドを使用して、すべてのカスタムリソース定義 (CRD) ベースのアカウントをリスト表示できます。

    $ noobaa account list
    NAME          ALLOWED_BUCKETS   DEFAULT_RESOURCE               PHASE   AGE
    testaccount   [*]               noobaa-default-backing-store   Ready   1m17s

    特定のアカウントに関心がある場合は、そのカスタムリソース定義 (CRD) をアカウント名で直接読み取ることができます。

    $ oc get noobaaaccount/testaccount -o yaml
    spec:
      allow_bucket_creation: true
      allowed_buckets:
        full_permission: true
        permission_list: []
      default_resource: noobaa-default-namespace-store
      nsfs_account_config:
        gid: 10001
        new_buckets_path: /
        nsfs_only: true
        uid: 10001

4.4.3. openshift-storage namespace からレガシーアプリケーションデータにアクセスする

Multicloud Object Gateway (MCG) NamespaceStore ファイルシステム (NSFS) 機能を使用する場合、データが openshift-storage namespace に存在する永続ボリューム要求 (PVC) が必要です。ほとんどすべての場合、アクセスする必要のあるデータは、openshift-storage namespace ではなく、レガシーアプリケーションが使用する namespace にあります。

別の namespace に保存されているデータにアクセスするには、レガシーアプリケーションが使用するのと同じ CephFS ボリュームを指す PVC を openshift-storage namespace に作成する必要があります。

手順

  1. scc を使用してアプリケーションの namespace を表示します。

    $ oc get ns <application_namespace> -o yaml | grep scc
    <application_namespace>

    アプリケーションの namespace の名前を指定します。

    以下に例を示します。

    $ oc get ns testnamespace -o yaml | grep scc
    
    openshift.io/sa.scc.mcs: s0:c26,c5
    openshift.io/sa.scc.supplemental-groups: 1000660000/10000
    openshift.io/sa.scc.uid-range: 1000660000/10000
  2. アプリケーションの namespace に移動します。

    $ oc project <application_namespace>

    以下に例を示します。

    $ oc project testnamespace
  3. MCG NSFS 機能を使用して、noobaa S3 エンドポイントから消費する Pod に ReadWriteMany (RWX) PVC がマウントされていることを確認します。

    $ oc get pvc
    
    NAME                                               STATUS VOLUME
    CAPACITY ACCESS MODES STORAGECLASS              AGE
    cephfs-write-workload-generator-no-cache-pv-claim  Bound  pvc-aa58fb91-c3d2-475b-bbee-68452a613e1a
    10Gi     RWX          ocs-storagecluster-cephfs 12s
    $ oc get pod
    
    NAME                                                READY   STATUS              RESTARTS   AGE
    cephfs-write-workload-generator-no-cache-1-cv892    1/1     Running             0          11s
  4. Pod 内の永続ボリューム (PV) のマウントポイントを確認します。

    1. Pod から PV のボリューム名を取得します。

      $ oc get pods <pod_name> -o jsonpath='{.spec.volumes[]}'
      <pod_name>

      pod の名前を指定します。

      以下に例を示します。

      $ oc get pods cephfs-write-workload-generator-no-cache-1-cv892 -o jsonpath='{.spec.volumes[]}'
      
      {"name":"app-persistent-storage","persistentVolumeClaim":{"claimName":"cephfs-write-workload-generator-no-cache-pv-claim"}}

      この例では、PVC のボリュームの名前は cephfs-write-workload-generator-no-cache-pv-claim です。

    2. Pod 内のすべてのマウントをリスト表示し、前の手順で特定したボリュームのマウントポイントを確認します。

      $ oc get pods <pod_name> -o jsonpath='{.spec.containers[].volumeMounts}'

      以下に例を示します。

      $ oc get pods cephfs-write-workload-generator-no-cache-1-cv892 -o jsonpath='{.spec.containers[].volumeMounts}'
      
      [{"mountPath":"/mnt/pv","name":"app-persistent-storage"},{"mountPath":"/var/run/secrets/kubernetes.io/serviceaccount","name":"kube-api-access-8tnc5","readOnly":true}]
  5. Pod 内の RWX PV のマウントポイントを確認します。

    $ oc exec -it <pod_name> -- df <mount_path>
    <mount_path>

    前の手順で特定したマウントポイントへのパスを指定します。

    以下に例を示します。

    $ oc exec -it cephfs-write-workload-generator-no-cache-1-cv892 -- df /mnt/pv
    
    main
    Filesystem
    1K-blocks Used Available  Use%  Mounted on
    172.30.202.87:6789,172.30.120.254:6789,172.30.77.247:6789:/volumes/csi/csi-vol-cc416d9e-dbf3-11ec-b286-0a580a810213/edcfe4d5-bdcb-4b8e-8824-8a03ad94d67c
    10485760  0    10485760   0%    /mnt/pv
  6. UID および SELinux ラベルが、レガシー namespace が使用するものと同じであることを確認してください。

    $ oc exec -it <pod_name> -- ls -latrZ <mount_path>

    以下に例を示します。

    $ oc exec -it cephfs-write-workload-generator-no-cache-1-cv892 -- ls -latrZ /mnt/pv/
    
    total 567
    drwxrwxrwx. 3 root       root system_u:object_r:container_file_t:s0:c26,c5      2 May 25 06:35 .
    -rw-r--r--. 1 1000660000 root system_u:object_r:container_file_t:s0:c26,c5 580138 May 25 06:35 fs_write_cephfs-write-workload-generator-no-cache-1-cv892-data.log
    drwxrwxrwx. 3 root       root system_u:object_r:container_file_t:s0:c26,c5     30 May 25 06:35 ..
  7. openshift-storage namespace からアクセス可能にするレガシーアプリケーション RWX PV の情報を取得します。

    $ oc get pv | grep <pv_name>
    <pv_name>

    PV の名前を指定します。

    以下に例を示します。

    $ oc get pv | grep pvc-aa58fb91-c3d2-475b-bbee-68452a613e1a
    
    pvc-aa58fb91-c3d2-475b-bbee-68452a613e1a   10Gi       RWX            Delete           Bound    testnamespace/cephfs-write-workload-generator-no-cache-pv-claim   ocs-storagecluster-cephfs              47s
  8. 1 つ以上の noobaa-endpoint Pod が PVC にアクセスできるように、レガシーアプリケーションの PVC が openshift-storage namespace からアクセス可能であることを確認します。

    1. volumeAttributes から subvolumePathvolumeHandle の値を検索します。これらの値は、レガシーアプリケーション PV の YAML 記述から取得できます。

      $ oc get pv <pv_name> -o yaml

      以下に例を示します。

      $ oc get pv pvc-aa58fb91-c3d2-475b-bbee-68452a613e1a -o yaml
      
      apiVersion: v1
      kind: PersistentVolume
      metadata:
        annotations:
          pv.kubernetes.io/provisioned-by: openshift-storage.cephfs.csi.ceph.com
        creationTimestamp: "2022-05-25T06:27:49Z"
        finalizers:
        - kubernetes.io/pv-protection
        name: pvc-aa58fb91-c3d2-475b-bbee-68452a613e1a
        resourceVersion: "177458"
        uid: 683fa87b-5192-4ccf-af2f-68c6bcf8f500
      spec:
        accessModes:
        - ReadWriteMany
        capacity:
          storage: 10Gi
        claimRef:
          apiVersion: v1
          kind: PersistentVolumeClaim
          name: cephfs-write-workload-generator-no-cache-pv-claim
          namespace: testnamespace
          resourceVersion: "177453"
          uid: aa58fb91-c3d2-475b-bbee-68452a613e1a
        csi:
          controllerExpandSecretRef:
            name: rook-csi-cephfs-provisioner
            namespace: openshift-storage
          driver: openshift-storage.cephfs.csi.ceph.com
          nodeStageSecretRef:
            name: rook-csi-cephfs-node
            namespace: openshift-storage
          volumeAttributes:
            clusterID: openshift-storage
            fsName: ocs-storagecluster-cephfilesystem
            storage.kubernetes.io/csiProvisionerIdentity: 1653458225664-8081-openshift-storage.cephfs.csi.ceph.com
            subvolumeName: csi-vol-cc416d9e-dbf3-11ec-b286-0a580a810213
            subvolumePath: /volumes/csi/csi-vol-cc416d9e-dbf3-11ec-b286-0a580a810213/edcfe4d5-bdcb-4b8e-8824-8a03ad94d67c
          volumeHandle: 0001-0011-openshift-storage-0000000000000001-cc416d9e-dbf3-11ec-b286-0a580a810213
        persistentVolumeReclaimPolicy: Delete
        storageClassName: ocs-storagecluster-cephfs
        volumeMode: Filesystem
      status:
        phase: Bound
    2. 前のステップで特定した subvolumePathvolumeHandle の値を使用して、レガシーアプリケーション PV と同じ CephFS ボリュームを指す openshift-storage namespace に新しい PV および PVC オブジェクトを作成します。

      YAML ファイルサンプル:

      $ cat << EOF >> pv-openshift-storage.yaml
      apiVersion: v1
      kind: PersistentVolume
      metadata:
        name: cephfs-pv-legacy-openshift-storage
      spec:
        storageClassName: ""
        accessModes:
        - ReadWriteMany
        capacity:
          storage: 10Gi     1
        csi:
          driver: openshift-storage.cephfs.csi.ceph.com
          nodeStageSecretRef:
            name: rook-csi-cephfs-node
            namespace: openshift-storage
          volumeAttributes:
          # Volume Attributes can be copied from the Source testnamespace PV
            "clusterID": "openshift-storage"
            "fsName": "ocs-storagecluster-cephfilesystem"
            "staticVolume": "true"
          # rootpath is the subvolumePath: you copied from the Source testnamespace PV
            "rootPath": /volumes/csi/csi-vol-cc416d9e-dbf3-11ec-b286-0a580a810213/edcfe4d5-bdcb-4b8e-8824-8a03ad94d67c
          volumeHandle: 0001-0011-openshift-storage-0000000000000001-cc416d9e-dbf3-11ec-b286-0a580a810213-clone   2
        persistentVolumeReclaimPolicy: Retain
        volumeMode: Filesystem
      ---
      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
        name: cephfs-pvc-legacy
        namespace: openshift-storage
      spec:
        storageClassName: ""
        accessModes:
        - ReadWriteMany
        resources:
          requests:
            storage: 10Gi     3
        volumeMode: Filesystem
        # volumeName should be same as PV name
        volumeName: cephfs-pv-legacy-openshift-storage
      EOF
      1
      openshift-storage namespace で作成する PV のストレージ容量は、元の PV と同じである必要があります。
      2
      openshift-storage で作成するターゲット PV のボリュームハンドルには、元のアプリケーション PV とは異なるハンドルが必要です。たとえば、ボリュームハンドルの末尾に -clone を追加します。
      3
      openshift-storage namespace で作成する PVC のストレージ容量は、元の PVC と同じである必要があります。
    3. 前のステップで指定した YAML ファイルを使用して、openshift-storage namespace に PV と PVC を作成します。

      $ oc create -f <YAML_file>
      <YAML_file>

      YAML ファイルの名前を指定します。

      以下に例を示します。

      $ oc create -f pv-openshift-storage.yaml
      
      persistentvolume/cephfs-pv-legacy-openshift-storage created
      persistentvolumeclaim/cephfs-pvc-legacy created
    4. PVC が openshift-storage namespace で使用可能であることを確認します。

      $ oc get pvc -n openshift-storage
      
      NAME                                  STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS                  AGE
      cephfs-pvc-legacy                     Bound    cephfs-pv-legacy-openshift-storage         10Gi       RWX                                          14s
    5. openshift-storage プロジェクトに移動します。

      $ oc project openshift-storage
      
      Now using project "openshift-storage" on server "https://api.cluster-5f6ng.5f6ng.sandbox65.opentlc.com:6443".
    6. NSFS namespace ストアを作成します。

      $ noobaa namespacestore create nsfs <nsfs_namespacestore> --pvc-name='<cephfs_pvc_name>' --fs-backend='CEPH_FS'
      <nsfs_namespacestore>
      NSFS namespace ストアの名前を指定します。
      <cephfs_pvc_name>

      openshift-storage namespace で CephFS PVC の名前を指定します。

      以下に例を示します。

      $ noobaa namespacestore create nsfs legacy-namespace --pvc-name='cephfs-pvc-legacy' --fs-backend='CEPH_FS'
    7. noobaa-endpoint Pod が再起動し、NSFS namespace ストア (/nsfs/legacy-namespace mountpoint など) に PVC が正常にマウントされていることを確認します。

      $ oc exec -it <noobaa_endpoint_pod_name> -- df -h /nsfs/<nsfs_namespacestore>
      <noobaa_endpoint_pod_name>

      noobaa エンドポイント Pod の名前を指定します。

      以下に例を示します。

      $ oc exec -it noobaa-endpoint-5875f467f5-546c6 -- df -h /nsfs/legacy-namespace
      
      Filesystem                                                                                                                                                Size  Used Avail Use% Mounted on
      172.30.202.87:6789,172.30.120.254:6789,172.30.77.247:6789:/volumes/csi/csi-vol-cc416d9e-dbf3-11ec-b286-0a580a810213/edcfe4d5-bdcb-4b8e-8824-8a03ad94d67c   10G     0   10G   0% /nsfs/legacy-namespace
    8. MCG ユーザーアカウントを作成します。

      $ noobaa account create <user_account> --full_permission --allow_bucket_create=true --new_buckets_path='/' --nsfs_only=true --nsfs_account_config=true --gid <gid_number> --uid <uid_number> --default_resource='legacy-namespace'
      <user_account>
      MCG ユーザーアカウントの名前を指定します。
      <gid_number>
      GID 番号を指定します。
      <uid_number>

      UID 番号を指定します。

      重要

      レガシーアプリケーションと同じ UIDGID を使用します。前の出力から見つけることができます。

      以下に例を示します。

      $ noobaa account create leguser --full_permission --allow_bucket_create=true --new_buckets_path='/' --nsfs_only=true --nsfs_account_config=true --gid 0 --uid 1000660000 --default_resource='legacy-namespace'
    9. MCG バケットを作成します。

      1. レガシーアプリケーション Pod の CephFS PV および PVC の NSFS 共有内に S3 専用のフォルダーを作成します。

        $ oc exec -it <pod_name> -- mkdir <mount_path>/nsfs

        以下に例を示します。

        $ oc exec -it cephfs-write-workload-generator-no-cache-1-cv892 -- mkdir /mnt/pv/nsfs
      2. nsfs/ パスを使用して MCG バケットを作成します。

        $ noobaa api bucket_api create_bucket '{
          "name": "<bucket_name>",
          "namespace":{
            "write_resource": { "resource": "<nsfs_namespacestore>", "path": "nsfs/" },
            "read_resources": [ { "resource": "<nsfs_namespacestore>", "path": "nsfs/" }]
          }
        }'

        以下に例を示します。

        $ noobaa api bucket_api create_bucket '{
          "name": "legacy-bucket",
          "namespace":{
            "write_resource": { "resource": "legacy-namespace", "path": "nsfs/" },
            "read_resources": [ { "resource": "legacy-namespace", "path": "nsfs/" }]
          }
        }'
    10. レガシーアプリケーションおよび openshift-storage namespace の PVC にあるフォルダーの SELinux ラベルを確認します。

      $ oc exec -it <noobaa_endpoint_pod_name> -n openshift-storage -- ls -ltraZ /nsfs/<nsfs_namespacstore>

      以下に例を示します。

      $ oc exec -it noobaa-endpoint-5875f467f5-546c6 -n openshift-storage -- ls -ltraZ /nsfs/legacy-namespace
      
      total 567
      drwxrwxrwx. 3 root       root system_u:object_r:container_file_t:s0:c0,c26      2 May 25 06:35 .
      -rw-r--r--. 1 1000660000 root system_u:object_r:container_file_t:s0:c0,c26 580138 May 25 06:35 fs_write_cephfs-write-workload-generator-no-cache-1-cv892-data.log
      drwxrwxrwx. 3 root       root system_u:object_r:container_file_t:s0:c0,c26     30 May 25 06:35 ..
      $ oc exec -it <pod_name> -- ls -latrZ <mount_path>

      以下に例を示します。

      $ oc exec -it cephfs-write-workload-generator-no-cache-1-cv892 -- ls -latrZ /mnt/pv/
      
      total 567
      drwxrwxrwx. 3 root       root system_u:object_r:container_file_t:s0:c26,c5      2 May 25 06:35 .
      -rw-r--r--. 1 1000660000 root system_u:object_r:container_file_t:s0:c26,c5 580138 May 25 06:35 fs_write_cephfs-write-workload-generator-no-cache-1-cv892-data.log
      drwxrwxrwx. 3 root       root system_u:object_r:container_file_t:s0:c26,c5     30 May 25 06:35 ..

      これらの例では、SELinux ラベルが同じではないため、アクセス許可が拒否されたり、アクセスの問題が発生したりすることがわかります。

  9. レガシーアプリケーションと openshift-storage Pod がファイルで同じ SELinux ラベルを使用していることを確認します。

    これは、次のいずれかの方法で実行できます。

  10. NSFS namespace ストアを削除します。

    1. MCG バケットを削除します。

      $ noobaa bucket delete <bucket_name>

      以下に例を示します。

      $ noobaa bucket delete legacy-bucket
    2. MCG ユーザーアカウントを削除します。

      $ noobaa account delete <user_account>

      以下に例を示します。

      $ noobaa account delete leguser
    3. NSFS namespace ストアを削除します。

      $ noobaa namespacestore delete <nsfs_namespacestore>

      以下に例を示します。

      $ noobaa namespacestore delete legacy-namespace
  11. PV と PVC を削除します。

    重要

    PV と PVC を削除する前に、PV に保持ポリシーが設定されていることを確認してください。

    $ oc delete pv <cephfs_pv_name>
    $ oc delete pvc <cephfs_pvc_name>
    <cephfs_pv_name>
    レガシーアプリケーションの CephFS PV 名を指定します。
    <cephfs_pvc_name>

    レガシーアプリケーションの CephFS PVC 名を指定します。

    以下に例を示します。

    $ oc delete pv cephfs-pv-legacy-openshift-storage
    $ oc delete pvc cephfs-pvc-legacy
4.4.3.1. レガシーアプリケーションプロジェクトのデフォルトの SELinux ラベルを、openshift-storage プロジェクトのラベルと一致するように変更します
  1. 現在の openshift-storage namespace を sa.scc.mcs で表示します。

    $ oc get ns openshift-storage -o yaml | grep sa.scc.mcs
    
    openshift.io/sa.scc.mcs: s0:c26,c0
  2. レガシーアプリケーションの namespace を編集し、openshift-storage namespace の sa.scc.mcs の値で sa.scc.mcs を変更します。

    $ oc edit ns <appplication_namespace>

    以下に例を示します。

    $ oc edit ns testnamespace
    $ oc get ns <application_namespace> -o yaml | grep sa.scc.mcs

    以下に例を示します。

    $ oc get ns testnamespace -o yaml | grep sa.scc.mcs
    
    openshift.io/sa.scc.mcs: s0:c26,c0
  3. レガシーアプリケーション Pod を再起動します。すべてのファイルの再ラベル付けが行われ、SELinux ラベルが openshift-storage デプロイメントと一致するようになりました。
4.4.3.2. レガシーアプリケーション PVC をマウントする Pod を持つデプロイメント設定に対してのみ SELinux ラベルを変更する
  1. MustRunAs および seLinuxOptions オプションを使用して、openshift-storage プロジェクトが使用するマルチカテゴリーセキュリティー (MCS) を使用して新しい scc を作成します。

    サンプル YAML ファイル:

    $ cat << EOF >> scc.yaml
    allowHostDirVolumePlugin: false
    allowHostIPC: false
    allowHostNetwork: false
    allowHostPID: false
    allowHostPorts: false
    allowPrivilegeEscalation: true
    allowPrivilegedContainer: false
    allowedCapabilities: null
    apiVersion: security.openshift.io/v1
    defaultAddCapabilities: null
    fsGroup:
      type: MustRunAs
    groups:
    - system:authenticated
    kind: SecurityContextConstraints
    metadata:
      annotations:
      name: restricted-pvselinux
    priority: null
    readOnlyRootFilesystem: false
    requiredDropCapabilities:
    - KILL
    - MKNOD
    - SETUID
    - SETGID
    runAsUser:
      type: MustRunAsRange
    seLinuxContext:
      seLinuxOptions:
        level: s0:c26,c0
      type: MustRunAs
    supplementalGroups:
      type: RunAsAny
    users: []
    volumes:
    - configMap
    - downwardAPI
    - emptyDir
    - persistentVolumeClaim
    - projected
    - secret
    EOF
    $ oc create -f scc.yaml
  2. デプロイメント用のサービスアカウントを作成し、新しく作成した scc に追加します。

    1. サービスアカウントを作成します。

      $ oc create serviceaccount <service_account_name>
      <service_account_name>`

      サービスアカウントの名前を指定します。

      以下に例を示します。

      $ oc create serviceaccount testnamespacesa
    2. 新しく作成した scc にサービスアカウントを追加します。

      $ oc adm policy add-scc-to-user restricted-pvselinux -z <service_account_name>

      以下に例を示します。

      $ oc adm policy add-scc-to-user restricted-pvselinux -z testnamespacesa
  3. 新しく作成されたサービスアカウントを使用するように、レガシーアプリケーションのデプロイメントにパッチを適用します。これにより、デプロイメントで SELinux ラベルを指定できます。

    $ oc patch dc/<pod_name> '{"spec":{"template":{"spec":{"serviceAccountName": "<service_account_name>"}}}}'

    以下に例を示します。

    $ oc patch dc/cephfs-write-workload-generator-no-cache --patch '{"spec":{"template":{"spec":{"serviceAccountName": "testnamespacesa"}}}}'
  4. デプロイメントを編集して、デプロイメント設定の SELinux ラベルで使用するセキュリティーコンテキストを指定します。

    $ oc edit dc <pod_name> -n <application_namespace>

    以下の行を追加します。

    spec:
     template:
        metadata:
          securityContext:
            seLinuxOptions:
              Level: <security_context_value>
    <security_context_value>

    この値は、レガシーアプリケーション Pod の CephFS PV および PVC で、NSFS 共有内に S3 専用のフォルダーを作成するコマンドを実行するときに見つかります。

    以下に例を示します。

    $ oc edit dc cephfs-write-workload-generator-no-cache -n testnamespace
    spec:
     template:
        metadata:
          securityContext:
            seLinuxOptions:
              level: s0:c26,c0
  5. デプロイメント設定の SELinux ラベルで使用されるセキュリティーコンテキストが正しく指定されていることを確認してください。

    $ oc get dc <pod_name> -n <application_namespace> -o yaml | grep -A 2 securityContext

    以下に例を示します。

    $ oc get dc cephfs-write-workload-generator-no-cache -n testnamespace -o yaml | grep -A 2 securityContext
    
          securityContext:
            seLinuxOptions:
              level: s0:c26,c0

    レガシーアプリケーションが再起動され、openshift-storage namespace と同じ SELinux ラベルの使用が開始されます。

第5章 Multicloud Object Gateway のセキュリティー保護

5.1. Multicloud Object Gateway のセキュリティーを強化するために、デフォルトのアカウント資格情報を変更する

コマンドラインインターフェイスを使用して Multicloud Object Gateway (MCG) アカウントの資格情報を変更およびローテーションし、アプリケーションの問題を防ぎ、アカウントのセキュリティーを強化します。

5.1.1. noobaa アカウントパスワードのリセット

前提条件

  • 実行中の OpenShift Data Foundation クラスター。
  • カスタマーポータル から Multicloud Object Gateway (MCG) コマンドラインインターフェイスバイナリーをダウンロードし、実行可能にする。

    注記

    アーキテクチャーに応じて適切な製品バリアントを選択してください。利用可能なプラットフォームは、Linux (x86_64)、Windows、Mac OS です。

手順

  • noobaa アカウントのパスワードをリセットするには、次のコマンドを実行します。

    $ noobaa account passwd <noobaa_account_name> [options]
    $ noobaa account passwd
    FATA[0000] ❌ Missing expected arguments: <noobaa_account_name>
    
    Options:
        --new-password='': New Password for authentication - the best practice is to omit this flag, in that
        case the CLI will prompt to prompt and read it securely from the terminal to avoid leaking secrets in t
         he shell history
        --old-password='': Old Password for authentication - the best practice is to omit this flag, in that
        case the CLI will prompt to prompt and read it securely from the terminal to avoid leaking secrets in
        the shell history
        --retype-new-password='': Retype new Password for authentication - the best practice is to omit this flag, in that case the CLI will prompt to prompt and read it securely from the terminal to avoid
        leaking secrets in the shell history
    
    
    Usage:
        noobaa account passwd <noobaa-account-name> [flags] [options]
    
    Use "noobaa options" for a list of global command-line options (applies to all commands).

    以下に例を示します。

    $ noobaa account passwd admin@noobaa.io

    出力例:

    Enter old-password: [got 24 characters]
    Enter new-password: [got 7 characters]
    Enter retype-new-password: [got 7 characters]
    INFO[0017] ✅ Exists: Secret "noobaa-admin"
    INFO[0017] ✅ Exists: NooBaa "noobaa"
    INFO[0017] ✅ Exists: Service "noobaa-mgmt"
    INFO[0017] ✅ Exists: Secret "noobaa-operator"
    INFO[0017] ✅ Exists: Secret "noobaa-admin"
    INFO[0017] ✈️  RPC: account.reset_password() Request: {Email:admin@noobaa.io VerificationPassword:* Password:*}
    WARN[0017] RPC: GetConnection creating connection to wss://localhost:58460/rpc/ 0xc000402ae0
    INFO[0017] RPC: Connecting websocket (0xc000402ae0) &{RPC:0xc000501a40 Address:wss://localhost:58460/rpc/ State:init WS:<nil> PendingRequests:map[] NextRequestID:0
    Lock:{state:1 sema:0} ReconnectDelay:0s cancelPings:<nil>}
    INFO[0017] RPC: Connected websocket (0xc000402ae0) &{RPC:0xc000501a40 Address:wss://localhost:58460/rpc/ State:init WS:<nil> PendingRequests:map[] NextRequestID:0
    Lock:{state:1 sema:0} ReconnectDelay:0s cancelPings:<nil>}
    INFO[0020] ✅ RPC: account.reset_password() Response OK: took 2907.1ms
    INFO[0020] ✅ Updated:  "noobaa-admin"
    INFO[0020] ✅ Successfully reset the password for the account "admin@noobaa.io"
    重要

    管理者アカウントの資格情報にアクセスするには、端末から noobaa status コマンドを実行します。

    --------------------
    - Mgmt Credentials -
    --------------------
    
    email    : admin@noobaa.io
    password : ***

5.1.2. アカウントの S3 資格情報の再生成

前提条件

  • 実行中の OpenShift Data Foundation クラスター。
  • カスタマーポータル から Multicloud Object Gateway (MCG) コマンドラインインターフェイスバイナリーをダウンロードし、実行可能にする。

    注記

    アーキテクチャーに応じて適切な製品バリアントを選択してください。利用可能なプラットフォームは、Linux (x86_64)、Windows、Mac OS です。

手順

  1. アカウント名を取得します。

    アカウントを一覧表示するには、次のコマンドを実行します。

    $ noobaa account list

    出力例:

    NAME           ALLOWED_BUCKETS   DEFAULT_RESOURCE               PHASE   AGE
    account-test   [*]               noobaa-default-backing-store   Ready   14m17s
    test2          [first.bucket]    noobaa-default-backing-store   Ready   3m12s

    または、ターミナルから oc get noobaaaccount コマンドを実行します。

    $ oc get noobaaaccount

    出力例:

    NAME           PHASE   AGE
    account-test   Ready   15m
    test2          Ready   3m59s
  2. noobaa アカウントの S3 資格情報を再生成するには、次のコマンドを実行します。

    $ noobaa account regenerate <noobaa_account_name> [options]
    $ noobaa account regenerate
    FATA[0000] ❌ Missing expected arguments: <noobaa-account-name>
    
    Usage:
        noobaa account regenerate <noobaa-account-name> [flags] [options]
    
    Use "noobaa options" for a list of global command-line options (applies to all commands).
  3. noobaa account regenerate コマンドを実行すると、"This will invalidate all connections between S3 clients and NooBaa which are connected using the current credentials." という警告がプロンプトされ、確認が求めます。

    以下に例を示します。

    $ noobaa account regenerate account-test

    出力例:

    INFO[0000] You are about to regenerate an account's security credentials.
    INFO[0000] This will invalidate all connections between S3 clients and NooBaa which are connected using the current credentials.
    INFO[0000] are you sure? y/n
  4. 承認すると、資格情報が再生成され、最終的にそれらが出力されます。

    INFO[0015] ✅ Exists: Secret "noobaa-account-account-test"
    Connection info:
    AWS_ACCESS_KEY_ID      : ***
    AWS_SECRET_ACCESS_KEY  : ***

5.1.3. OBC の S3 資格情報の再生成

前提条件

  • 実行中の OpenShift Data Foundation クラスター。
  • カスタマーポータル から Multicloud Object Gateway (MCG) コマンドラインインターフェイスバイナリーをダウンロードし、実行可能にする。

    注記

    アーキテクチャーに応じて適切な製品バリアントを選択してください。利用可能なプラットフォームは、Linux (x86_64)、Windows、Mac OS です。

手順

  1. OBC 名を取得するには、次のコマンドを実行します。

    $ noobaa obc list

    出力例:

    NAMESPACE   NAME       BUCKET-NAME                                     STORAGE-CLASS       BUCKET-CLASS                  PHASE
    default     obc-test   obc-test-35800e50-8978-461f-b7e0-7793080e26ba   default.noobaa.io   noobaa-default-bucket-class   Bound

    または、ターミナルから oc get obc コマンドを実行します。

    $ oc get obc

    出力例:

    NAME       STORAGE-CLASS       PHASE   AGE
    obc-test   default.noobaa.io   Bound   38s
  2. noobaa OBC S3 資格情報を再生成するには、次のコマンドを実行します。

    $ noobaa obc regenerate <bucket_claim_name> [options]
    $ noobaa obc regenerate
    FATA[0000] ❌ Missing expected arguments: <bucket-claim-name>
    
    Usage:
       noobaa obc regenerate <bucket-claim-name> [flags] [options]
    
    Use "noobaa options" for a list of global command-line options (applies to all commands).
  3. noobaa obc regenerate コマンドを実行すると、"This will invalidate all connections between the S3 clients and noobaa which are connected using the current credentials." (これにより、現在の認証情報を使用して接続されている S3 クライアントと noobaa の接続はすべて無効になります) という警告がプロンプトされ、確認が求めます。

    以下に例を示します。

    $ noobaa obc regenerate obc-test

    出力例:

    INFO[0000] You are about to regenerate an OBC's security credentials.
    INFO[0000] This will invalidate all connections between S3 clients and NooBaa which are connected using the current credentials.
    INFO[0000] are you sure? y/n
  4. 承認すると、資格情報が再生成され、最終的にそれらが出力されます。

    INFO[0022] ✅ RPC: bucket.read_bucket() Response OK: took 95.4ms
    
    ObjectBucketClaim info:
      Phase                  : Bound
      ObjectBucketClaim      : kubectl get -n default objectbucketclaim obc-test
      ConfigMap              : kubectl get -n default configmap obc-test
      Secret                 : kubectl get -n default secret obc-test
      ObjectBucket           : kubectl get objectbucket obc-default-obc-test
      StorageClass           : kubectl get storageclass default.noobaa.io
      BucketClass            : kubectl get -n default bucketclass noobaa-default-bucket-class
    
    Connection info:
     BUCKET_HOST            : s3.default.svc
     BUCKET_NAME            : obc-test-35800e50-8978-461f-b7e0-7793080e26ba
        BUCKET_PORT            : 443
        AWS_ACCESS_KEY_ID      : ***
        AWS_SECRET_ACCESS_KEY  : ***
    
    Shell commands:
      AWS S3 Alias           : alias s3='AWS_ACCESS_KEY_ID=***
    AWS_SECRET_ACCESS_KEY=*** aws s3 --no-verify-ssl --endpoint-url ***'
    
    Bucket status:
      Name                   : obc-test-35800e50-8978-461f-b7e0-7793080e26ba
      Type                   : REGULAR
      Mode                   : OPTIMAL
      ResiliencyStatus       : OPTIMAL
      QuotaStatus            : QUOTA_NOT_SET
      Num Objects            : 0
      Data Size              : 0.000 B
      Data Size Reduced      : 0.000 B
      Data Space Avail       : 13.261 GB
      Num Objects Avail      : 9007199254740991

5.2. Multicloud Object Gateway のセキュアなモードデプロイメントの有効化

Multicloud Object Gateway (MCG) ロードバランサーサービスに到達できるようにする必要のある IP アドレスの範囲を指定して、セキュアなモードデプロイメントを有効にすることができます。これは、MCG サービスにアクセスできる IP アドレスを制御するのに役立ちます。

注記

コマンドラインインターフェイスを使用して OpenShift Data Foundation のデプロイ中に、storagecluster カスタムリソース定義 (CRD) に disableLoadBalancerService 変数を設定して MCG ロードバランサーの使用を無効にできます。これは、MCG がプライベートクラスター用のパブリックリソースを作成することを制限し、MCG サービス EXTERNAL-IP を無効にするのに役立ちます。詳細は、Red Hat ナレッジベースの記事 Install Red Hat OpenShift Data Foundation 4.X in internal mode using command line interface を参照してください。OpenShift Data Foundation のデプロイ後に MCG ロードバランサーサービスを無効にする方法については、OpenShift Data Foundation のデプロイ後の Multicloud Object Gateway 外部サービスの無効化 を参照してください。

前提条件

  • 実行中の OpenShift Data Foundation クラスター。
  • ベアメタルのデプロイメントの場合、ロードバランサーコントローラーが Kubernetes サービスの loadBalancerSourceRanges 属性の設定をサポートすることを確認します。

手順

  • NooBaa カスタムリソース (CR) を編集して、OpenShift Data Foundation のデプロイ後に MCG サービスにアクセスできる IP アドレスの範囲を指定します。

    $ oc edit noobaa -n openshift-storage noobaa
    noobaa
    NooBaa システムのデプロイメントを制御する NooBaa CR タイプ。
    noobaa

    NooBaa CR の名前。

    以下に例を示します。

    ...
    spec:
      ...
      loadBalancerSourceSubnets:
        s3: ["10.0.0.0/16", "192.168.10.0/32"]
        sts:
          - "10.0.0.0/16"
          - "192.168.10.0/32"
    ...
    loadBalancerSourceSubnets

    NooBaa CR の spec の下に追加できる新しいフィールドです。NooBaa サービスにアクセスできる IP アドレスを指定します。

    この例では、サブネット 10.0.0.0/16 または 192.168.10.0/32 にあるすべての IP アドレスは、MCG S3 およびセキュリティートークンサービス (STS) にアクセスできますが、他の IP アドレスはアクセスできません。

検証手順

  • 指定された IP アドレスが設定されているかどうかを確認するには、OpenShift Web コンソールで以下のコマンドを実行し、出力が MCG に提供される IP アドレスと一致するかどうかを確認します。

    $ oc get svc -n openshift-storage <s3 | sts> -o=go-template='{{ .spec.loadBalancerSourceRanges }}'

第6章 ハイブリッドおよびマルチクラウドバケットのデータのミラーリング

Multicloud Object Gateway (MCG) の簡素化されたプロセスを使用して、クラウドプロバイダーとクラスター全体にデータを広げることができます。データ管理ポリシーとミラーリングを反映するバケットクラスを作成する前に、MCG で使用できるバッキングストレージを追加する必要があります。詳細は、第 4 章 3章ハイブリッドまたはマルチクラウド用のストレージリソースの追加 を参照してください。

OpenShift UI、YAML、または MCG コマンドラインインターフェイスを使用して、ミラーリングデータを設定できます。

以下のセクションを参照してください。

6.1. MCG コマンドラインインターフェイスを使用したデータのミラーリング用のバケットクラスの作成

前提条件

  • Multicloud Object Gateway (MCG) コマンドラインインターフェイスを必ずダウンロードしてください。

手順

  1. Multicloud Object Gateway (MCG) コマンドラインインターフェイスから以下のコマンドを実行し、ミラーリングポリシーでバケットクラスを作成します。

    $ noobaa bucketclass create placement-bucketclass mirror-to-aws --backingstores=azure-resource,aws-resource --placement Mirror
  2. 新たに作成されたバケットクラスを新規のバケット要求に設定し、2 つのロケーション間でミラーリングされる新規バケットを生成します。

    $ noobaa obc create  mirrored-bucket --bucketclass=mirror-to-aws

6.2. YAML を使用したデータのミラーリング用のバケットクラスの作成

  1. 以下の YAML を適用します。この YAML は、ローカル Ceph ストレージと AWS 間でデータをミラーリングするハイブリッドの例です。

    apiVersion: noobaa.io/v1alpha1
    kind: BucketClass
    metadata:
      labels:
        app: noobaa
      name: <bucket-class-name>
      namespace: openshift-storage
    spec:
      placementPolicy:
        tiers:
        - backingStores:
          - <backing-store-1>
          - <backing-store-2>
          placement: Mirror
  2. 以下の行を標準の Object Bucket Claim (OBC) に追加します。

    additionalConfig:
      bucketclass: mirror-to-aws

    OBC の詳細は、9章Object Bucket Claim を参照してください。

第7章 Multicloud Object Gateway のバケットポリシー

OpenShift Data Foundation は AWS S3 バケットポリシーをサポートします。バケットポリシーにより、ユーザーにバケットとそれらのオブジェクトのアクセスパーミッションを付与することができます。

7.1. バケットポリシーの概要

バケットポリシーは、AWS S3 バケットおよびオブジェクトにパーミッションを付与するために利用できるアクセスポリシーオプションです。バケットポリシーは JSON ベースのアクセスポリシー言語を使用します。アクセスポリシー言語の詳細は、AWS Access Policy Language Overview を参照してください。

7.2. Multicloud Object Gateway でのバケットポリシーの使用

前提条件

手順

MCG でバケットポリシーを使用するには、以下を実行します。

  1. JSON 形式でバケットポリシーを作成します。

    以下に例を示します。

    {
        "Version": "NewVersion",
        "Statement": [
            {
                "Sid": "Example",
                "Effect": "Allow",
                "Principal": [
                        "john.doe@example.com"
                ],
                "Action": [
                    "s3:GetObject"
                ],
                "Resource": [
                    "arn:aws:s3:::john_bucket"
                ]
            }
        ]
    }

    john.doe@example.com は、有効な Multicloud Object Gateway ユーザーアカウントに置き換えます。

  2. AWS S3 クライアントを使用して put-bucket-policy コマンドを使用してバケットポリシーを S3 バケットに適用します。

    # aws --endpoint ENDPOINT --no-verify-ssl s3api put-bucket-policy --bucket MyBucket --policy file://BucketPolicy
    1. ENDPOINT を S3 エンドポイントに置き換えます。
    2. MyBucket を、ポリシーを設定するバケットに置き換えます。
    3. BucketPolicy をバケットポリシー JSON ファイルに置き換えます。
    4. デフォルトの自己署名証明書を使用している場合は、--no-verify-ssl を追加します。

      以下に例を示します。

      # aws --endpoint https://s3-openshift-storage.apps.gogo44.noobaa.org --no-verify-ssl s3api put-bucket-policy -bucket MyBucket --policy file://BucketPolicy

      put-bucket-policy コマンドの詳細は、AWS CLI Command Reference for put-bucket-policy を参照してください。

      注記

      主となる要素では、リソース (バケットなど) へのアクセスを許可または拒否されるユーザーを指定します。現在、NooBaa アカウントのみがプリンシパルとして使用できます。Object Bucket Claim (オブジェクトバケット要求) の場合、NooBaa はアカウント obc-account.<generated bucket name>@noobaa.io を自動的に作成します。

      注記

      バケットポリシー条件はサポートされていません。

関連情報

  • アクセスパーミッションに関して、バケットポリシーには数多くの利用可能な要素があります。
  • これらの要素の詳細と、それらを使用してアクセスパーミッションを制御する方法の例は、AWS Access Policy Language Overview を参照してください。
  • バケットポリシーの他の例については、AWS Bucket Policy Examples を参照してください。
  • OpenShift Data Foundation バージョン 4.16 で、バケットポリシー要素 NotPrincipalNotActionNotResource が導入されました。これらの要素の詳細は、IAM JSON policy elements reference を参照してください。

7.3. Multicloud Object Gateway でのユーザーの作成

前提条件

  • 実行中の OpenShift Data Foundation Platform。
  • カスタマーポータル から Multicloud Object Gateway (MCG) コマンドラインインターフェイスバイナリーをダウンロードし、実行可能にする。

    注記

    アーキテクチャーに応じて適切な製品バリアントを選択してください。利用可能なプラットフォームは、Linux (x86_64)、Windows、Mac OS です。

手順

次のコマンドを実行して、MCG ユーザーアカウントを作成します。

noobaa account create <noobaa-account-name> [--allow_bucket_create=true] [--allowed_buckets=[]] [--default_resource=''] [--full_permission=false]
<noobaa-account-name>
新しい MCG ユーザーアカウントの名前を指定します。
--allow_bucket_create
ユーザーが新しいバケットを作成できるようにします。
--allowed_buckets
ユーザーの許可されたバケットリストを設定します (コンマまたは複数のフラグを使用)。
--default_resource
デフォルトのリソースを設定します。新しいバケットは、このデフォルトのリソース (将来のリソースを含む) で作成されます。
--full_permission
このアカウントが既存および将来のすべてのバケットにアクセスできるようにします。
重要

少なくとも 1 つのバケットにアクセスするためのアクセス許可、またはすべてのバケットにアクセスするための完全なアクセス許可を提供する必要があります。

第8章 Multicloud Object Gateway バケットレプリケーション

1 つの Multicloud Object Gateway (MCG) バケットから別の MCG バケットへのデータをレプリケートすると、回復力が高まり、コラボレーションの選択肢が広がります。これらのバケットは、サポートされているストレージソリューション (AWS S3、Azure など) を基盤とするデータバケットまたは namespace バケットのいずれかです。

レプリケーションポリシーは、レプリケーションルールのリストで構成されます。各ルールは宛先バケットを定義し、オブジェクトキーの接頭辞に基づいてフィルターを指定できます。2 番目のバケットで補完的なレプリケーションポリシーを設定すると、双方向レプリケーションが実行されます。

前提条件

  • 実行中の OpenShift Data Foundation Platform。
  • カスタマーポータル から Multicloud Object Gateway (MCG) コマンドラインインターフェイスバイナリーをダウンロードし、実行可能にする。

    注記

    アーキテクチャーに応じて適切な製品バリアントを選択してください。利用可能なプラットフォームは、Linux (x86_64)、Windows、Mac OS です。

バケットを複製するには、バケットの別のバケットへの複製 を参照してください。

バケットクラスレプリケーションポリシーを設定するには、バケットクラスのレプリケーションポリシーの設定 を参照してください。

8.1. バケットの別のバケットへの複製

バケットレプリケーションポリシーは、次の 2 つの方法で設定できます。

8.1.1. MCG コマンドラインインターフェイスを使用してバケットの別のバケットへの複製

Object Bucket Claim (OBC) の作成時に、Multicloud Object Gateway (MCG) データバケットのレプリケーションポリシーを設定できます。JSON ファイルでレプリケーションポリシーパラメーターを定義する必要があります。

手順

MCG コマンドラインインターフェイスから以下のコマンドを実行し、特定のレプリケーションポリシーで OBC を作成します。

noobaa obc create <bucket-claim-name> -n openshift-storage --replication-policy /path/to/json-file.json
<bucket-claim-name>
バケットクレームの名前を指定します。
/path/to/json-file.json
レプリケーションポリシーを定義する JSON ファイルへのパスです。

JSON ファイルの例:

[{ "rule_id": "rule-1", "destination_bucket": "first.bucket", "filter": {"prefix": "repl"}}]
"prefix"
オプション。複製する必要があるのはオブジェクトキーの接頭辞であり、たとえば {"prefix": ""} のように、空のままにすることもできます。

以下に例を示します。

noobaa obc create my-bucket-claim -n openshift-storage --replication-policy /path/to/json-file.json

8.1.2. YAML を使用してバケットを別のバケットに複製

Object Bucket Claim (OBC) の作成時に、Multicloud Object Gateway (MCG) データバケットのレプリケーションポリシーを設定することも、YAML を後で編集することもできます。ポリシーは、次の手順に示す形式に準拠した JSON 準拠の文字列として指定する必要があります。

手順

  • 以下の YAML を適用します。

    apiVersion: objectbucket.io/v1alpha1
    kind: ObjectBucketClaim
    metadata:
      name: <desired-bucket-claim>
      namespace: <desired-namespace>
    spec:
      generateBucketName: <desired-bucket-name>
      storageClassName: openshift-storage.noobaa.io
      additionalConfig:
        replicationPolicy: {"rules": [{ "rule_id": "", "destination_bucket": "", "filter": {"prefix": ""}}]}
    <desired-bucket-claim>
    バケットクレームの名前を指定します。
    <desired-namespace>
    namespace を指定します。
    <desired-bucket-name>
    バケット名の接頭辞を指定します。
    "rule_id"
    ルールの ID 番号を指定します (例: {"rule_id": "rule-1"})。
    "destination_bucket"
    宛先バケットの名前を指定します (例: {"destination_bucket": "first.bucket"})。
    "prefix"
    オプション。複製する必要があるのはオブジェクトキーの接頭辞であり、たとえば {"prefix": ""} のように、空のままにすることもできます。

関連情報

8.2. バケットクラスのレプリケーションポリシーの設定

特定のバケットクラスで作成されたすべてのバケットに自動的に適用されるレプリケーションポリシーを設定することができます。これは、以下の 2 つの方法で実行できます。

8.2.1. MCG コマンドラインインターフェイスを使用したバケットクラスのレプリケーションポリシーの設定

バケットクラスの作成時に、Multicloud Object Gateway (MCG) データバケットのレプリケーションポリシーを設定できます。JSON ファイルで replication-policy パラメーターを定義する必要があります。配置バケットクラスと namespace バケットクラスのバケットクラスレプリケーションポリシーを設定できます。

配置バケットクラスと namespace バケットクラスのバケットクラスレプリケーションポリシーを設定できます。

手順

  • MCG コマンドラインインターフェイスから、以下のコマンドを実行します。

    noobaa -n openshift-storage bucketclass create placement-bucketclass <bucketclass-name> --backingstores <backingstores> --replication-policy=/path/to/json-file.json
    <bucketclass-name>
    バケットクラスの名前を指定します。
    <backingstores>
    バッキングストアの名前を指定します。コンマで区切って多数のバッキングストアを渡すことができます。
    /path/to/json-file.json

    レプリケーションポリシーを定義する JSON ファイルへのパスです。

    JSON ファイルの例:

    [{ "rule_id": "rule-1", "destination_bucket": "first.bucket", "filter": {"prefix": "repl"}}]
    "prefix"

    オプション。オブジェクトキーの接頭辞が複製されます。{"prefix": ""} など、空のままにすることができます。

    以下に例を示します。

    noobaa -n openshift-storage bucketclass create placement-bucketclass bc --backingstores azure-blob-ns --replication-policy=/path/to/json-file.json

    この例では、JSON ファイルで定義された特定のレプリケーションポリシーを使用して配置バケットクラスを作成します。

8.2.2. YAML を使用したバケットクラスのレプリケーションポリシーの設定

バケットクラスの作成時に、Multicloud Object Gateway (MCG) データバケットのレプリケーションポリシーを設定することも、YAML を後で編集することもできます。ポリシーは、次の手順に示す形式に準拠した JSON 準拠の文字列として指定する必要があります。

手順

  1. 以下の YAML を適用します。

    apiVersion: noobaa.io/v1alpha1
    kind: BucketClass
    metadata:
      labels:
        app: <desired-app-label>
      name: <desired-bucketclass-name>
      namespace: <desired-namespace>
    spec:
      placementPolicy:
        tiers:
        - backingstores:
          - <backingstore>
          placement: Spread
      replicationPolicy: [{ "rule_id": "<rule id>", "destination_bucket": "first.bucket", "filter": {"prefix": "<object name prefix>"}}]

    この YAML は、配置バケットクラスを作成する例です。バケットにアップロードされた各オブジェクトバケットクレーム (OBC) オブジェクトは、接頭辞に基づいてフィルタリングされ、first.bucket に複製されます。

    <desired-app-label>
    アプリのラベルを指定します。
    <desired-bucketclass-name>
    バケットクラス名を指定します。
    <desired-namespace>
    バケットクラスが作成される namespace を指定します。
    <backingstore>
    バッキングストアの名前を指定します。多くのバッキングストアを渡すことができます。
    "rule_id"
    ルールの ID 番号を指定します (例: `{"rule_id": "rule-1"})。
    "destination_bucket"
    宛先バケットの名前を指定します (例: {"destination_bucket": "first.bucket"})。
    "prefix"
    オプション。オブジェクトキーの接頭辞が複製されます。{"prefix": ""} など、空のままにすることができます。

8.3. ログベースのバケットレプリケーションの有効化

バケットレプリケーションポリシーを作成すると、デフォルトのスキャンベースの複製が残りのデータを複製している間に、最新のデータを素早く複製してログを使用できます。

重要

この機能には、AWS または Azure でバケットログを設定する必要があります。AWS ログの設定に関する詳細は、Amazon S3 サーバーアクセスロギングの有効化 を参照してください。AWS ログバケットは、ソース NamespaceStore AWS バケットと同じリージョンに作成する必要があります。

注記

この機能は、NamespaceStore によってサポートされているバケットでのみサポートされます。BackingStore によってバックアップされるバケットでは、ログベースのレプリケーションを利用できません。

8.3.1. Amazon Web Service 環境での OpenShift Web コンソールを使用した新規 namespace バケットのログベースのバケットレプリケーションの有効化

アマゾンウェブサービス (AWS) クラウド環境のイベントログを利用してレプリケーションを最適化できます。namespace バケットの作成時に Web コンソールを使用して新規 namespace バケットのログベースのバケットレプリケーションを有効にします。

前提条件

  • AWS でオブジェクトのログ記録が有効になっていることを確認します。詳細は、Enabling Amazon S3 server access logging の “Using the S3 console” セクションを参照してください。
  • OpenShift Web コンソールへの管理者アクセス。

手順

  1. OpenShift Web コンソールで、StorageObject StorageObject Bucket Claims に移動します。
  2. Create ObjectBucketClaim をクリックします。
  3. ObjectBucketName の名前を入力し、StorageClass および BucketClass を選択します。
  4. Enable replication チェックボックスを選択して、レプリケーションを有効にします。
  5. Replication policy セクションで、Optimize replication using event logs チェックボックスをオンにします。
  6. Event log Bucket の下にログが含まれるバケットの名前を入力します。

    ログがバケットのルートに保存されていない場合は、s3:// なしで完全パスを指定します。

  7. 接頭辞を入力すると、名前が指定された接頭辞で始まるオブジェクトのみが複製されます。

8.3.2. YAML を使用した既存の namespace バケットのログベースのバケットレプリケーションの有効化

ログベースのバケットレプリケーションは、AWS S3 コマンドを使用して作成されたバケットではなく、コマンドラインインターフェイスを使用して作成された既存のバケット、または YAML を適用して作成された既存のバケットに対して有効にすることができます。

手順

  • バケットの OBC の YAML を編集して、ログベースのバケットレプリケーションを有効にします。以下を spec の下に追加します。

    replicationPolicy: '{"rules":[{"rule_id":"<RULE ID>", "destination_bucket":"<DEST>", "filter": {"prefix": "<PREFIX>"}}], "log_replication_info": {"logs_location": {"logs_bucket": "<LOGS_BUCKET>"}}}'
注記

OBC を作成する前に、OBC の YAML に追加することもできます。

rule_id
ルールを識別するための任意の ID を指定します。
destination_bucket
オブジェクトのコピー先となるターゲット MCG バケットの名前を指定します
(オプション) {"filter": {"prefix": <>}}
レプリケートされるオブジェクトをフィルタリングするために設定できる接頭辞文字列を指定します。
log_replication_info
ログベースのレプリケーション最適化に関連するデータを含むオブジェクトを指定します。{"logs_location": {"logs_bucket": <>}} は、AWS S3 サーバーのアクセスログの場所に設定されます。

8.3.3. Microsoft Azure でのログベースのバケットレプリケーションの有効化

前提条件

  • Microsoft Azure ドキュメントを参照し、Microsoft Azure ポータルで次のタスクを完了している。

    1. 新しいアプリケーションを作成し、名前、アプリケーション (クライアント) ID、およびディレクトリー (テナント) ID を書き留めていることを確認します。

      詳細は、Register an application を参照してください。

    2. 新しいクライアントシークレットが作成され、アプリケーションシークレットが書き留められていることを確認します。
    3. 新しい Log Analytics ワークスペースが作成され、その名前とワークスペース ID が表示されていることを確認します。

      詳細は、Create a Log Analytics workspace を参照してください。

    4. Access controlReader ロールが割り当てられていること、メンバーが選択されていること、および前の手順で登録したアプリケーションの名前が指定されていることを確認します。

      詳細は、Assign Azure roles using the Azure portal を参照してください。

    5. 新しいストレージアカウントが作成され、アクセスキーが表示されていることを確認します。
    6. 作成したストレージアカウントの Monitoring セクションで Blob を選択し、Diagnostic settings 画面で StorageWriteStorageDelete のみを選択して、前に作成した Log Analytics ワークスペースを宛先の詳細に追加します。作成したストレージアカウントの Monitoring セクションの Diagnostic settings 画面で Blob が選択されていることを確認します。また、StorageWriteStorageDelete のみが選択されていることを確認し、宛先の詳細に、前に作成した Log Analytics ワークスペースが追加されていることを確認します。

      詳細は、Diagnostic settings in Azure Monitor を参照してください。

    7. オブジェクトソースおよびオブジェクトの宛先に 2 つの新規コンテナーが作成されていることを確認します。
  • OpenShift Web コンソールへの管理者アクセス。

手順

  1. namespacestores で使用される認証情報を含むシークレットを作成します。

    apiVersion: v1
    kind: Secret
    metadata:
      name: <namespacestore-secret-name>
    type: Opaque
    data:
        TenantID: <AZURE TENANT ID ENCODED IN BASE64>
        ApplicationID: <AZURE APPLICATIOM ID ENCODED IN BASE64>
        ApplicationSecret: <AZURE APPLICATION SECRET ENCODED IN BASE64>
        LogsAnalyticsWorkspaceID: <AZURE LOG ANALYTICS WORKSPACE ID ENCODED IN BASE64>
        AccountName: <AZURE ACCOUNT NAME ENCODED IN BASE64>
        AccountKey: <AZURE ACCOUNT KEY ENCODED IN BASE64>
  2. Azure で作成したコンテナーを基盤とする NamespaceStore を作成します。

    詳細は、OpenShift Container Platform ユーザーインターフェイスを使用した namespace バケットの追加 を参照してください。

  3. これを使用する新規の Namespace-Bucketclass および OBC を作成します。
  4. ターゲット OBC の YAML を調べるか、すべての S3 バケット (例: - s3 ls) をリストして、オブジェクトバケット名を確認します。
  5. 次のテンプレートを使用し、.spec の下の YAML に次の内容を追加して、ソース OBC に Azure レプリケーションポリシーを適用します。

    replicationPolicy:'{"rules":[ {"rule_id":"ID goes here", "sync_deletions": "<true or false>"", "destination_bucket":object bucket name"}
     ], "log_replication_info":{"endpoint_type":"AZURE"}}'
    sync_deletion
    ブール値 true または false を指定します。
    destination_bucket
    要求ではなく、オブジェクトバケットの名前を使用するようにしてください。この名前は、s3 ls コマンドを使用するか、OBC の YAML での値を検索して取得できます。

検証手順

  1. オブジェクトをソースバケットに書き込みます。
  2. MCG が複製するまで待ちます。
  3. ソースバケットからオブジェクトを削除します。
  4. オブジェクトがターゲットバケットから削除されたことを確認します。

8.3.4. ログベースのバケットレプリケーション削除の有効化

前提条件

  • OpenShift Web コンソールへの管理者アクセス。
  • 目的のバケットに対して設定された AWS サーバーアクセスログ。

手順

  1. OpenShift Web コンソールで、StorageObject StorageObject Bucket Claims に移動します。
  2. Create new Object bucket claim をクリックします。
  3. (任意) Replication rules セクションで、各ルールの Sync deletion チェックボックスを個別に選択します。
  4. Event log Bucket の下にログが含まれるバケットの名前を入力します。

    ログがバケットのルートに保存されていない場合は、s3:// なしで完全パスを指定します。

  5. 接頭辞を入力すると、名前が指定された接頭辞で始まるオブジェクトのみが複製されます。

8.4. Multicloud Object Gateway のバケットロギングの有効化 [テクノロジープレビュー]

バケットロギングは、コンプライアンス、監査、最適化の目的で、Multicloud Object Gateway (MCG) バケットに対して実行された S3 操作を記録するのに役立ちます。

重要

テクノロジープレビュー機能は、近々発表予定の製品イノベーションをリリースに先駆けてご提供することにより、お客様は機能性をテストし、開発プロセス中にフィードバックをお寄せいただくことができます。ただし、この機能は Red Hat のサービスレベルアグリーメントで完全にサポートされていないため、機能的に完全でない可能性があり、実稼働環境での使用を目的としていません。Red Hat ではテクノロジープレビュー機能を今後も繰り返し使用することで一般提供に移行できると考えていることから、お客様がこの機能を使用する際に発生する問題の解決に取り組みます。

詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。

前提条件

手順

  1. オブジェクトをアップロードできるデータバケットを作成します。

    nb bucket create data.bucket
  2. 次のコマンドを使用して、バケット操作のログを保存するログバケットを作成します。

    nb bucket create log.bucket
  3. ログバケットを使用してデータバケットにバケットロギングを設定します。

    nb api bucket_api put_bucket_logging '{
       "name": "data.bucket",
       "log_bucket": "log.bucket",
       "log_prefix": "data-bucket-logs"
    }'
  4. データバケットにバケットロギングが設定されているかどうかを確認します。

    nb api bucket_api get_bucket_logging '{
       "name": "data.bucket"
    }'

    S3 操作がログバケットに記録されるまでに最大 24 時間かかる場合があります。次の例は、記録されたログとそのダウンロード方法を示しています。

    s3_alias cp s3://logs.bucket/data-bucket-logs/logs.bucket.bucket_data-bucket-logs_1719230150.log - | tail -n 2
    
    Jun 24 14:00:02 10-XXX-X-XXX.sts.openshift-storage.svc.cluster.local  {"noobaa_bucket_logging":"true","op":"GET","bucket_owner":"operator@noobaa.io","source_bucket":"data.bucket","object_key":"/data.bucket?list-type=2&prefix=data-bucket-logs&delimiter=%2F&encoding-type=url","log_bucket":"logs.bucket","remote_ip":"100.XX.X.X","request_uri":"/data.bucket?list-type=2&prefix=data-bucket-logs&delimiter=%2F&encoding-type=url","request_id":"luv2XXXX-ctyg2k-12gs"} Jun 24 14:00:06 10-XXX-X-XXX.s3.openshift-storage.svc.cluster.local  {"noobaa_bucket_logging":"true","op":"PUT","bucket_owner":"operator@noobaa.io","source_bucket":"data.bucket","object_key":"/data.bucket/B69EC83F-0177-44D8-A8D1-4A10C5A5AB0F.file","log_bucket":"logs.bucket","remote_ip":"100.XX.X.X","request_uri":"/data.bucket/B69EC83F-0177-44D8-A8D1-4A10C5A5AB0F.file","request_id":"luv2XXXX-9syea5-x5z"}

  5. (オプション) バケットロギングを無効にするには、次のコマンドを使用します。

    nb api bucket_api delete_bucket_logging '{
       "name": "data.bucket"
    }'

第9章 Object Bucket Claim

Object Bucket Claim(オブジェクトバケット要求) は、ワークロードの S3 と互換性のあるバケットバックエンドを要求するために使用できます。

Object Bucket Claim(オブジェクトバケット要求) は 3 つの方法で作成できます。

Object Bucket Claim (オブジェクトバケット要求) は、新しいアクセスキーおよびシークレットアクセスキーを含む、バケットのパーミッションのある NooBaa の新しいバケットとアプリケーションアカウントを作成します。アプリケーションアカウントは単一バケットにのみアクセスでき、デフォルトで新しいバケットを作成することはできません。

9.1. 動的 Object Bucket Claim(オブジェクトバケット要求)

永続ボリュームと同様に、Object Bucket Claim (OBC) の詳細をアプリケーションの YAML に追加し、config map およびシークレットで利用可能なオブジェクトサービスエンドポイント、アクセスキー、およびシークレットアクセスキーを取得できます。この情報をアプリケーションの環境変数に動的に読み込むことは容易に実行できます。

注記

Multicloud Object Gateway エンドポイントは、OpenShift が自己署名証明書を使用する場合にのみ、自己署名証明書を使用します。OpenShift で署名付き証明書を使用すると、Multicloud Object Gateway エンドポイント証明書が署名付き証明書に自動的に置き換えられます。ブラウザーを介してエンドポイントにアクセスし、Multicloud Object Gateway で現在使用されている証明書を取得します。詳細は、アプリケーションの使用による Multicloud Object Gateway へのアクセス を参照してください。

手順

  1. 以下の行をアプリケーション YAML に追加します。

    apiVersion: objectbucket.io/v1alpha1
    kind: ObjectBucketClaim
    metadata:
      name: <obc-name>
    spec:
      generateBucketName: <obc-bucket-name>
      storageClassName: openshift-storage.noobaa.io

    これらの行は OBC 自体になります。

    1. <obc-name> を、一意の OBC の名前に置き換えます。
    2. <obc-bucket-name> を、OBC の一意のバケット名に置き換えます。
  2. YAML ファイルにさらに行を追加して、OBC の使用を自動化します。

    以下に例を示します。

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: testjob
    spec:
      template:
        spec:
          restartPolicy: OnFailure
          containers:
            - image: <your application image>
              name: test
              env:
                - name: BUCKET_NAME
                  valueFrom:
                    configMapKeyRef:
                      name: <obc-name>
                      key: BUCKET_NAME
                - name: BUCKET_HOST
                  valueFrom:
                    configMapKeyRef:
                      name: <obc-name>
                      key: BUCKET_HOST
                - name: BUCKET_PORT
                  valueFrom:
                    configMapKeyRef:
                      name: <obc-name>
                      key: BUCKET_PORT
                - name: AWS_ACCESS_KEY_ID
                  valueFrom:
                    secretKeyRef:
                      name: <obc-name>
                      key: AWS_ACCESS_KEY_ID
                - name: AWS_SECRET_ACCESS_KEY
                  valueFrom:
                    secretKeyRef:
                      name: <obc-name>
                      key: AWS_SECRET_ACCESS_KEY

    以下は、バケット要求の結果のマッピングの例になります。これは、データを含む config map および認証情報を含むシークレットです。この特定のジョブは NooBaa からオブジェクトバケットを要求し、バケットとアカウントを作成します。

    1. <obc-name> のすべてのインスタンスを、OBC の名前に置き換えます。
    2. <your application image> をアプリケーションイメージに置き換えます。
  3. 更新された YAML ファイルを適用します。

    # oc apply -f <yaml.file>

    <yaml.file> を YAML ファイルの名前に置き換えます。

  4. 新しい config map を表示するには、以下を実行します。

    # oc get cm <obc-name> -o yaml

    obc-name を OBC の名前に置き換えます。

    出力には、以下の環境変数が表示されることが予想されます。

    • BUCKET_HOST: アプリケーションで使用するエンドポイント
    • BUCKET_PORT: アプリケーションで利用できるポート

      • ポートは BUCKET_HOST に関連します。たとえば、BUCKET_HOSThttps://my.example.com で、BUCKET_PORT が 443 の場合、オブジェクトサービスのエンドポイントは https://my.example.com:443 になります。
    • BUCKET_NAME: 要求されるか、生成されるバケット名
    • AWS_ACCESS_KEY_ID: 認証情報の一部であるアクセスキー
    • AWS_SECRET_ACCESS_KEY: 認証情報の一部であるシークレットのアクセスキー
重要

AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY を取得します。名前は、AWS S3 と互換性があるように使用されます。S3 操作の実行中、特に Multicloud Object Gateway (MCG) バケットから読み取り、書き込み、またはリスト表示する場合は、キーを指定する必要があります。キーは Base64 でエンコードされています。キーを使用する前に、キーをデコードしてください。

# oc get secret <obc_name> -o yaml
<obc_name>
オブジェクトバケットクレームの名前を指定します。

9.2. コマンドラインインターフェイスを使用した Object Bucket Claim(オブジェクトバケット要求) の作成

コマンドラインインターフェイスを使用して Object Bucket Claim (OBC) を作成する場合、config map とシークレットを取得します。これらには、アプリケーションがオブジェクトストレージサービスを使用するために必要なすべての情報が含まれます。

前提条件

  • カスタマーポータル から Multicloud Object Gateway (MCG) コマンドラインインターフェイスバイナリーをダウンロードし、実行可能にする。

    注記

    アーキテクチャーに応じて適切な製品バリアントを選択してください。利用可能なプラットフォームは、Linux (x86_64)、Windows、Mac OS です。

手順

  1. コマンドラインインターフェイスを使用して、新規バケットおよび認証情報の詳細を生成します。

    以下のコマンドを実行します。

    # noobaa obc create <obc-name> -n openshift-storage

    <obc-name> を一意の OBC 名に置き換えます (例: myappobc)。

    さらに、--app-namespace オプションを使用して、OBC config map およびシークレットが作成される namespace を指定できます (例: myapp-namespace)。

    以下に例を示します。

    INFO[0001] ✅ Created: ObjectBucketClaim "test21obc"

    MCG コマンドラインインターフェイスが必要な設定を作成し、新規 OBC について OpenShift に通知します。

  2. 以下のコマンドを実行して OBC を表示します。

    # oc get obc -n openshift-storage

    以下に例を示します。

    NAME        STORAGE-CLASS                 PHASE   AGE
    test21obc   openshift-storage.noobaa.io   Bound   38s
  3. 以下のコマンドを実行して、新規 OBC の YAML ファイルを表示します。

    # oc get obc test21obc -o yaml -n openshift-storage

    以下に例を示します。

    apiVersion: objectbucket.io/v1alpha1
    kind: ObjectBucketClaim
    metadata:
      creationTimestamp: "2019-10-24T13:30:07Z"
      finalizers:
      - objectbucket.io/finalizer
      generation: 2
      labels:
        app: noobaa
        bucket-provisioner: openshift-storage.noobaa.io-obc
        noobaa-domain: openshift-storage.noobaa.io
      name: test21obc
      namespace: openshift-storage
      resourceVersion: "40756"
      selfLink: /apis/objectbucket.io/v1alpha1/namespaces/openshift-storage/objectbucketclaims/test21obc
      uid: 64f04cba-f662-11e9-bc3c-0295250841af
    spec:
      ObjectBucketName: obc-openshift-storage-test21obc
      bucketName: test21obc-933348a6-e267-4f82-82f1-e59bf4fe3bb4
      generateBucketName: test21obc
      storageClassName: openshift-storage.noobaa.io
    status:
      phase: Bound
  4. openshift-storage namespace 内で、config map およびシークレットを見つけ、この OBC を使用することができます。CM とシークレットの名前はこの OBC の名前と同じです。

    以下のコマンドを実行してシークレットを表示します。

    # oc get -n openshift-storage secret test21obc -o yaml

    以下に例を示します。

    apiVersion: v1
    data:
      AWS_ACCESS_KEY_ID: c0M0R2xVanF3ODR3bHBkVW94cmY=
      AWS_SECRET_ACCESS_KEY: Wi9kcFluSWxHRzlWaFlzNk1hc0xma2JXcjM1MVhqa051SlBleXpmOQ==
    kind: Secret
    metadata:
      creationTimestamp: "2019-10-24T13:30:07Z"
      finalizers:
      - objectbucket.io/finalizer
      labels:
        app: noobaa
        bucket-provisioner: openshift-storage.noobaa.io-obc
        noobaa-domain: openshift-storage.noobaa.io
      name: test21obc
      namespace: openshift-storage
      ownerReferences:
      - apiVersion: objectbucket.io/v1alpha1
        blockOwnerDeletion: true
        controller: true
        kind: ObjectBucketClaim
        name: test21obc
        uid: 64f04cba-f662-11e9-bc3c-0295250841af
      resourceVersion: "40751"
      selfLink: /api/v1/namespaces/openshift-storage/secrets/test21obc
      uid: 65117c1c-f662-11e9-9094-0a5305de57bb
    type: Opaque

    シークレットは S3 アクセス認証情報を提供します。

  5. 以下のコマンドを実行して config map を表示します。

    # oc get -n openshift-storage cm test21obc -o yaml

    以下に例を示します。

    apiVersion: v1
    data:
      BUCKET_HOST: 10.0.171.35
      BUCKET_NAME: test21obc-933348a6-e267-4f82-82f1-e59bf4fe3bb4
      BUCKET_PORT: "31242"
      BUCKET_REGION: ""
      BUCKET_SUBREGION: ""
    kind: ConfigMap
    metadata:
      creationTimestamp: "2019-10-24T13:30:07Z"
      finalizers:
      - objectbucket.io/finalizer
      labels:
        app: noobaa
        bucket-provisioner: openshift-storage.noobaa.io-obc
        noobaa-domain: openshift-storage.noobaa.io
      name: test21obc
      namespace: openshift-storage
      ownerReferences:
      - apiVersion: objectbucket.io/v1alpha1
        blockOwnerDeletion: true
        controller: true
        kind: ObjectBucketClaim
        name: test21obc
        uid: 64f04cba-f662-11e9-bc3c-0295250841af
      resourceVersion: "40752"
      selfLink: /api/v1/namespaces/openshift-storage/configmaps/test21obc
      uid: 651c6501-f662-11e9-9094-0a5305de57bb

    config map には、アプリケーションの S3 エンドポイント情報が含まれます。

9.3. OpenShift Web コンソールを使用した Object Bucket Claim(オブジェクトバケット要求) の作成

OpenShift Web コンソールを使用して Object Bucket Claim (オブジェクトバケット要求) を作成できます。

前提条件

手順

  1. OpenShift Web コンソールにログインします。
  2. 左側のナビゲーションバーで StorageObject StorageObject Bucket ClaimsCreate Object Bucket Claim をクリックします。

    1. Object Bucket Claim の名前を入力し、ドロップダウンメニューから、内部または外部かのデプロイメントに応じて適切なストレージクラスとバケットクラスを選択します。

      内部モード

      デプロイメント後に作成された以下のストレージクラスを使用できます。

      • ocs-storagecluster-ceph-rgw は Ceph Object Gateway (RGW) を使用します。
      • openshift-storage.noobaa.io は Multicloud Object Gateway (MCG) を使用します。
      外部モード

      デプロイメント後に作成された以下のストレージクラスを使用できます。

      • ocs-external-storagecluster-ceph-rgw は RGW を使用します。
      • openshift-storage.noobaa.io は MCG を使用します。

        注記

        RGW OBC ストレージクラスは、OpenShift Data Foundation バージョン 4.5 の新規インストールでのみ利用できます。これは、以前の OpenShift Data Foundation リリースからアップグレードされたクラスターには適用されません。

    2. Create をクリックします。

      OBC を作成すると、その詳細ページにリダイレクトされます。

9.4. Object Bucket Claim(オブジェクトバケット要求) のデプロイメントへの割り当て

Object Bucket Claim (OBC) は作成後に、特定のデプロイメントに割り当てることができます。

前提条件

  • OpenShift Web コンソールへの管理者アクセス。

手順

  1. 左側のナビゲーションバーで StorageObject StorageObject Bucket Claims をクリックします。
  2. 作成した OBC の横にあるアクションメニュー (⋮) をクリックします。

    1. ドロップダウンメニューで、Attach to Deployment を選択します。
    2. Deployment Name リストから必要なデプロイメントを選択し、Attach をクリックします。

9.5. OpenShift Web コンソールを使用したオブジェクトバケットの表示

OpenShift Web コンソールを使用して、Object Bucket Claim (OBC) 用に作成されたオブジェクトバケットの詳細を表示できます。

前提条件

  • OpenShift Web コンソールへの管理者アクセス。

手順

  1. OpenShift Web コンソールにログインします。
  2. 左側のナビゲーションバーで StorageObject StorageObject Buckets をクリックします。

    オプション: 特定の OBC の詳細ページに移動し、Resource リンクをクリックして、その OBC のオブジェクトバケットを表示することもできます。

  3. 詳細を表示するオブジェクトバケットを選択します。選択すると、Object Bucket Details ページに移動します。

9.6. Object Bucket Claim(オブジェクトバケット要求) の削除

前提条件

  • OpenShift Web コンソールへの管理者アクセス。

手順

  1. 左側のナビゲーションバーで StorageObject StorageObject Bucket Claims をクリックします。
  2. 削除する Object Bucket Claim(オブジェクトバケット要求) の横にあるアクションメニュー (⋮) をクリックします。

    1. Delete Object Bucket Claim を選択します。
    2. Delete をクリックします。

第10章 オブジェクトバケットのキャッシュポリシー

キャッシュバケットは、ハブのターゲットとキャッシュターゲットが指定された namespace バケットです。ハブのターゲットは、S3 と互換性のある大規模なオブジェクトストレージバケットです。キャッシュのバケットは、ローカルの Multicloud Object Gateway (MCG) バケットです。AWS バケットまたは IBM COS バケットをキャッシュするキャッシュバケットを作成できます。

10.1. AWS キャッシュバケットの作成

前提条件

  • カスタマーポータル から Multicloud Object Gateway (MCG) コマンドラインインターフェイスバイナリーをダウンロードし、実行可能にする。

    注記

    アーキテクチャーに応じて適切な製品バリアントを選択してください。利用可能なプラットフォームは、Linux (x86_64)、Windows、Mac OS です。

手順

  1. NamespaceStore リソースを作成します。NamespaceStore は、MCG namespace バケットでデータの読み取りおよび書き込みターゲットとして使用される基礎となるストレージを表します。MCG コマンドラインインターフェイスから、以下のコマンドを実行します。

    noobaa namespacestore create aws-s3 <namespacestore> --access-key <AWS ACCESS KEY> --secret-key <AWS SECRET ACCESS KEY> --target-bucket <bucket-name>
    1. <namespacestore> を namespacestore の名前に置き換えます。
    2. <AWS ACCESS KEY> および <AWS SECRET ACCESS KEY> を、作成した AWS アクセスキー ID およびシークレットアクセスキーに置き換えます。
    3. <bucket-name> を既存の AWS バケット名に置き換えます。この引数は、MCG に対して、バッキングストア、およびその後のデータストレージおよび管理のためのターゲットバケットとして使用するバケットについて指示します。

      YAML を適用してストレージリソースを追加することもできます。まず、認証情報を使用してシークレットを作成します。

      apiVersion: v1
      kind: Secret
      metadata:
        name: <namespacestore-secret-name>
      type: Opaque
      data:
        AWS_ACCESS_KEY_ID: <AWS ACCESS KEY ID ENCODED IN BASE64>
        AWS_SECRET_ACCESS_KEY: <AWS SECRET ACCESS KEY ENCODED IN BASE64>

      Base64 を使用して独自の AWS アクセスキー ID およびシークレットアクセスキーを指定し、エンコードし、その結果を <AWS ACCESS KEY ID ENCODED IN BASE64> および <AWS SECRET ACCESS KEY ENCODED IN BASE64> に使用する必要があります。

      <namespacestore-secret-name> を一意の名前に置き換えます。

      次に、以下の YAML を適用します。

      apiVersion: noobaa.io/v1alpha1
      kind: NamespaceStore
      metadata:
        finalizers:
        - noobaa.io/finalizer
        labels:
          app: noobaa
        name: <namespacestore>
        namespace: openshift-storage
      spec:
        awsS3:
          secret:
            name: <namespacestore-secret-name>
            namespace: <namespace-secret>
          targetBucket: <target-bucket>
        type: aws-s3
    4. <namespacestore> を一意の名前に置き換えます。
    5. <namespacestore-secret-name> を、直前の手順で作成されたシークレットに置き換えます。
    6. <namespace-secret> を、直前の手順でシークレットを作成するために使用された namespace に置き換えます。
    7. <target-bucket> を namespacestore 用に作成した AWS S3 バケットに置き換えます。
  2. 以下のコマンドを実行してバケットクラスを作成します。

    noobaa bucketclass create namespace-bucketclass cache <my-cache-bucket-class> --backingstores <backing-store> --hub-resource <namespacestore>
    1. <my-cache-bucket-class> を一意のバケットクラス名に置き換えます。
    2. <backing-store> を関連するバッキングストアに置き換えます。コンマで区切られた 1 つ以上のバッキングストアをリスト表示できます。
    3. <namespacestore> を、直前の手順で作成された namespacestore に置き換えます。
  3. 以下のコマンドを実行して、手順 2 に定義されたバケットクラスを使用する Object Bucket Claim (OBC) リソースを使用してバケットを作成します。

    noobaa obc create <my-bucket-claim> my-app --bucketclass <custom-bucket-class>
    1. <my-bucket-claim> を一意の名前に置き換えます。
    2. <custom-bucket-class> を、手順 2 で作成したバケットクラスの名前に置き換えます。

10.2. IBM COS キャッシュバケットの作成

前提条件

  • カスタマーポータル から Multicloud Object Gateway (MCG) コマンドラインインターフェイスバイナリーをダウンロードし、実行可能にする。

    注記

    アーキテクチャーに応じて適切な製品バリアントを選択してください。利用可能なプラットフォームは、Linux (x86_64)、Windows、Mac OS です。

手順

  1. NamespaceStore リソースを作成します。NamespaceStore は、MCG namespace バケットでデータの読み取りおよび書き込みターゲットとして使用される基礎となるストレージを表します。MCG コマンドラインインターフェイスから、以下のコマンドを実行します。

    noobaa namespacestore create ibm-cos <namespacestore> --endpoint <IBM COS ENDPOINT> --access-key <IBM ACCESS KEY> --secret-key <IBM SECRET ACCESS KEY> --target-bucket <bucket-name>
    1. <namespacestore> を NamespaceStore の名前に置き換えます。
    2. <IBM ACCESS KEY>, <IBM SECRET ACCESS KEY>, <IBM COS ENDPOINT> を IBM アクセスキー ID、シークレットアクセスキー、および既存の IBM バケットの場所に対応する地域のエンドポイントに置き換えます。
    3. <bucket-name> を既存の IBM バケット名に置き換えます。この引数は、MCG に対して、バッキングストア、およびその後のデータストレージおよび管理のためのターゲットバケットとして使用するバケットについて指示します。

      YAML を適用してストレージリソースを追加することもできます。まず、認証情報を使用してシークレットを作成します。

      apiVersion: v1
      kind: Secret
      metadata:
        name: <namespacestore-secret-name>
      type: Opaque
      data:
        IBM_COS_ACCESS_KEY_ID: <IBM COS ACCESS KEY ID ENCODED IN BASE64>
        IBM_COS_SECRET_ACCESS_KEY: <IBM COS SECRET ACCESS KEY ENCODED IN BASE64>

      Base64 を使用して独自の IBM COS アクセスキー ID およびシークレットアクセスキーを指定し、エンコードし、その結果を <IBM COS ACCESS KEY ID ENCODED IN BASE64> および <IBM COS SECRET ACCESS KEY ENCODED IN BASE64> に使用する必要があります。

      <namespacestore-secret-name> を一意の名前に置き換えます。

      次に、以下の YAML を適用します。

      apiVersion: noobaa.io/v1alpha1
      kind: NamespaceStore
      metadata:
        finalizers:
        - noobaa.io/finalizer
        labels:
          app: noobaa
        name: <namespacestore>
        namespace: openshift-storage
      spec:
        s3Compatible:
          endpoint: <IBM COS ENDPOINT>
          secret:
            name: <backingstore-secret-name>
            namespace: <namespace-secret>
          signatureVersion: v2
          targetBucket: <target-bucket>
        type: ibm-cos
    4. <namespacestore> を一意の名前に置き換えます。
    5. <IBM COS ENDPOINT> を適切な IBM COS エンドポイントに置き換えます。
    6. <backingstore-secret-name> を、直前の手順で作成されたシークレットに置き換えます。
    7. <namespace-secret> を、直前の手順でシークレットを作成するために使用された namespace に置き換えます。
    8. <target-bucket> を namespacestore 用に作成した AWS S3 バケットに置き換えます。
  2. 以下のコマンドを実行してバケットクラスを作成します。

    noobaa bucketclass create namespace-bucketclass cache <my-bucket-class> --backingstores <backing-store> --hubResource <namespacestore>
    1. <my-bucket-class> を一意のバケットクラス名に置き換えます。
    2. <backing-store> を関連するバッキングストアに置き換えます。コンマで区切られた 1 つ以上のバッキングストアをリスト表示できます。
    3. <namespacestore> を、直前の手順で作成された namespacestore に置き換えます。
  3. 以下のコマンドを実行して、手順 2 に定義されたバケットクラスを使用する Object Bucket Claim リソースを使用してバケットを作成します。

    noobaa obc create <my-bucket-claim> my-app --bucketclass <custom-bucket-class>
    1. <my-bucket-claim> を一意の名前に置き換えます。
    2. <custom-bucket-class> を、手順 2 で作成したバケットクラスの名前に置き換えます。

第11章 Multicloud Object Gateway のライフサイクルバケット設定

Multicloud Object Gateway (MCG) ライフサイクルは、蓄積されたデータオブジェクトによるストレージコストを削減する方法を提供します。

期限切れのオブジェクトの削除は、未使用のデータの処理を可能にする単純な方法です。データの有効期限は、Amazon Web Services (AWS) のライフサイクル管理の一部であり、自動削除の有効期限を設定します。ライフサイクルの有効期限の最小時間分解能は 1 日です。詳細は、Expiring objects を参照してください。

AWS S3 API は、MCG でライフサイクルバケットを設定するために使用されます。データバケット API およびそのサポートレベルの詳細は、Multicloud Object Gateway データバケット API のサポート を参照してください。

AWS と比較して、MCG の指数ルール API にはいくつかの制限があります。

  • ExpiredObjectDeleteMarker は使用できますが、処理されません。
  • 最新バージョン以外の特定の有効期限を定義するオプションはありません。

第12章 Multicloud Object Gateway のパフォーマンスのスケーリング

Multicloud Object Gateway (MCG) のパフォーマンスは環境によって異なる場合があります。特定のアプリケーションでは、高速なパフォーマンスを必要とする場合があり、これは S3 エンドポイントをスケーリングして簡単に対応できます。

MCG リソースプールは、デフォルトで有効にされる 2 種類のサービスを提供する NooBaa デーモンコンテナーのグループです。

  • ストレージサービス
  • S3 エンドポイントサービス

S3 エンドポイントサービス

S3 エンドポイントは、すべての MCG がデフォルトで提供するサービスであり、これは Multicloud Object Gateway (MCG) で負荷の高いデータ消費タスクの大部分を処理します。エンドポイントサービスは、インラインのデータチャンク、重複排除、圧縮、および暗号化を処理し、(MCG) からのデータ配置の指示を受け入れます。

12.1. MultiCloud Object Gateway エンドポイントの自動スケーリング

MultiCloud Object Gateway (MCG) の S3 サービスの負荷が増減すると、MCG エンドポイントの数が自動的にスケーリングされます。OpenShift Data Foundation クラスターは、アクティブな MCG エンドポイントを 1 つ使用してデプロイされます。デフォルトでは、MCG エンドポイント Pod はそれぞれ、CPU 1 つ、メモリー要求 2 Gi、要求に一致する制限で設定されます。エンドポイントの CPU 負荷が一貫した期間、使用率 80% のしきい値を超えると、2 番目のエンドポイントがデプロイされ、最初のエンドポイントの負荷を軽減します。両方のエンドポイントの平均 CPU 負荷が、一貫した期間 80% のしきい値を下回ると、エンドポイントの 1 つが削除されます。この機能により、MCG のパフォーマンスおよび保守性が向上します。

次の oc patch コマンドを使用して、noobaa-endpoint の Horizontal Pod Autoscaler (HPA) をスケーリングできます。次に例を示します。

# oc patch -n openshift-storage storagecluster ocs-storagecluster \
    --type merge \
    --patch '{"spec": {"multiCloudGateway": {"endpoints": {"minCount": 3,"maxCount": 10}}}}'

上記の例では、minCount3 に、maxCount を `10` に設定しています。

12.2. PV プールリソースの CPU とメモリーを増やす

MCG のデフォルト設定は、低リソース消費をサポートします。ただし、特定のワークロードに対応し、ワークロードの MCG パフォーマンスを向上させるために CPU とメモリーを増やす必要がある場合は、OpenShift Web コンソールで CPU とメモリーに必要な値を設定できます。

手順

  1. OpenShift Web コンソールで、StorageObject StorageBacking Store に移動します。
  2. 関連するバッキングストアを選択し、YAML をクリックします。
  3. spec: が見つかるまで下にスクロールし、pvPool を CPU およびメモリーで更新します。制限の新しいプロパティーを追加してから、cpu と memory を追加します。

    参照例:

    spec:
      pvPool:
        resources:
          limits:
            cpu: 1000m
            memory: 4000Mi
          requests:
            cpu: 800m
            memory: 800Mi
            storage: 50Gi
  4. Save をクリックします。

検証手順

  • 確認するには、PV プール Pod のリソース値を確認します。

第13章 RADOS Object Gateway S3 エンドポイントへのアクセス

ユーザーは、RADOS Object Gateway (RGW) エンドポイントに直接アクセスできます。

Red Hat OpenShift Data Foundation の以前のバージョンでは、RGW パブリックルートを作成するために RGW サービスを手動で公開する必要がありました。OpenShift Data Foundation バージョン 4.7 以降、RGW ルートはデフォルトで作成され、rook-ceph-rgw-ocs-storagecluster-cephobjectstore という名前が付けられています。

第14章 RGW にアクセスするアプリケーションでの TLS 証明書の使用

ほとんどの S3 アプリケーションでは、デプロイメント設定ファイルに含める、リクエストでファイルとして渡す、/etc/pki パスに保存するなどの形で、TLS 証明書が必要です。

RADOS Object Gateway (RGW) の TLS 証明書は Kubernetes シークレットとして保存され、詳細はこのシークレットから取得する必要があります。

前提条件

実行中の OpenShift Data Foundation クラスター。

手順

  • 内部 RGW サーバーの場合

    • kubernetes シークレットから TLS 証明書と鍵を取得します。

      $ oc get secrets/<secret_name> -o jsonpath='{.data..tls\.crt}' | base64 -d
      
      $ oc get secrets/<secret_name> -o jsonpath='{.data..tls\.key}' | base64 -d
      <secret_name>
      デフォルトの kubernetes シークレット名は <objectstore_name>-cos-ceph-rgw-tls-cert です。オブジェクトストアの名前を指定します。
  • 外部 RGW サーバーの場合

    • kubernetes シークレットから TLS 証明書を取得します。

      $ oc get secrets/<secret_name> -o jsonpath='{.data.cert}' | base64 -d
      <secret_name>
      デフォルトの kubernetes シークレット名は ceph-rgw-tls-cert で、Opaque タイプのシークレットです。TLS 証明書を格納するためのキー値は cert です。

14.1. OpenShift Data Foundation での外部 RGW サーバーへのアクセス

Object Bucket Claim を使用して外部 RGW サーバーにアクセスする

AccessKeySecret Key などの S3 認証情報は、Object Bucket Claim (OBC) の作成によって生成されるシークレットに保存され、次のコマンドを使用して取得できます。

# oc get secret <object bucket claim name> -o jsonpath='{.data.AWS_SECRET_ACCESS_KEY}' | base64 --decode
# oc get secret <object bucket claim name> -o jsonpath='{.data.AWS_ACCESS_KEY_ID}' | base64 --decode

同様に、OBC の configmap からエンドポイントの詳細を取得できます。

# oc get cm <object bucket claim name> -o jsonpath='{.data.BUCKET_HOST}'
# oc get cm <object bucket claim name> -o jsonpath='{.data.BUCKET_PORT}'
# oc get cm <object bucket claim name> -o jsonpath='{.data.BUCKET_NAME}'

Ceph Object Store User CR を使用して外部 RGW サーバーにアクセスする

Ceph Object Store User CR の一部として生成されたシークレットから S3 認証情報とエンドポイントの詳細を取得できます。

# oc get secret rook-ceph-object-user-<object-store-cr-name>-<object-user-cr-name> -o jsonpath='{.data.AccessKey}' | base64 --decode
# oc get secret rook-ceph-object-user-<object-store-cr-name>-<object-user-cr-name> -o jsonpath='{.data.SecretKey}' | base64 --decode
# oc get secret rook-ceph-object-user-<object-store-cr-name>-<object-user-cr-name> -o jsonpath='{.data.Endpoint}' | base64 --decode
重要

どちらのアクセスメカニズムの場合も、管理者に新しい証明書を要求するか、Kubernetes シークレット ceph-rgw-tls-cert の証明書を再利用することができます。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.