ハイブリッドおよびマルチクラウドリソースの管理
Multicloud Object Gateway (NooBaa) を使用したハイブリッドクラウドまたはマルチクラウド環境でのストレージリソースを管理する方法
概要
多様性を受け入れるオープンソースの強化
Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。まずは、マスター (master)、スレーブ (slave)、ブラックリスト (blacklist)、ホワイトリスト (whitelist) の 4 つの用語の置き換えから始めます。この取り組みは膨大な作業を要するため、用語の置き換えは、今後の複数のリリースにわたって段階的に実施されます。詳細は、Red Hat CTO である Chris Wright のメッセージ をご覧ください。
Red Hat ドキュメントへのフィードバック (英語のみ)
Red Hat ドキュメントに対するご意見をお聞かせください。ドキュメントの改善点があれば、ぜひお知らせください。
フィードバックを送信するには、Bugzilla チケットを作成します。
- Bugzilla の Web サイトに移動します。
- Component セクションで、documentation を選択します。
- Description フィールドに、ドキュメントの改善に向けたご提案を記入してください。ドキュメントの該当部分へのリンクも記載してください。
- 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
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.
アプリケーションに接続するための関連するエンドポイント、アクセスキー、およびシークレットアクセスキーが必要です。
以下に例を示します。
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 への管理者アクセス。
手順
- OpenShift Web コンソールで、Storage → Object Storage をクリックします。
- Backing Store タブをクリックします。
- Create Backing Store をクリックします。
Create New Backing Store ページで、以下を実行します。
- Backing Store Name を入力します。
- Provider を選択します。
- Region を選択します。
- オプション: Endpoint を入力します。
ドロップダウンリストから Secret を選択するか、独自のシークレットを作成します。オプションで、Switch to Credentials ビューを選択すると、必要なシークレットを入力できます。
OCP シークレットの作成に関する詳細は、Openshift Container Platform ドキュメントのCreating the secretを参照してください。
バッキングストアごとに異なるシークレットが必要です。特定のバッキングストアのシークレット作成の詳細は、「MCG コマンドラインインターフェイスを使用したハイブリッドまたはマルチクラウドのストレージリソースの追加」 を参照して、YAML を使用したストレージリソースの追加手順を実行します。
注記このメニューは、Google Cloud およびローカル PVC 以外のすべてのプロバイダーに関連します。
- Target bucket を入力します。ターゲットバケットは、リモートクラウドサービスでホストされるコンテナーストレージです。MCG に対してシステム用にこのバケットを使用できることを通知する接続を作成できます。
- Create Backing Store をクリックします。
検証手順
- OpenShift Web コンソールで、Storage → Object Storage をクリックします。
- Backing Store タブをクリックして、すべてのバッキングストアを表示します。
3.2. デフォルトのバッキングストアをオーバーライドする
デフォルトのバッキングストア設定を使用したくない場合は、manualDefaultBackingStore
フラグを使用してデフォルトの NooBaa バッキングストアをオーバーライドし、削除できます。これにより、バッキングストア設定をカスタマイズし、特定のニーズに合わせて柔軟に調整できます。この機能を活用すると、システムをさらに最適化し、パフォーマンスを向上させることができます。
前提条件
- OpenShift Data Foundation Operator がインストールされた OpenShift Container Platform。
カスタマーポータル から Multicloud Object Gateway (MCG) コマンドラインインターフェイスバイナリーをダウンロードし、実行可能にする。
注記アーキテクチャーに応じて適切な製品バリアントを選択してください。利用可能なプラットフォームは、Linux (x86_64)、Windows、Mac OS です。
手順
noobaa-default-backing-store
が存在するかどうかを確認します。$ oc get backingstore NAME TYPE PHASE AGE noobaa-default-backing-store pv-pool Creating 102s
NooBaa CR にパッチを適用して
manualDefaultBackingStore
を有効にします。$ oc patch noobaa/noobaa --type json --patch='[{"op":"add","path":"/spec/manualDefaultBackingStore","value":true}]'
重要Multicloud Object Gateway CLI を使用して、新しいバッキングストアを作成し、アカウントを更新します。
新しいデフォルトのバッキングストアを作成して、デフォルトのバッキングストアをオーバーライドします。以下に例を示します。
$ noobaa backingstore create pv-pool _NEW-DEFAULT-BACKING-STORE_ --num-volumes 1 --pv-size-gb 16
-
NEW-DEFAULT-BACKING-STORE
を新しいデフォルトのバッキングストアに使用する名前に置き換えます。
-
新しいデフォルトのバッキングストアをデフォルトのリソースとして使用するように、管理者アカウントを更新します。
$ noobaa account update admin@noobaa.io --new_default_resource=_NEW-DEFAULT-BACKING-STORE_
NEW-DEFAULT-BACKING-STORE
を前の手順のバッキングストアの名前に置き換えます。管理者アカウントのデフォルトのリソースを更新すると、システム全体で新しい設定が使用されるようになります。
新しいデフォルトのバッキングストアを使用するように、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"}]'
オプション: noobaa-default-backing-store を削除します。
-
noobaa-default-backing-store
に関連付けられているすべてのインスタンスとバケットを削除し、それをリソースとして使用してアカウントを更新します。 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 で使用できるバッキングストレージを追加します。
デプロイメントのタイプに応じて、以下のいずれかの手順を選択してバッキングストレージを作成できます。
- AWS でサポートされるバッキングストアを作成する方法については、「AWS でサポートされるバッキングストアの作成」 を参照してください。
- AWS-STS でサポートされるバッキングストアの作成方法は、「AWS-STS でサポートされるバッキングストアの作成」 を参照してください。
- IBM COS でサポートされるバッキングストアを作成する方法については、「IBM COS でサポートされるバッキングストアの作成」 を参照してください。
- Azure でサポートされるバッキングストアを作成する方法については、「Azure でサポートされるバッキングストアの作成」 を参照してください。
- GCP でサポートされるバッキングストアを作成する方法については、「GCP でサポートされるバッキングストアの作成」 を参照してください。
- ローカルの永続ボリュームでサポートされるバッキングストアを作成する方法については、「ローカル永続ボリュームでサポートされるバッキングストアの作成」 を参照してください。
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 を使用してストレージリソースを追加する
認証情報でシークレットを作成します。
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 シークレットの名前。
特定のバッキングストアについて以下の 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) を指定する必要があります。
前提条件
- AWS STS を使用して Red Hat OpenShift Container Platform クラスターを設定している。詳細は、短期認証情報を使用するための AWS クラスターの設定 を参照してください。
手順
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 のインストール
前提条件
- AWS STS を使用して Red Hat OpenShift Container Platform クラスターを設定している。詳細は、短期認証情報を使用するための AWS クラスターの設定 を参照してください。
- OpenID Connect (OIDC) 設定に一致するスクリプトを使用して AWS ロールを作成している。詳細は、スクリプトを使用した AWS ロールの作成 を参照してください。
手順
Operator Hub から OpenShift Data Foundation Operator をインストールします。
- インストール中に、ロール ARN を ARN Details フィールドに追加します。
- Update approval フィールドが Manual に設定されていることを確認します。
3.3.2.3. 新規 AWS STS バッキングストアの作成
前提条件
- AWS STS を使用して Red Hat OpenShift Container Platform クラスターを設定している。詳細は、短期認証情報を使用するための AWS クラスターの設定 を参照してください。
- OpenID Connect (OIDC) 設定に一致するスクリプトを使用して AWS ロールを作成している。詳細は、スクリプトを使用した AWS ロールの作成 を参照してください。
- OpenShift Data Foundation Operator のインストール詳細は、AWS STS OpenShift クラスターへの OpenShift Data Foundation Operator のインストール を参照してください。
手順
Multicloud Object Gateway (MCG) をインストールします。
これは、有効期間の短い認証情報を使用して、デフォルトのバッキングストアとともにインストールされます。
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 です。
手順
コマンドラインインターフェイスの使用
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 を使用してストレージリソースを追加する
認証情報でシークレットを作成します。
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 シークレットの名前。
特定のバッキングストアについて以下の 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 を使用してストレージリソースを追加する
認証情報でシークレットを作成します。
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 シークレットの一意の名前。
特定のバッキングストアについて以下の 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 を使用してストレージリソースを追加する
認証情報でシークレットを作成します。
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 シークレットの一意の名前。
特定のバッキングストアについて以下の 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 と互換性のあるバッキングストアを自動的に作成することに注意してください。
手順
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
<RGW ACCESS KEY>
および<RGW SECRET KEY>
を取得するには、RGW ユーザーシークレット名を使用して以下のコマンドを実行します。oc get secret <RGW USER SECRET NAME> -o yaml -n openshift-storage
- Base64 からアクセスキー ID とアクセスキーをデコードし、それらのキーを保持します。
-
<RGW USER ACCESS KEY>
と<RGW USER SECRET ACCESS KEY>
を、直前の手順でデコードした適切なデータに置き換えます。 -
<bucket-name>
を既存の RGW バケット名に置き換えます。この引数は、MCG に対して、バッキングストア、およびその後のデータストレージおよび管理のためのターゲットバケットとして使用するバケットについて指示します。 <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 を使用してバッキングストアを作成することもできます。
CephObjectStore
ユーザーを作成します。これにより、RGW 認証情報が含まれるシークレットも作成されます。apiVersion: ceph.rook.io/v1 kind: CephObjectStoreUser metadata: name: <RGW-Username> namespace: openshift-storage spec: store: ocs-storagecluster-cephobjectstore displayName: "<Display-name>"
-
<RGW-Username>
と<Display-name>
を、一意のユーザー名および表示名に置き換えます。
-
以下の 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
-
<backingstore-secret-name>
を、直前の手順でCephObjectStore
で作成したシークレットの名前に置き換えます。 -
<bucket-name>
を既存の RGW バケット名に置き換えます。この引数は、MCG に対して、バッキングストア、およびその後のデータストレージおよび管理のためのターゲットバケットとして使用するバケットについて指示します。 -
<RGW endpoint>
を取得するには、RADOS Object Gateway S3 エンドポイントへのアクセス を参照してください。
-
3.5. 新規バケットクラスの作成
バケットクラスは、Object Bucket Class の階層ポリシーおよびデータ配置を定義するバケットのクラスを表す CRD です。
以下の手順を使用して、OpenShift Data Foundation でバケットクラスを作成します。
手順
- OpenShift Web コンソールで、Storage → Object Storage をクリックします。
- Bucket Class タブをクリックします。
- Create Bucket Class をクリックします。
Create new Bucket Class ページで、以下を実行します。
バケットクラスターイプを選択し、バケットクラス名を入力します。
BucketClass タイプを選択します。以下のいずれかのオプションを選択します。
- Standard: データは Multicloud Object Gateway (MCG) に使用され、重複排除、圧縮、および暗号化されます。
Namespace: データは、重複排除、圧縮、または暗号化を実行せずに NamespaceStores に保存されます。
デフォルトでは、Standard が選択されます。
- Bucket Class Name 名を入力します。
- Next をクリックします。
Placement Policy で Tier 1 - Policy Type を選択し、Next をクリックします。要件に応じて、いずれかのオプションを選択できます。
- Spread により、選択したリソース全体にデータを分散できます。
- Mirror により、選択したリソース全体でデータを完全に複製できます。
- Add Tier をクリックし、別のポリシー階層を追加します。
Tier 1 - Policy Type で Spread を選択した場合は、利用可能なリストから 1 つ以上の Backing Store リソースを選択してから、Next をクリックします。または、新しいバッキングストアを作成 することもできます。
注記直前の手順で Policy Type に Mirror を選択する場合は、2 つ以上のバッキングストアを選択する必要があります。
- Bucket Class 設定を確認し、確認します。
- Create Bucket Class をクリックします。
検証手順
- OpenShift Web コンソールで、Storage → Object Storage をクリックします。
- Bucket Class タブをクリックし、新しい Bucket Class を検索します。
3.6. バケットクラスの編集
以下の手順に従って、Openshift Web コンソールの edit
ボタンをクリックし、YAML ファイルを使用してバケットクラスコンポーネントを編集します。
前提条件
- OpenShift Web コンソールへの管理者アクセス。
手順
- OpenShift Web コンソールで、Storage → Object Storage をクリックします。
- Bucket Class タブをクリックします。
- 編集する Bucket クラスの横にあるアクションメニュー (⋮) をクリックします。
- Edit Bucket Class をクリックします。
- YAML ファイルにリダイレクトされ、このファイルで必要な変更を加え、Save をクリックします。
3.7. バケットクラスのバッキングストアの編集
以下の手順を使用して、既存の Multicloud Object Gateway (MCG) バケットクラスを編集し、バケットクラスで使用される基礎となるバッキングストアを変更します。
前提条件
- OpenShift Web コンソールへの管理者アクセス。
- バケットクラス。
- バッキングストア。
手順
- OpenShift Web コンソールで、Storage → Object Storage をクリックします。
- Bucket Class タブをクリックします。
- 編集する Bucket クラスの横にあるアクションメニュー (⋮) をクリックします。
- Edit Bucket Class Resources をクリックします。
Edit Bucket Class Resources ページで、バッキングストアをバケットクラスに追加するか、バケットクラスからバッキングストアを削除してバケットクラスリソースを編集します。1 つまたは 2 つの層を使用して作成されたバケットクラスリソースや、異なる配置ポリシーが指定されたバケットクラスリソースを編集することもできます。
- バッキングストアをバケットクラスに追加するには、バッキングストアの名前を選択します。
- バケットクラスからバッキングストアを削除するには、バッキングストアの名前を消去します。
- 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 バケットの追加
前提条件
- OpenShift Data Foundation Operator がインストールされた OpenShift Container Platform。
Multicloud Object Gateway (MCG) へのアクセス。
詳細は、第 2 章 アプリケーションの使用による Multicloud Object Gateway へのアクセス を参照してください。
手順
認証情報でシークレットを作成します。
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>
の代わりに使用する必要があります。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 用に作成したターゲットバケット。
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 の名前のリスト。
以下の 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 バケットの追加
前提条件
- OpenShift Data Foundation Operator がインストールされた OpenShift Container Platform。
- Multicloud Object Gateway (MCG) へのアクセス。第 2 章 アプリケーションの使用による Multicloud Object Gateway へのアクセス を参照してください。
手順
認証情報でシークレットを作成します。
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>
の代わりに使用する必要があります。
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 用に作成したターゲットバケット。
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 名のリスト。
以下の 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 です。
手順
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 に対して、バッキングストア、およびその後のデータストレージおよび管理のためのターゲットバケットとして使用するバケットについて指示します。
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 のリスト。
前の手順で定義したバケットクラスを使用する 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 バケットの追加
前提条件
- OpenShift Data Foundation Operator がインストールされた OpenShift Container Platform。
- Multicloud Object Gateway (MCG) へのアクセス。第 2 章 アプリケーションの使用による Multicloud Object Gateway へのアクセス を参照してください。
カスタマーポータル から MCG コマンドラインインターフェイスバイナリーをダウンロードし、実行可能にする。
注記Linux (x86_64)、Windows、Mac OS のいずれかを選択してください。
手順
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 に対して、バッキングストア、およびその後のデータストレージおよび管理のためのターゲットバケットとして使用するバケットについて指示します。
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 のコンマ区切りリスト。
前の手順で定義したバケットクラスを使用する 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) へのアクセス。
手順
- OpenShift Web コンソールで、Storage → Object Storage → Namespace Store タブに移動します。
Create Namespace Store タブをクリックして、namespace バケットで使用される
namespacestore
リソースを作成します。-
namespacestore
名を入力します。 - プロバイダーとリージョンを選択します。
- 既存のシークレットを選択するか、Switch to credentials をクリックして、シークレットキーおよびシークレットアクセスキーを入力してシークレットを作成します。
- ターゲットバケットを入力します。
- Create をクリックします。
-
-
Namespace Store タブで、新規作成された
namespacestore
が Ready 状態にあることを確認します。 - 必要な量のリソースをすべて作成するまで、手順 2 と 3 を繰り返します。
Bucket Class タブに移動し、Create Bucket Class をクリックします。
-
Namespace
BucketClass type ラジオボタンを選択します。 - BucketClass 名 を入力し、Next をクリックします。
namespace バケットの Namespace Policy Type を選択し、Next をクリックします。
- namespace ポリシータイプが Single の場合、読み取りリソースを選択する必要があります。
- namespace ポリシータイプが Multi の場合、読み取りリソースおよび書き込みリソースを選択する必要があります。
- namespace ポリシータイプが Cache の場合は、namespace バケットの読み取りおよび書き込みターゲットを定義する Hub namespace ストアを選択する必要があります。
- namespace バケットの読み取りおよび書き込みターゲットを定義する Read and Write NamespaceStore を 1 つ選択し、Next をクリックします。
- 新しいバケットクラスの詳細を確認し、Create Bucket Class をクリックします。
-
- Bucket Class タブに移動し、新たに作成されたリソースが Ready フェーズにあることを確認します。
Object Bucket Claims タブに移動し、Create Object Bucket Claim をクリックします。
- namespace バケットの ObjectBucketClaim Name を入力します。
-
StorageClass を
openshift-storage.noobaa.io
として選択します。 -
一覧から、
namespacestore
用に以前に作成した BucketClass を選択します。デフォルトでは、noobaa-default-bucket-class
が選択されます。 - Create をクリックします。namespace バケットが、namespace の Object Bucket Claim とともに作成されます。
- Object Bucket Claims タブに移動し、作成された Object Bucket Claim が Bound 状態にあることを確認します。
- 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) へのアクセス。
手順
- OpenShift Web コンソールにログインします。
- Storage → Object Storage をクリックします。
- NamespaceStore タブをクリックして、namespace バケットで使用する NamespaceStore リソースを作成します。
- Create namespaces をクリックします。
- NamespaceStore の名前を入力します。
- プロバイダーとしてファイルシステムを選択します。
- 永続ボリュームクレームを選択します。
フォルダー名を入力します。
フォルダー名が存在する場合は、そのフォルダーを使用して NamespaceStore を作成するか、その名前のフォルダーを作成します。
- Create をクリックします。
- 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 に作成する必要があります。
手順
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
アプリケーションの namespace に移動します。
$ oc project <application_namespace>
以下に例を示します。
$ oc project testnamespace
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
Pod 内の永続ボリューム (PV) のマウントポイントを確認します。
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
です。
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}]
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
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 ..
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
1 つ以上の noobaa-endpoint Pod が PVC にアクセスできるように、レガシーアプリケーションの PVC が
openshift-storage
namespace からアクセス可能であることを確認します。volumeAttributes
からsubvolumePath
とvolumeHandle
の値を検索します。これらの値は、レガシーアプリケーション 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
前のステップで特定した
subvolumePath
とvolumeHandle
の値を使用して、レガシーアプリケーション 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
前のステップで指定した 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
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
openshift-storage
プロジェクトに移動します。$ oc project openshift-storage Now using project "openshift-storage" on server "https://api.cluster-5f6ng.5f6ng.sandbox65.opentlc.com:6443".
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'
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
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 番号を指定します。
重要レガシーアプリケーションと同じ
UID
とGID
を使用します。前の出力から見つけることができます。以下に例を示します。
$ 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'
MCG バケットを作成します。
レガシーアプリケーション 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
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/" }] } }'
レガシーアプリケーションおよび
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 ラベルが同じではないため、アクセス許可が拒否されたり、アクセスの問題が発生したりすることがわかります。
レガシーアプリケーションと
openshift-storage
Pod がファイルで同じ SELinux ラベルを使用していることを確認します。これは、次のいずれかの方法で実行できます。
NSFS namespace ストアを削除します。
MCG バケットを削除します。
$ noobaa bucket delete <bucket_name>
以下に例を示します。
$ noobaa bucket delete legacy-bucket
MCG ユーザーアカウントを削除します。
$ noobaa account delete <user_account>
以下に例を示します。
$ noobaa account delete leguser
NSFS namespace ストアを削除します。
$ noobaa namespacestore delete <nsfs_namespacestore>
以下に例を示します。
$ noobaa namespacestore delete legacy-namespace
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 プロジェクトのラベルと一致するように変更します
現在の
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
レガシーアプリケーションの 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
-
レガシーアプリケーション Pod を再起動します。すべてのファイルの再ラベル付けが行われ、SELinux ラベルが
openshift-storage
デプロイメントと一致するようになりました。
4.4.3.2. レガシーアプリケーション PVC をマウントする Pod を持つデプロイメント設定に対してのみ SELinux ラベルを変更する
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
デプロイメント用のサービスアカウントを作成し、新しく作成した
scc
に追加します。サービスアカウントを作成します。
$ oc create serviceaccount <service_account_name>
- <service_account_name>`
サービスアカウントの名前を指定します。
以下に例を示します。
$ oc create serviceaccount testnamespacesa
新しく作成した
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
新しく作成されたサービスアカウントを使用するように、レガシーアプリケーションのデプロイメントにパッチを適用します。これにより、デプロイメントで 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"}}}}'
デプロイメントを編集して、デプロイメント設定の 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
デプロイメント設定の 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 です。
手順
アカウント名を取得します。
アカウントを一覧表示するには、次のコマンドを実行します。
$ 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
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).
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
承認すると、資格情報が再生成され、最終的にそれらが出力されます。
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 です。
手順
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
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).
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
承認すると、資格情報が再生成され、最終的にそれらが出力されます。
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) コマンドラインインターフェイスを必ずダウンロードしてください。
手順
Multicloud Object Gateway (MCG) コマンドラインインターフェイスから以下のコマンドを実行し、ミラーリングポリシーでバケットクラスを作成します。
$ noobaa bucketclass create placement-bucketclass mirror-to-aws --backingstores=azure-resource,aws-resource --placement Mirror
新たに作成されたバケットクラスを新規のバケット要求に設定し、2 つのロケーション間でミラーリングされる新規バケットを生成します。
$ noobaa obc create mirrored-bucket --bucketclass=mirror-to-aws
6.2. YAML を使用したデータのミラーリング用のバケットクラスの作成
以下の 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
以下の行を標準の 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 でのバケットポリシーの使用
前提条件
- 実行中の OpenShift Data Foundation Platform。
- Multicloud Object Gateway (MCG) へのアクセス。2章アプリケーションの使用による Multicloud Object Gateway へのアクセス を参照してください。
- 有効な Multicloud Object Gateway ユーザーアカウント。ユーザーアカウントを作成する手順は、Multicloud Object Gateway でのユーザーの作成 を参照してください。
手順
MCG でバケットポリシーを使用するには、以下を実行します。
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 ユーザーアカウントに置き換えます。AWS S3 クライアントを使用して
put-bucket-policy
コマンドを使用してバケットポリシーを S3 バケットに適用します。# aws --endpoint ENDPOINT --no-verify-ssl s3api put-bucket-policy --bucket MyBucket --policy file://BucketPolicy
-
ENDPOINT
を S3 エンドポイントに置き換えます。 -
MyBucket
を、ポリシーを設定するバケットに置き換えます。 -
BucketPolicy
をバケットポリシー JSON ファイルに置き換えます。 デフォルトの自己署名証明書を使用している場合は、
--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 で、バケットポリシー要素
NotPrincipal
、NotAction
、NotResource
が導入されました。これらの要素の詳細は、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": ""}
のように、空のままにすることもできます。
関連情報
- OBC の詳細は、Object Bucket Claim を参照してください。
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 準拠の文字列として指定する必要があります。
手順
以下の 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 コンソールへの管理者アクセス。
手順
- OpenShift Web コンソールで、Storage → Object Storage → Object Bucket Claims に移動します。
- Create ObjectBucketClaim をクリックします。
- ObjectBucketName の名前を入力し、StorageClass および BucketClass を選択します。
- Enable replication チェックボックスを選択して、レプリケーションを有効にします。
- Replication policy セクションで、Optimize replication using event logs チェックボックスをオンにします。
Event log Bucket の下にログが含まれるバケットの名前を入力します。
ログがバケットのルートに保存されていない場合は、
s3://
なしで完全パスを指定します。- 接頭辞を入力すると、名前が指定された接頭辞で始まるオブジェクトのみが複製されます。
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 ポータルで次のタスクを完了している。
新しいアプリケーションを作成し、名前、アプリケーション (クライアント) ID、およびディレクトリー (テナント) ID を書き留めていることを確認します。
詳細は、Register an application を参照してください。
- 新しいクライアントシークレットが作成され、アプリケーションシークレットが書き留められていることを確認します。
新しい Log Analytics ワークスペースが作成され、その名前とワークスペース ID が表示されていることを確認します。
詳細は、Create a Log Analytics workspace を参照してください。
Access control で
Reader
ロールが割り当てられていること、メンバーが選択されていること、および前の手順で登録したアプリケーションの名前が指定されていることを確認します。詳細は、Assign Azure roles using the Azure portal を参照してください。
- 新しいストレージアカウントが作成され、アクセスキーが表示されていることを確認します。
作成したストレージアカウントの Monitoring セクションで Blob を選択し、Diagnostic settings 画面で
StorageWrite
とStorageDelete
のみを選択して、前に作成した Log Analytics ワークスペースを宛先の詳細に追加します。作成したストレージアカウントの Monitoring セクションの Diagnostic settings 画面で Blob が選択されていることを確認します。また、StorageWrite
とStorageDelete
のみが選択されていることを確認し、宛先の詳細に、前に作成した Log Analytics ワークスペースが追加されていることを確認します。詳細は、Diagnostic settings in Azure Monitor を参照してください。
- オブジェクトソースおよびオブジェクトの宛先に 2 つの新規コンテナーが作成されていることを確認します。
- OpenShift Web コンソールへの管理者アクセス。
手順
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>
Azure で作成したコンテナーを基盤とする
NamespaceStore
を作成します。詳細は、OpenShift Container Platform ユーザーインターフェイスを使用した namespace バケットの追加 を参照してください。
- これを使用する新規の Namespace-Bucketclass および OBC を作成します。
-
ターゲット OBC の YAML を調べるか、すべての S3 バケット (例:
- s3 ls)
をリストして、オブジェクトバケット名を確認します。 次のテンプレートを使用し、
.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 での値を検索して取得できます。
検証手順
- オブジェクトをソースバケットに書き込みます。
- MCG が複製するまで待ちます。
- ソースバケットからオブジェクトを削除します。
- オブジェクトがターゲットバケットから削除されたことを確認します。
8.3.4. ログベースのバケットレプリケーション削除の有効化
前提条件
- OpenShift Web コンソールへの管理者アクセス。
- 目的のバケットに対して設定された AWS サーバーアクセスログ。
手順
- OpenShift Web コンソールで、Storage → Object Storage → Object Bucket Claims に移動します。
- Create new Object bucket claim をクリックします。
- (任意) Replication rules セクションで、各ルールの Sync deletion チェックボックスを個別に選択します。
Event log Bucket の下にログが含まれるバケットの名前を入力します。
ログがバケットのルートに保存されていない場合は、
s3://
なしで完全パスを指定します。- 接頭辞を入力すると、名前が指定された接頭辞で始まるオブジェクトのみが複製されます。
8.4. Multicloud Object Gateway のバケットロギングの有効化 [テクノロジープレビュー]
バケットロギングは、コンプライアンス、監査、最適化の目的で、Multicloud Object Gateway (MCG) バケットに対して実行された S3 操作を記録するのに役立ちます。
テクノロジープレビュー機能は、近々発表予定の製品イノベーションをリリースに先駆けてご提供することにより、お客様は機能性をテストし、開発プロセス中にフィードバックをお寄せいただくことができます。ただし、この機能は Red Hat のサービスレベルアグリーメントで完全にサポートされていないため、機能的に完全でない可能性があり、実稼働環境での使用を目的としていません。Red Hat ではテクノロジープレビュー機能を今後も繰り返し使用することで一般提供に移行できると考えていることから、お客様がこの機能を使用する際に発生する問題の解決に取り組みます。
詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。
前提条件
- OpenShift Data Foundation Operator がインストールされた OpenShift Container Platform。
MCG へのアクセス。
詳細は、アプリケーションの使用による Multicloud Object Gateway へのアクセス を参照してください。
手順
オブジェクトをアップロードできるデータバケットを作成します。
nb bucket create data.bucket
次のコマンドを使用して、バケット操作のログを保存するログバケットを作成します。
nb bucket create log.bucket
ログバケットを使用してデータバケットにバケットロギングを設定します。
nb api bucket_api put_bucket_logging '{ "name": "data.bucket", "log_bucket": "log.bucket", "log_prefix": "data-bucket-logs" }'
データバケットにバケットロギングが設定されているかどうかを確認します。
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"}
(オプション) バケットロギングを無効にするには、次のコマンドを使用します。
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 へのアクセス を参照してください。
手順
以下の行をアプリケーション YAML に追加します。
apiVersion: objectbucket.io/v1alpha1 kind: ObjectBucketClaim metadata: name: <obc-name> spec: generateBucketName: <obc-bucket-name> storageClassName: openshift-storage.noobaa.io
これらの行は OBC 自体になります。
-
<obc-name>
を、一意の OBC の名前に置き換えます。 -
<obc-bucket-name>
を、OBC の一意のバケット名に置き換えます。
-
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 からオブジェクトバケットを要求し、バケットとアカウントを作成します。
-
<obc-name>
のすべてのインスタンスを、OBC の名前に置き換えます。 -
<your application image>
をアプリケーションイメージに置き換えます。
-
更新された YAML ファイルを適用します。
# oc apply -f <yaml.file>
<yaml.file>
を YAML ファイルの名前に置き換えます。新しい config map を表示するには、以下を実行します。
# oc get cm <obc-name> -o yaml
obc-name
を OBC の名前に置き換えます。出力には、以下の環境変数が表示されることが予想されます。
-
BUCKET_HOST
: アプリケーションで使用するエンドポイント BUCKET_PORT
: アプリケーションで利用できるポート-
ポートは
BUCKET_HOST
に関連します。たとえば、BUCKET_HOST
が https://my.example.com で、BUCKET_PORT
が 443 の場合、オブジェクトサービスのエンドポイントは https://my.example.com:443 になります。
-
ポートは
-
BUCKET_NAME
: 要求されるか、生成されるバケット名 -
AWS_ACCESS_KEY_ID
: 認証情報の一部であるアクセスキー -
AWS_SECRET_ACCESS_KEY
: 認証情報の一部であるシークレットのアクセスキー
-
AWS_ACCESS_KEY_ID
と AWS_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 です。
手順
コマンドラインインターフェイスを使用して、新規バケットおよび認証情報の詳細を生成します。
以下のコマンドを実行します。
# 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 に通知します。
以下のコマンドを実行して OBC を表示します。
# oc get obc -n openshift-storage
以下に例を示します。
NAME STORAGE-CLASS PHASE AGE test21obc openshift-storage.noobaa.io Bound 38s
以下のコマンドを実行して、新規 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
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 アクセス認証情報を提供します。
以下のコマンドを実行して 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 (オブジェクトバケット要求) を作成できます。
前提条件
- OpenShift Web コンソールへの管理者アクセス。
- アプリケーションが OBC と通信できるようにするには、configmap およびシークレットを使用する必要があります。これに関する詳細情報は、「動的 Object Bucket Claim(オブジェクトバケット要求)」 を参照してください。
手順
- OpenShift Web コンソールにログインします。
左側のナビゲーションバーで Storage → Object Storage → Object Bucket Claims → Create Object Bucket Claim をクリックします。
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 リリースからアップグレードされたクラスターには適用されません。
-
Create をクリックします。
OBC を作成すると、その詳細ページにリダイレクトされます。
9.4. Object Bucket Claim(オブジェクトバケット要求) のデプロイメントへの割り当て
Object Bucket Claim (OBC) は作成後に、特定のデプロイメントに割り当てることができます。
前提条件
- OpenShift Web コンソールへの管理者アクセス。
手順
- 左側のナビゲーションバーで Storage → Object Storage → Object Bucket Claims をクリックします。
作成した OBC の横にあるアクションメニュー (⋮) をクリックします。
- ドロップダウンメニューで、Attach to Deployment を選択します。
- Deployment Name リストから必要なデプロイメントを選択し、Attach をクリックします。
9.5. OpenShift Web コンソールを使用したオブジェクトバケットの表示
OpenShift Web コンソールを使用して、Object Bucket Claim (OBC) 用に作成されたオブジェクトバケットの詳細を表示できます。
前提条件
- OpenShift Web コンソールへの管理者アクセス。
手順
- OpenShift Web コンソールにログインします。
左側のナビゲーションバーで Storage → Object Storage → Object Buckets をクリックします。
オプション: 特定の OBC の詳細ページに移動し、Resource リンクをクリックして、その OBC のオブジェクトバケットを表示することもできます。
- 詳細を表示するオブジェクトバケットを選択します。選択すると、Object Bucket Details ページに移動します。
9.6. Object Bucket Claim(オブジェクトバケット要求) の削除
前提条件
- OpenShift Web コンソールへの管理者アクセス。
手順
- 左側のナビゲーションバーで Storage → Object Storage → Object Bucket Claims をクリックします。
削除する Object Bucket Claim(オブジェクトバケット要求) の横にあるアクションメニュー (⋮) をクリックします。
- Delete Object Bucket Claim を選択します。
- Delete をクリックします。
第10章 オブジェクトバケットのキャッシュポリシー
キャッシュバケットは、ハブのターゲットとキャッシュターゲットが指定された namespace バケットです。ハブのターゲットは、S3 と互換性のある大規模なオブジェクトストレージバケットです。キャッシュのバケットは、ローカルの Multicloud Object Gateway (MCG) バケットです。AWS バケットまたは IBM COS バケットをキャッシュするキャッシュバケットを作成できます。
10.1. AWS キャッシュバケットの作成
前提条件
カスタマーポータル から Multicloud Object Gateway (MCG) コマンドラインインターフェイスバイナリーをダウンロードし、実行可能にする。
注記アーキテクチャーに応じて適切な製品バリアントを選択してください。利用可能なプラットフォームは、Linux (x86_64)、Windows、Mac OS です。
手順
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>
-
<namespacestore>
を namespacestore の名前に置き換えます。 -
<AWS ACCESS KEY>
および<AWS SECRET ACCESS KEY>
を、作成した AWS アクセスキー ID およびシークレットアクセスキーに置き換えます。 <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
-
<namespacestore>
を一意の名前に置き換えます。 -
<namespacestore-secret-name>
を、直前の手順で作成されたシークレットに置き換えます。 -
<namespace-secret>
を、直前の手順でシークレットを作成するために使用された namespace に置き換えます。 -
<target-bucket>
を namespacestore 用に作成した AWS S3 バケットに置き換えます。
-
以下のコマンドを実行してバケットクラスを作成します。
noobaa bucketclass create namespace-bucketclass cache <my-cache-bucket-class> --backingstores <backing-store> --hub-resource <namespacestore>
-
<my-cache-bucket-class>
を一意のバケットクラス名に置き換えます。 -
<backing-store>
を関連するバッキングストアに置き換えます。コンマで区切られた 1 つ以上のバッキングストアをリスト表示できます。 -
<namespacestore>
を、直前の手順で作成された namespacestore に置き換えます。
-
以下のコマンドを実行して、手順 2 に定義されたバケットクラスを使用する Object Bucket Claim (OBC) リソースを使用してバケットを作成します。
noobaa obc create <my-bucket-claim> my-app --bucketclass <custom-bucket-class>
-
<my-bucket-claim>
を一意の名前に置き換えます。 -
<custom-bucket-class>
を、手順 2 で作成したバケットクラスの名前に置き換えます。
-
10.2. IBM COS キャッシュバケットの作成
前提条件
カスタマーポータル から Multicloud Object Gateway (MCG) コマンドラインインターフェイスバイナリーをダウンロードし、実行可能にする。
注記アーキテクチャーに応じて適切な製品バリアントを選択してください。利用可能なプラットフォームは、Linux (x86_64)、Windows、Mac OS です。
手順
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>
-
<namespacestore>
を NamespaceStore の名前に置き換えます。 -
<IBM ACCESS KEY>
,<IBM SECRET ACCESS KEY>
,<IBM COS ENDPOINT>
を IBM アクセスキー ID、シークレットアクセスキー、および既存の IBM バケットの場所に対応する地域のエンドポイントに置き換えます。 <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
-
<namespacestore>
を一意の名前に置き換えます。 -
<IBM COS ENDPOINT>
を適切な IBM COS エンドポイントに置き換えます。 -
<backingstore-secret-name>
を、直前の手順で作成されたシークレットに置き換えます。 -
<namespace-secret>
を、直前の手順でシークレットを作成するために使用された namespace に置き換えます。 -
<target-bucket>
を namespacestore 用に作成した AWS S3 バケットに置き換えます。
-
以下のコマンドを実行してバケットクラスを作成します。
noobaa bucketclass create namespace-bucketclass cache <my-bucket-class> --backingstores <backing-store> --hubResource <namespacestore>
-
<my-bucket-class>
を一意のバケットクラス名に置き換えます。 -
<backing-store>
を関連するバッキングストアに置き換えます。コンマで区切られた 1 つ以上のバッキングストアをリスト表示できます。 -
<namespacestore>
を、直前の手順で作成された namespacestore に置き換えます。
-
以下のコマンドを実行して、手順 2 に定義されたバケットクラスを使用する Object Bucket Claim リソースを使用してバケットを作成します。
noobaa obc create <my-bucket-claim> my-app --bucketclass <custom-bucket-class>
-
<my-bucket-claim>
を一意の名前に置き換えます。 -
<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}}}}'
上記の例では、minCount
を 3
に、maxCount
を `10` に設定しています。
12.2. PV プールリソースの CPU とメモリーを増やす
MCG のデフォルト設定は、低リソース消費をサポートします。ただし、特定のワークロードに対応し、ワークロードの MCG パフォーマンスを向上させるために CPU とメモリーを増やす必要がある場合は、OpenShift Web コンソールで CPU とメモリーに必要な値を設定できます。
手順
- OpenShift Web コンソールで、Storage → Object Storage → Backing Store に移動します。
- 関連するバッキングストアを選択し、YAML をクリックします。
spec:
が見つかるまで下にスクロールし、pvPool
を CPU およびメモリーで更新します。制限の新しいプロパティーを追加してから、cpu と memory を追加します。参照例:
spec: pvPool: resources: limits: cpu: 1000m memory: 4000Mi requests: cpu: 800m memory: 800Mi storage: 50Gi
- 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 サーバーにアクセスする
AccessKey
や Secret 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
の証明書を再利用することができます。