IBM Cloud Satelliteで複数クラスタにConfigのSubscriptionをロールアウトしてみる

# 目的

2021年9月25日未明にIBM Cloud東京リージョンでIBM Cloud Satelliteが使用可能になりました。だからというわけではないですが、IBM Cloud Satelliteの機能であるConfig（構成）の配布機能を試してみます。

# 環境

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/1c2375be-00e9-00d8-37b3-975ef2b05c8e.png)

2つのRed Hat OpenShift on IBM（ROKS）クラスタを用意します。1つはIBM Cloud提供の通常のクラスタ、もう1つはIBM Cloud Satelliteによるクラスタとします。

2つのクラスタは同じクラスタグループに属します。

ConfigはROKSの構成情報（マニフェスト）を保持します。構成情報はバージョンと呼ばれます。

Configとそれを適用するクラスタグループの関係をSubscriptionと呼びます。つまり、ROKSの構成情報はSubscriptionを通じてクラスタグループ内の各クラスタに適用されます。

> 外部のイメージレジストリからイメージを取得する必要があるため、完全プライベートなクラスターは登録できません

# 手順

## クラスタグループの作成

2つのクラスタはすでに作成済とします。

コンソールでSatelliteのクラスターを確認します。現時点ではSatelliteで構成したROKSのみ表示されています。これに非Satelliteの既存クラスターを追加します。クラスターの接続を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/c165e037-935d-a6b5-f1d7-2a3aad93244e.png)

これから追加するクラスタの名称（任意）を指定します。クラスターの登録を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/30ade0f5-c431-8b35-29dc-8916cdfafa38.png)

コマンドが表示されます。これを非Satelliteクラスター側で実行します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/fb416ce1-d177-19f9-2622-017d903e91f6.png)

```
$ kubectl apply -f "https://config.satellite.cloud.ibm.com/api/install/razeedeploy-job?********"
namespace/razeedeploy created
serviceaccount/razeedeploy-sa created
clusterrole.rbac.authorization.k8s.io/razeedeploy-admin-cr created
clusterrolebinding.rbac.authorization.k8s.io/razeedeploy-rb created
job.batch/razeedeploy-job-1632589606445 created
```

```
$ oc get pods -n razeedeploy
NAME                                           READY   STATUS      RESTARTS   AGE
clustersubscription-7858c6b4b6-fxt6b           1/1     Running     0          58s
encryptedresource-controller-59874c676-tzcjm   1/1     Running     0          55s
mustachetemplate-controller-6797f6b7d5-8phg6   1/1     Running     0          56s
razeedeploy-job-1632589606445-pntcn            0/1     Completed   0          87s
remoteresource-controller-67b786489d-dhbc4     1/1     Running     0          57s
watch-keeper-5d85779865-rbb2d                  1/1     Running     0          58s
```

コンソールを確認すると、追加したクラスターがアクティブになっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/392bf18f-63fb-3cf6-5267-b2d5deb01659.png)

SatelliteのROKSはクラスターの再接続を選択し、先ほどと同様に表示されたコマンドを実行します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/944c1e1d-2c36-fbe7-da8f-ad60a138c2f9.png)

しばらく待つとアクティブになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/ec71794c-c8be-c287-d6de-611d1b959f95.png)

クラスターグループタブを選択します。クラスターグループの作成を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/f9c9184c-c4bc-99eb-a6ee-83d2761b1e37.png)

任意の名称を指定し作成を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/3c577669-e634-c9a9-7041-ad6938eb6c4f.png)

作成したクラスターグループを選択します、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/07428b75-fd13-b6a0-17f4-9838a7d209d8.png)

クラスターの追加を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/946507a9-79f4-1e3c-5902-932993c5a03a.png)

2つのクラスターを選択し、追加を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/4aaa2e5e-ada2-dc72-8ddd-3c3d63b808c2.png)

クラスターが追加されたことを確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/4a2a0423-6c44-bcb8-60fe-0f2467016a4d.png)

## Configの作成

コンソールからSatelliteの構成を選択します。構成の作成を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/d86443cc-04e8-a968-4f6e-eb35e77c9f85.png)

任意の名称を指定して作成を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/bf6f45ce-920f-9366-3cf9-2f5cec0424e8.png)

作成したConfigを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/c03a795f-ac80-5740-f2ff-441900c6f511.png)

バージョンを選択します。バージョンの追加を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/9c58730c-862a-2c8c-1aa5-2dbf162d127e.png)

任意のバージョン名を指定します。マニフェストを登録します。今回はとりあえず新規ネームスペースを追加します。最後に追加を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/2fb84bc1-c824-3fda-f8a8-9722f1540766.png)

一覧に追加されました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/6a4e3795-bdc6-2197-de1c-a033f4bf420d.png)

## サブスクリプションの作成

概要を選択します。サブスクリプションの作成を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/72f1198b-00f7-76b3-7796-4ea1f0d5f7ce.png)

任意の名称、適用するバージョン、適用先のクラスターグループを指定します。作成を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/fb62f1ba-d989-78b6-45b8-651022b89eb0.png)

一覧に追加されました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/28323492-6f94-034e-74bf-ba0d68bd5386.png)

## サブスクリプションのロールアウト

現時点では何も起きません。いったん編集を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/9c1ee9d8-1982-7de2-117f-feb7d849e0c4.png)

特に何も変更せず保存を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/cb343bc2-120b-455e-3018-5e9fa4a1e5f9.png)

``デプロイされました``と表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/326125ed-dec7-7fe0-99d4-0c7897f906c4.png)

> このように、ロールアウトするために一度編集を開き保存しなおす必要があることが正しい動きかどうかは不明です

実機を確認します。

```
# roks-public-tok
$ oc get ns | grep ns-
ns-sample                                          Active   6m

# roks-satellite-tok
$ oc get ns | grep ns-sample
ns-sample                                          Active   2m11s
```

## サブスクリプションの削除

サブスクリプションを削除します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241424/68a4dc29-6fd4-1e1a-a669-1b362d77b46b.png)

すると実機からも削除されます。

```
$ oc get ns | grep ns-sample
```

# 感想

複数のクラスタをIBM Cloud Satelliteで管理できているように見えますので、マネジメントやアーキテクトの受けはいいかもしれません。

個人的にはこのような構成管理は別のツールで行うべきと思っていますので、実運用で使うかは微妙です。今後の進化（あれば）に期待しましょう。