複数のMCG使用CP4Dサービスインストール時、各サービスに別の pv-pool バッキングストアを使用させる

IBM Cloud Pak for Data（以降 CP4D）のいくつかのサービスではMulticloud Object Gateway（以降 MCG）を使用します。今回、スタンドアロンMCGをインストールし、pv-poolを使用するバッキングストアの環境に、複数のMCG使用CP4Dサービスをインストールしました。

2つ目以降のCP4Dサービス用に新規のバッキングストアを使用させる手順を紹介します。

## はじめに

CP4Dの以下のサービスでは、Multicloud Object Gatewayが必要です。
- watsonx Assistant
- Watson Discovery
- Watson Speech services

今回、Watson Discovery と Watson Speech servicesをインストールしました。
それに関するベストプラクティスとして、次の記述があります。

:::note info
Multicloud Object Gateway のインストール時に作成されたバッキングストアが pv-poolを使用する場合は、エンタープライズ・グレードの S3 互換ストレージ上にバッキングストアを作成するか、インストールする予定のサービスごとにバッキングストアを作成します。
:::

スタンドアロンMCGをインストールすると、`noobaa-default-backing-store` というバッキングストアが自動で作成されます。今回、Watson Discoveryにこのデフォルト・バッキングストア`noobaa-default-backing-store` を使用することとしました。

そして、Watson Speech services に新規バッキングストアを使用するように構成しました。

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

以下、Watson Speech services 用に新規バッキングストアを作成し、使用するようにする手順例です。

# 1. バッキングストアの作成

Watson Speech services 用のバッキングストアを作成します。
OpenShift Webコンソールにログインし、ストレージ > Data Foundation の `バッキングストア` タブから `作成 Backing Store` をクリックします。
必要な情報を入力し、`BackingStore の作成` をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2164968/706a1a7d-0663-829c-16d0-c9ac7bfed611.png)

バッキングストア`backing-store-watsonspeech` が作成できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2164968/66f6fdfe-f537-d0a3-ac9f-94980e08668d.png)

コマンドでも確認できます。
```
# oc get backingstore -n openshift-storage
NAME                           TYPE      PHASE   AGE
backing-store-watsonspeech     pv-pool   Ready   150m
noobaa-default-backing-store   pv-pool   Ready   3d6h
```

PVCもできています。
```
# oc get pvc -A | grep backing
openshift-storage        backing-store-watsonspeech-noobaa-pvc-2327861c     Bound    pvc-e1fa8d29-a694-45cb-99a3-303a51a15738      50Gi       RWO            ibm-storage-fusion-cp-sc      3h37m
openshift-storage        noobaa-default-backing-store-noobaa-pvc-cf205b69   Bound    pvc-70f03e51-cc16-4896-8f41-464a59bcd6c9      50Gi       RWO            ibm-storage-fusion-cp-sc      3d8h
```

# 2. NooBaaアカウントの作成

Watson Speech services 用のNooBaaアカウントを作成します。
ここで、このアカウントが上で作成したバッキングストアを使用するよう指定します。

```bash:コマンド例
export ACCOUNT_NAME=watson-speech-noobaa-account
export BACKING_STORE=backing-store-watsonspeech

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
```

# 3. サービスシークレットの作成
サービスが Multicloud Object Gatewayとの通信に使用するシークレットを作成します。シークレットにより、サービスは openshift-storage プロジェクト内の以下のシークレットにアクセスできるようになります。

 - NooBaa アカウント資格情報を含むシークレット。
 - NooBaa アカウント証明書を含むシークレット。

CP4D docではこの手順は別のページになっていますが、一連の手順です。

https://www.ibm.com/docs/ja/cloud-paks/cp-data/4.8.x?topic=piicpd-creating-secrets-services-that-use-multicloud-object-gateway



1. Watson Speech services 用のNooBaaアカウント`watson-speech-noobaa-account` の資格情報と証明書を含むシークレットの名前を取得します。
    ```text:実行例
    # oc get secrets --namespace=openshift-storage
    NAME                                                 TYPE                                  DATA   AGE
    backing-store-pv-pool-backing-store-watsonspeech     Opaque                                1      3d22h
    backing-store-pv-pool-noobaa-default-backing-store   Opaque                                1      7d2h
    builder-dockercfg-xzjhv                              kubernetes.io/dockercfg               1      7d3h
    builder-token-q287h                                  kubernetes.io/service-account-token   4      7d3h
    csi-addons-controller-manager-dockercfg-7grw8        kubernetes.io/dockercfg               1      7d3h
    csi-addons-controller-manager-token-bz4mg            kubernetes.io/service-account-token   4      7d3h
    default-dockercfg-rhq9z                              kubernetes.io/dockercfg               1      7d3h
    default-token-vtqrx                                  kubernetes.io/service-account-token   4      7d3h
    deployer-dockercfg-pdpqv                             kubernetes.io/dockercfg               1      7d3h
    deployer-token-dgj4b                                 kubernetes.io/service-account-token   4      7d3h
    noobaa-account-watson-discovery-noobaa-account       Opaque                                2      7d2h
    noobaa-account-watson-speech-noobaa-account          Opaque                                2      40s
    noobaa-admin                                         Opaque                                5      7d3h
    noobaa-db                                            Opaque                                2      7d3h
    noobaa-db-dockercfg-wnqn8                            kubernetes.io/dockercfg               1      7d3h
    noobaa-db-serving-cert                               kubernetes.io/tls                     2      7d3h
    :
    ```

2. クラスター上のシークレットの名前に基づいて、以下の環境変数を設定します。
    ```text:実行例
    # export NOOBAA_ACCOUNT_CREDENTIALS_SECRET=noobaa-account-watson-speech-noobaa-account
    # export NOOBAA_ACCOUNT_CERTIFICATE_SECRET=noobaa-s3-serving-cert
    ```

3. Watson Speech services をインストールする予定のCP4Dインスタンスに、 Watson Speech services が Multicloud Object Gatewayへの接続に使用するシークレットを作成します。 
    a. setup-mcg コマンドを実行して、シークレットを作成します。


    ```
    cpd-cli manage setup-mcg \
    --components=watson_speech \
    --cpd_instance_ns=${PROJECT_CPD_INST_OPERANDS} \
    --noobaa_account_secret=${NOOBAA_ACCOUNT_CREDENTIALS_SECRET} \
    --noobaa_cert_secret=${NOOBAA_ACCOUNT_CERTIFICATE_SECRET}
    ```
    b. インスタンスの オペランド・プロジェクト でシークレットが作成されたことを確認します。
    ```text:実行例
    # oc get secrets --namespace=${PROJECT_CPD_INST_OPERANDS} \
    > noobaa-account-watson-speech
    NAME                           TYPE     DATA   AGE
    noobaa-account-watson-speech   Opaque   2      11s
    ```

### 検証環境
- IBM Storage Fusion HCI Sytem 2.7.2, OCP 4.12
- CP4D 4.8.4 (永続ストレージ: IBM Storage Fusion Global Data Platform)
    - インストールするMCG使用サービス
        - Watson Discovery
        - Watson Speech services