Red Hat OpenShift on IBM Cloudが新しい柔軟な価格体系になったので変更してみた

#はじめに

去る2020/11にIBM Cloudが提供するマネージドOpenShiftサービスであるRed Hat OpenShift on IBM Cloudの料金体系が改定されました。この料金改定により、料金が安くなるとともに時間単位の課金が導入されました。詳細は次のサイトをご参照ください。（参考記事： [Red Hat OpenShift on IBM Cloud の新しい柔軟な価格体系について](https://www.ibm.com/blogs/solutions/jp-ja/lower-hourly-prices-for-red-hat-openshift-on-ibm-cloud/)）
私の手元にあるRed Hat OpenShift on IBM Cloudの環境は料金改定発表前に構築したものであるため、そのままの状態では古い料金体系で課金されていました。年末を迎えるに当たり、大掃除の一貫として無駄な出費を抑えるべく手元の環境を新料金体系に対応した記録を記載します。
なお、本記事は執筆時点（2020/12/24）の情報である点ご注意ください。

# 記事内容を3行で書くと

Red Hat OpenShift on IBM Cloudの料金を抑えるため
ワーカー・プールを入れ替えて
新料金体系に対応させた

# どれだけお得なのか？

こちらの情報はあくまで本記事執筆時点の情報であり、利用環境・条件により異なる可能性がある点、ご注意ください。

## 前提環境

利用サービス：Red Hat OpenShift on IBM Cloud
フレーバー：bx2.4x16 - 4 vCPU 16GB RAM
ワーカー・プール：ゾーン毎に1ノードの計3ノード構成
リージョン：ダラス(us-south)
ゾーン：3 zone (us-south-1, us-south-2, us-south-3)
ネットワーク：VPC Gen2


## 見積もり画面比較

[こちら](https://cloud.ibm.com/kubernetes/catalog/create?platformType=openshift)のサイトから環境構築時に見積もりをおこなった結果（キャプチャ）を記載します。

- 2020/10/05時点の見積もり情報

![20201005price.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142407/a22c5119-09c0-2a56-01f3-d2c826798c9f.png)

- 2020/12/23時点の見積もり情報

![20201223price.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142407/7c5ad4fa-b0e2-2e3c-dce7-4edf77d91afc.png)

だいぶお安くなっています。

# やったこと

前述の[リンク先](https://www.ibm.com/blogs/solutions/jp-ja/lower-hourly-prices-for-red-hat-openshift-on-ibm-cloud/)の記載されているように、_既存のクラスターは、これまでの月額料金モデルから新たな時間単位の料金モデルには自動的に移行されません。_ そのため、対応方法として次の2通りの方法が紹介されています。

1. 完全に新しいクラスターを作成する方法
2. 同じクラスター内に2つめのワーカー・プールを作成してから、1つめのワーカー・プールを削除する方法

1.の新規クラスターを作成する方法はまあ当たり前だよねということで、今回は2.の方法を試しました。



## 変更前の状態

- IBM Cloud上での構成

クラスター構成

![cluster00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142407/240d1262-855b-5a05-a230-0d27ed1bad32.png)


クラスターワーカーノード構成

![cluster02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142407/4c215730-f853-2881-2975-3ffecbd60b81.png)

クラスターワーカー・プール構成

![cluster01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142407/4ea73d11-b2ee-69ac-07e9-4e42e3de9872.png)


- IBM Cloud CLIでの確認

せっかくなので、GUIの結果と合わせてCLIの出力結果を併記します。

クラスター構成

```
[user@vsi ~]$ ibmcloud oc cluster get --cluster xxxxxxxxxx
Retrieving cluster xxxxxxxxxx...
OK

Name:                           mycluster-us-south-1-bx2.4x16
ID:                             xxxxxxxxxx
State:                          warning
Status:                         Could not upload certificates to Certificate Manager instance. Ensure you have the correct IAM permissions. For more info, see http://ibm.biz/ingress-secret
Created:                        2020-10-15 00:54:49 -0500 (2 months ago)
Resource Group ID:              xxxxxxxxxx
Resource Group Name:            xxxxxxxxxx
Pod Subnet:                     172.17.0.0/18
Service Subnet:                 172.21.0.0/16
Workers:                        3
Worker Zones:                   us-south-1, us-south-2, us-south-3
Ingress Subdomain:              xxxxxxxxxx.us-south.containers.appdomain.cloud
Ingress Secret:                 xxxxxxxxxx
Ingress Status:                 warning
Ingress Message:                Could not upload certificates to Certificate Manager instance. Ensure you have the correct IAM permissions. For more info, see http://ibm.biz/ingress-secret
Creator:                        -
Public Service Endpoint URL:    https://xxxxxxxxxx.ibm.com:30427
Private Service Endpoint URL:   https://xxxxxxxxxx.ibm.com:30427
Pull Secrets:                   enabled in the default namespace
VPCs:                           xxxxxxxxxx

Master
Status:     Ready (6 days ago)
State:      deployed
Health:     normal
Version:    4.5.18_1523_openshift
Location:   Dallas
URL:        https://xxxxxxxxxx.ibm.com:30427
[user@vsi ~]$
```
※警告が出ているが、ここでは一旦無視します。

クラスターワーカーノード構成

```
[user@vsi ~]$ ibmcloud oc worker ls --cluster xxxxxxxxxx
OK
ID                                                       Primary IP     Flavor     State    Status   Zone         Version
kube-xxxxxxxxxx-myclusterus-default-0000047e   10.240.0.5     bx2.4x16   normal   Ready    us-south-1   4.5.13_1515_openshift*
kube-xxxxxxxxxx-myclusterus-default-0000068c   10.240.136.6   bx2.4x16   normal   Ready    us-south-3   4.5.13_1515_openshift*
kube-xxxxxxxxxx-myclusterus-default-0000073f   10.240.64.6    bx2.4x16   normal   Ready    us-south-2   4.5.13_1515_openshift*

* To update to 4.5.22_1524_openshift version, run 'ibmcloud ks worker update'. Review and make any required version changes before you update: 'https://ibm.biz/upworker'
```
※OpenShiftのバージョンアップを促されていますが、ここでは一旦無視します。この点後で注意ポイントとなります。

クラスターワーカー・プール構成

```
[user@vsi ~]$ ibmcloud oc worker-pool ls --cluster xxxxxxxxxx
OK
Name                  ID           Flavor     Workers
default               xxxxxxxxxx   bx2.4x16   3
```

## 変更作業

変更作業は[こちらの手順](https://cloud.ibm.com/docs/openshift?topic=openshift-add_workers#vpc_add_pool)を参考にして、GUIで実施します。リンク先はCLIの手順となっていますので、流れだけ参考にしています。
手順は以下の通りです。

1. ワーカー・プールの追加
2. ワーカー・プール追加後の確認
3. 既存のワーカー・プール削除

では、手順を紹介します。

1 ワーカー・プールの追加

ワーカー・プールの画面から、「追加」をクリックします。
![cluster01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142407/8157da15-ce0b-2600-8982-177b5392e201.png)

今回は既存環境と同じ構成でワーカーノードを入れ替えるだけなので、既存ワーカー・プールと同じフレーバー、ゾーン構成を指定します。
![addpool01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142407/b859afce-422d-ec80-727f-cab12e62fc1b.png)

ワーカー・プールが追加されていることを確認します。
![addpool02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142407/be9fdbd8-2bc8-bb87-726c-23eda13b7945.png)

同時にワーカーノードの状態を見るとプロビジョンされていることが確認できます。（下の3ノードが追加したノード）
![addpool03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142407/a180791b-b47a-b14e-2609-fb0c991fecd7.png)
※どうも、追加されたノードはバージョンが新しく4.5.22_1524となっていました。こちらどうせなら同じバージョンで構成したい気持ちですが、少なくともGUIでは指定箇所は見当たりませんでした。特に本番稼働環境などで適用する場合は注意が必要と考えます。今回はチケット等での確認は行っていません。どなたか情報お持ちの方がいればコメントいただければと思います。

2,30分待つとReadyの状態になります。
![addpool04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142407/7fbac0eb-cf5e-77ff-e330-9f4e3fb14739.png)



2 ワーカー・プール追加後の確認

ワーカー・プール追加後の状態を確認しておきます。こちらはCLIで実施しました。

クラスター構成

```
[user@vsi ~]$ ibmcloud oc cluster get --cluster xxxxxxxxxx
Retrieving cluster xxxxxxxxxx...
OK

Name:                           mycluster-us-south-1-bx2.4x16
ID:                             xxxxxxxxxx
State:                          warning
Status:                         Some Workers Not Normal
Created:                        2020-10-15 00:54:49 -0500 (2 months ago)
Resource Group ID:              xxxxxxxxxx
Resource Group Name:            xxxxxxxxxx
Pod Subnet:                     172.17.0.0/18
Service Subnet:                 172.21.0.0/16
Workers:                        6
Worker Zones:                   us-south-1, us-south-2, us-south-3
Ingress Subdomain:              xxxxxxxxxx
Ingress Secret:                 xxxxxxxxxx
Ingress Status:                 warning
Ingress Message:                Could not upload certificates to Certificate Manager instance. Ensure you have the correct IAM permissions. For more info, see http://ibm.biz/ingress-secret
Creator:                        -
Public Service Endpoint URL:    https://xxxxxxxxxx.ibm.com:30427
Private Service Endpoint URL:   https://xxxxxxxxxx.ibm.com:30427
Pull Secrets:                   enabled in the default namespace
VPCs:                           xxxxxxxxxx

Master
Status:     Ready (6 days ago)
State:      deployed
Health:     normal
Version:    4.5.18_1523_openshift
Location:   Dallas
URL:        https://xxxxxxxxxx.ibm.com:30427
```
バージョン表記は古いバージョンのまま。

ノードの状態

```
[user@vsi ~]$ ibmcloud oc worker ls --cluster xxxxxxxxxx
OK
ID                                                       Primary IP     Flavor     State    Status   Zone         Version
kube-xxxxxxxxxx-myclusterus-default-0000047e   10.240.0.5     bx2.4x16   normal   Ready    us-south-1   4.5.13_1515_openshift*
kube-xxxxxxxxxx-myclusterus-default-0000068c   10.240.136.6   bx2.4x16   normal   Ready    us-south-3   4.5.13_1515_openshift*
kube-xxxxxxxxxx-myclusterus-default-0000073f   10.240.64.6    bx2.4x16   normal   Ready    us-south-2   4.5.13_1515_openshift*
kube-xxxxxxxxxx-myclusterus-newpric-000008cf   10.240.64.4    bx2.4x16   normal   Ready    us-south-2   4.5.22_1524_openshift
kube-xxxxxxxxxx-myclusterus-newpric-000009b6   10.240.136.4   bx2.4x16   normal   Ready    us-south-3   4.5.22_1524_openshift
kube-xxxxxxxxxx-myclusterus-newpric-00000a62   10.240.0.4     bx2.4x16   normal   Ready    us-south-1   4.5.22_1524_openshift

* To update to 4.5.22_1524_openshift version, run 'ibmcloud ks worker update'. Review and make any required version changes before you update: 'https://ibm.biz/upworker'
```

ocコマンドでも確認してみる。

```
[user@vsi ~]$ oc get node
NAME           STATUS   ROLES           AGE    VERSION
10.240.0.4     Ready    master,worker   134m   v1.18.3+fa69cae
10.240.0.5     Ready    master,worker   69d    v1.18.3+47c0e71
10.240.136.4   Ready    master,worker   129m   v1.18.3+fa69cae
10.240.136.6   Ready    master,worker   69d    v1.18.3+47c0e71
10.240.64.4    Ready    master,worker   133m   v1.18.3+fa69cae
10.240.64.6    Ready    master,worker   68d    v1.18.3+47c0e71
[user@vsi ~]$
[user@vsi ~]$ oc get pod -n logtest
NAME            READY   STATUS    RESTARTS   AGE
fluentd-6q2zj   1/1     Running   0          8m19s
fluentd-6w5zp   1/1     Running   0          20d
fluentd-cj8dc   1/1     Running   0          20d
fluentd-js4kx   1/1     Running   0          20d
fluentd-p4d58   1/1     Running   0          4m47s
fluentd-vc4ww   1/1     Running   0          9m12s
```
→Daemonsetで構成しているFluentdがすべてのノードに配置されています。

3 既存のワーカー・プール削除

新しくワーカー・プールを作成し、ノードがクラスターに追加されたことが確認できたので、既存のワーカー・プールを削除します。こちらもGUIで実施します。

既存のワーカー・プール（defaultのほう）を選択し、「削除」をクリックします。
![delpool01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142407/387ba02a-d043-2570-dc05-1db68d00d62a.png)

確認画面で「削除」をクリックします。
![delpool02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142407/76f0130d-8656-582a-25af-c9bfebc867ec.png)

ワーカーノード一覧画面から削除されていることが確認できます。
![delpool03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142407/bb72c5cb-dad4-4bfd-526b-cd3a7f66dacd.png)

（参考）この時、削除対象ノードはSchedulingDisabledのステータスとなります。

```
[user@vsi ~]$ oc get node
NAME           STATUS                        ROLES           AGE    VERSION
10.240.0.4     Ready                         master,worker   140m   v1.18.3+fa69cae
10.240.0.5     Ready,SchedulingDisabled      master,worker   69d    v1.18.3+47c0e71
10.240.136.4   Ready                         master,worker   135m   v1.18.3+fa69cae
10.240.136.6   NotReady,SchedulingDisabled   master,worker   69d    v1.18.3+47c0e71
10.240.64.4    Ready                         master,worker   139m   v1.18.3+fa69cae
10.240.64.6    Ready,SchedulingDisabled      master,worker   68d    v1.18.3+47c0e71
```

20分程度で削除されました。
![delpool04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142407/8110edab-8488-abef-e436-11616f0cd849.png)

ワーカー・プール一覧からも削除されていることが確認できます。
![delpool05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142407/fdc495cf-a475-46b3-df26-347cc4c19595.png)


4 最終確認

クラスター構成

![cluster10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142407/b0a3ff2a-84c8-325e-3f6a-03187fabcc59.png)
※やはりバージョンは古い情報のままでした。念の為アクション＞バージョンの更新をクリックしてみましたが、下記のとおり適用可能なバージョンは無いとのメッセージが表示されました。
![cluster11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142407/6bdc001b-a950-3cce-2513-dfffdccf0608.png)

以降CLIでの確認結果となります。

クラスター構成

```
[user@vsi ~]$ ibmcloud oc cluster get --cluster xxxxxxxxxx
Retrieving cluster xxxxxxxxxx...
OK

Name:                           mycluster-us-south-1-bx2.4x16
ID:                             xxxxxxxxxx
State:                          warning
Status:                         Could not upload certificates to Certificate Manager instance. Ensure you have the correct IAM permissions. For more info, see http://ibm.biz/ingress-secret
Created:                        2020-10-15 00:54:49 -0500 (2 months ago)
Resource Group ID:              xxxxxxxxxx
Resource Group Name:            xxxxxxxxxx
Pod Subnet:                     172.17.0.0/18
Service Subnet:                 172.21.0.0/16
Workers:                        3
Worker Zones:                   us-south-1, us-south-2, us-south-3
Ingress Subdomain:              xxxxxxxxxx
Ingress Secret:                 xxxxxxxxxx
Ingress Status:                 warning
Ingress Message:                Could not upload certificates to Certificate Manager instance. Ensure you have the correct IAM permissions. For more info, see http://ibm.biz/ingress-secret
Creator:                        -
Public Service Endpoint URL:    https://xxxxxxxxxx.ibm.com:30427
Private Service Endpoint URL:   https://xxxxxxxxxx.ibm.com:30427
Pull Secrets:                   enabled in the default namespace
VPCs:                           xxxxxxxxxx

Master
Status:     Ready (6 days ago)
State:      deployed
Health:     normal
Version:    4.5.18_1523_openshift
Location:   Dallas
URL:        https://xxxxxxxxxx.ibm.com:30427
```

クラスターワーカーノード構成

```
[user@vsi ~]$ ibmcloud oc worker ls --cluster xxxxxxxxxx
OK
ID                                                       Primary IP     Flavor     State    Status   Zone         Version
kube-xxxxxxxxxx-myclusterus-newpric-000008cf   10.240.64.4    bx2.4x16   normal   Ready    us-south-2   4.5.22_1524_openshift
kube-xxxxxxxxxx-myclusterus-newpric-000009b6   10.240.136.4   bx2.4x16   normal   Ready    us-south-3   4.5.22_1524_openshift
kube-xxxxxxxxxx-myclusterus-newpric-00000a62   10.240.0.4     bx2.4x16   normal   Ready    us-south-1   4.5.22_1524_openshift
```

クラスターワーカー・プール構成

```
[user@vsi ~]$ ibmcloud oc worker-pool ls --cluster xxxxxxxxxx
OK
Name                  ID           Flavor     Workers
newprice_workerpool   xxxxxxxxxx   bx2.4x16   3
```

以上でワーカー・プールの入れ替え作業は完了です。


# 請求情報新旧比較

新規ワーカー・プールを作成した直後に請求情報を確認してみました。

請求および使用量（IBM Cloudのマネジメントコンソール画面から、請求および使用量＞使用量＞サービス・タイプ＞Kubernetes Service＞プランの表示＞該当リージョンのクラスター＞詳細を表示＞当該リージョンのインスタンス＞インスタンスの詳細の表示）から確認します。

既存ワーカーノードのインスタンス情報
![price_before01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142407/9872f731-a6fd-5058-e3ee-2d07fd7929c4.png)

新規追加したワーカーノードのインスタンス情報
![price_after01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142407/e3f9a9e2-3882-6137-99c0-326fa44ab6f3.png)
→新規プール作成後、インスタンスの詳細表示で「OCP_VCPU_HOURS」の項目ができています。これで新料金体系の課金となっていることが確認できます。

これでスッキリと身軽になった状態で新年を迎えることができます。