IBM Cloud Pak for Data 用の Multicloud Object Gateway のインストールとセットアップ例

「IBM Cloud Pak for Data 用の Multicloud Object Gateway のインストールとセットアップ」について、ROSA環境でS3をバッキングストアとして使用する場合の手順例です。

IBM Cloud Pak for Data 4.7.x Official doc:

https://www.ibm.com/docs/ja/cloud-paks/cp-data/4.7.x?topic=cluster-installing-multicloud-object-gateway


Watson Assistant、 Watson Discovery、 Watson Knowledge Studio、または Watson Speech servicesのインストールを計画している場合で、永続ストレージとしてRed Hat OpenShift Data Foundation または IBM Storage Fusion Data Foundation を使用していない場合に必要となる手順です。詳細は、IBM Cloud Pak for Data 4.7.x Official docをご参照ください。

注）当記事の内容は2023年8月に実施したものであり、今後変更される場合があります。


## 1. スタンドアロンの Multicloud Object Gateway のデプロイ

参考：[スタンドアロンの Multicloud Object Gateway のデプロイ](https://access.redhat.com/documentation/ja-jp/red_hat_openshift_data_foundation/4.12/html/deploying_openshift_data_foundation_using_amazon_web_services/deploy-standalone-multicloud-object-gateway#installing-openshift-data-foundation-operator-using-the-operator-hub_rhodf)


1. OpenShift Web コンソールにログインします。
2. Operators → OperatorHub をクリックします。
3. スクロールするか、または OpenShift Data Foundation を Filter by keyword ボックスに入力し、`OpenShift Data Foundation` Operator を検索し、クリックします。
 ![operator1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2164968/7ca6b77d-4b39-0528-7c38-274ce94d1a69.png)

4. `インストール` をクリックします。
 ![operator2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2164968/09c95457-5876-23c6-b691-0b45a4751bf9.png)

5. Operatorのインストール ページで、以下のオプションを設定します。
    i. 更新チャネルに `stable-4.12` を選択します。
    ii. インストールモード オプションに `クラスターの特定のnamespace` を選択します。
    iii. インストール済みのNamespace に `Operator 推奨のnamespace: openshift-storage` を選択します。namespace openshift-storage が存在しない場合、これは Operator のインストール時に作成されます。
     iv. 更新の承認ストラテジー について、自動 または 手動 を選択します。
         - **自動更新**を選択した場合、Operator Lifecycle Manager (OLM) は介入なしに、Operator の実行中のインスタンスを自動的にアップグレードします。
         - **手動更新**を選択した場合、OLM は更新要求を作成します。クラスター管理者は、Operator を新しいバージョンに更新できるように更新要求を手動で承認する必要があります。
      v. Console プラグイン に `有効にする` が選択されていることを確認します。
      vi. `インストール` をクリックします。 
  ![operator3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2164968/2a93ea83-3257-b8ad-6369-968bcb9ec834.png)


#### 確認

- Operator が正常にインストールされると、「Web コンソールの更新を利用できます」というポップアップがユーザーインターフェイスに表示されます。このポップアップから `Web コンソールの更新` をクリックして、コンソールに変更を反映します。
![operator4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2164968/7149da3d-4106-2580-ff54-cf250c831c16.png)

- Web コンソールに移動します。
    -  「ストレージ」 に移動し、`Data Foundation` ダッシュボードが使用可能であることを確認します。 
    ![operator6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2164968/6a0a5aa6-0307-0ca2-c467-e79e68f6577d.png)
    - 「インストール済みの Operator」 に移動し、OpenShift Data Foundation Operator に、インストールが正常に実行されたことを示す緑色のチェックマークが表示されていることを確認します。
    ![operator5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2164968/f3d13adb-3e5e-bbdf-449a-3d5ab3bd6c39.png)

## 2. スタンドアロンの Multicloud Object Gateway の作成
参考：[スタンドアロンの Multicloud Object Gateway の作成](https://access.redhat.com/documentation/ja-jp/red_hat_openshift_data_foundation/4.12/html/deploying_openshift_data_foundation_using_amazon_web_services/creating-standalone-multicloud-object-gateway_rhodf)

1. OpenShift Web コンソールで、Operators → インストール済みの Operator をクリックし、インストールされた Operator を表示します。
    選択された Project が openshift-storage であることを確認します。
2. `OpenShift Data Foundation` Operator をクリックした後、`StorageSystem の作成` をクリックします。
 ![operator7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2164968/2f6c7065-59e6-656e-6761-e879c5c126c5.png)

3. StorageSystem の作成 ページで、以下を選択します。
     i. Deployment タイプ に `Multicloud Object Gateway` を選択します。
     ii.   `既存の StorageClass の使用` オプションを選択します。
     iii.  `次へ` をクリックします。 
![create_storagesystem1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2164968/6646b620-cba7-1caf-15a2-f5d5e647dbf9.png)

4. セキュリティー ページはそのまま`次へ`をクリックします。
![create_storagesystem2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2164968/a1dc6bd5-a175-d274-0830-fe34510ed273.png)

5. 確認および作成 ページで、設定の詳細を確認します。`StorageSystem の作成`をクリックします。 
![create_storagesystem3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2164968/f309477a-31e9-27a7-3d07-a62ab6024647.png)


#### 確認
このステップを完了すると、Data Foundationダッシュボードに「バッキングストア」、「バケットクラス」、「namespace ストア」カードが追加されます。

![create_storagesystem4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2164968/d36ccd39-603e-04af-183e-6092c920ca10.png)


## 3. 新規バッキングストアの作成
参考：[ハイブリッドまたはマルチクラウド用のストレージリソースの追加 - 新規バッキングストアの作成](https://access.redhat.com/documentation/ja-jp/red_hat_openshift_data_foundation/4.12/html/managing_hybrid_and_multicloud_resources/adding-storage-resources-for-hybrid-or-multicloud_rhodf)

:::note info
このステップを実行する前に、エンタープライズ・グレードの S3 互換ストレージ上にバッキングストアを作成するか、インストールする予定のサービスごとにバッキングストアを作成する必要があります。


Amazon S3 bucketをセットアップし、アクセスに必要な認証情報を入手する手順の例は[こちら](https://qiita.com/mizutan/items/1b5d0517fde62853f3aa)をご参照ください。
:::

1. OpenShift Web コンソールで、「ストレージ」 → 「Data Foundation」 に移動し、「バッキングストア」カードに移り、`作成 Backing Store` をクリックします。 
![backingstore1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2164968/9d00c16e-5993-89cc-6e3f-53f5073ea80e.png)

2. セットアップ済みのバッキングストア用ストレージの情報を入力し、`BuckingStore の作成`をクリックします。以下は、Amazon S3 bucketに認証情報を使用してアクセスする場合の入力例です。
![backingstore2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2164968/d647fa9a-3230-964d-cf8b-4beac29825b9.png)

3. バッキングストアができました。
![backingstore3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2164968/1c758cfb-2f38-61a3-fb37-352d3fcafb8e.png)


## 4. NooBaa アカウントの作成（オプション）
Multicloud Object Gatewayにアクセスするサービスごとに異なる ID を作成する場合は、サービスごとに NooBaa アカウントを作成します。
```
export ACCOUNT_NAME=<service-account-name>

export BACKING_STORE=<backing-store-name>

cat <<EOF | oc apply -f -
apiVersion: noobaa.io/v1alpha1
kind: NooBaaAccount
metadata:
  labels:
    app: noobaa
  name: ${ACCOUNT_NAME}
  namespace: openshift-storage
spec:
  default_resource: ${BACKING_STORE}
  allow_bucket_creation: true
  allowed_buckets:
    full_permission: true
    permission_list: []
EOF
```
実行例
```
# export ACCOUNT_NAME=watson-discovery-noobaa-account
# export BACKING_STORE=rosa-wd-s3
# cat <<EOF | oc apply -f -
> apiVersion: noobaa.io/v1alpha1
> kind: NooBaaAccount
> metadata:
>   labels:
>     app: noobaa
>   name: ${ACCOUNT_NAME}
>   namespace: openshift-storage
> spec:
>   default_resource: ${BACKING_STORE}
>   allow_bucket_creation: true
>   allowed_buckets:
>     full_permission: true
>     permission_list: []
> EOF
noobaaaccount.noobaa.io/watson-discovery-noobaa-account created
```

ここでサービスごとの NooBaa アカウントを作成した場合、openshift-storage namespace に該当アカウントのシークレットが作成されます。今回作成したアカウント `watson-discovery-noobaa-account` の場合は、`noobaa-account-watson-discovery-noobaa-account`です。このシークレットを [Multicloud Object Gateway を使用するサービスのシークレットの作成](https://www.ibm.com/docs/ja/cloud-paks/cp-data/4.7.x?topic=piicpd-creating-secrets-services-that-use-multicloud-object-gateway) の手順を実行する際、環境変数 `NOOBAA_ACCOUNT_CREDENTIALS_SECRET` に設定します。

```
# oc get secrets -n openshift-storage
NAME                                                 TYPE                                  DATA   AGE
:
noobaa-account-watson-discovery-noobaa-account       Opaque                                2      20h
noobaa-admin                                         Opaque                                5      20h
noobaa-db                                            Opaque                                2      20h
noobaa-db-dockercfg-5cdfh                            kubernetes.io/dockercfg               1      20h
noobaa-db-serving-cert                               kubernetes.io/tls                     2      20h
noobaa-db-token-d9gvz                                kubernetes.io/service-account-token   4      20h
noobaa-dockercfg-qmtss                               kubernetes.io/dockercfg               1      20h
noobaa-endpoint-dockercfg-6zcvt                      kubernetes.io/dockercfg               1      20h
noobaa-endpoint-token-tl9rd                          kubernetes.io/service-account-token   4      20h
noobaa-endpoints                                     Opaque                                1      20h
noobaa-mgmt-serving-cert                             kubernetes.io/tls                     2      20h
noobaa-odf-ui-dockercfg-6f9zn                        kubernetes.io/dockercfg               1      20h
noobaa-odf-ui-token-hhzk4                            kubernetes.io/service-account-token   4      20h
noobaa-operator                                      Opaque                                1      20h
noobaa-operator-service-cert                         kubernetes.io/tls                     3      20h
noobaa-root-master-key                               Opaque                                1      20h
noobaa-s3-serving-cert                               kubernetes.io/tls                     2      20h
noobaa-server                                        Opaque                                2      20h
noobaa-token-jxl6w                                   kubernetes.io/service-account-token   4      20h
:
```