ROKS上の Db2 for RHOS and k8s V11.5.8 ライセンス適用方法

OpenShift/Kubernetes環境でDb2を動かすには、マイクロサービスとして開発される、k8s環境専用のDb2製品を導入します。
このDb2は、[Db2 for Red Hat OpenShift and Kubernetes](https://www.ibm.com/docs/en/db2/11.5?topic=deployments-db2-rhos-k8s)、別名Db2Uとも呼ばれます。
Db2として公式の Kubernetes Operator が提供され、カスタムリソースのインスタンスを作成することでDb2をデプロイします。
※ オンプレミス版のように db2setupやdb2_installコマンドによってDb2デプロイを行うことはできません。

Db2U でも、従来のオンプレミス版Db2同様にライセンスファイルを適用することで、製品サポートを受けられるようになります。

ライセンスファイルの適用手順は、オンプレミス版とは少し異なります。
以下の手順でライセンスファイルを適用することができました。


## 環境

### 全体構成

- Red Hat OpenShift Kubernetes Service (ROKS) 上に Db2 for OpenShift and K8s をデプロイ
    - Db2uClusterインスタンスデプロイ済
- ライセンスファイルは作業用PCローカルに配置
    - ファイル自体は、従来のオンプレミス版Db2に適用するものと同じ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/468682/b02c3233-2f30-be0d-a486-0fddc2257ae6.png)


|      コンポーネント       |      バージョン      |
| :-----------------------: | :------------------: |
|         OpenShift         |       4.10.52        |
| OpenShift Data Foundation | odf-operator.v4.10.9 |
|     Db2 for OpenShift     |      s11.5.8.0-cn2       |

Db2uInstanceに対しても同じ手順でライセンス適用は可能なようですが、今回はDb2uCluster環境を利用しています。
※Db2uClusterはStatefulSetベースの古いアーキテクチャのカスタムリソースであり、2023年7月現在Db2uInstanceの利用が推奨されます。今回は手元にデプロイ済Db2uCluster環境があったため、こちらを活用しました。


## Db2U：ライセンスファイル適用
製品マニュアルの記載に従って、進めます。
[Db2 Community Edition ライセンス証明書キーのアップグレード](https://www.ibm.com/docs/ja/db2/11.5?topic=updating-managing-licenses)

### 全体の流れ

1. Db2ライセンスファイルの入手
2. Db2ライセンスファイルを base64 にエンコード
3. ライセンスファイル適用(oc edit)
4. Db2U Podの再起動
5. ライセンス確認

### (事前確認) ライセンス適用前のdb2licm -lコマンド出力

ライセンス適用前は、ライセンス管理ツールで適用状況を確認すると、以下のように出力されます。
```
[db2inst1@c-db2ucluster-4-db2u-0 - Db2U db2inst1]$ db2licm -l
Product name:                     "DB2 Enterprise Server Edition"
License type:                     "License not registered"
Expiry date:                      "License not registered"
Product identifier:               "db2ese"
Version information:              "11.5"

Product name:                     "DB2 Community Edition"
License type:                     "Community"
Expiry date:                      "Permanent"
Product identifier:               "db2dec"
Version information:              "11.5"
Max amount of memory (GB):        "16"
Max number of cores:              "4"
Max amount of table space (GB):   "100"
Features:
IBM DB2 Performance Management Offering:              "Not licensed"


```


### Step1. Db2ライセンスファイル入手

Db2Uを使う場合も、オンプレミス版とライセンス体系は変わりません。
適用するライセンスファイルも共通のものが利用可能です。

Advanced エディションおよび Standard エディションのライセンス・キーは、 IBM Passport Advantage サイトからダウンロードできます。
 * ライセンスファイル名
     * Db2 Advanced Edition: db2adv_vpc.lic
     * Db2 Standard Edition: db2std_vpc.lic
 * 補足：ライセンスをダウンロードするには、ライセンスを使用する資格が必要となります(IBMとのサポート契約)
     
ダウンロードしたライセンスファイルは、ライセンス適用作業を行う端末のローカルディレクトリに配置しておきます。

### Step2. Db2ライセンスファイルを base64 にエンコード

ライセンス適用を行う端末にて、ライセンスファイルをエンコードします
```
cd <ライセンスファイル配置ディレクトリ>
LICENSE_KEY="./db2adv_vpc.lic"
cat ${LICENSE_KEY} | base64 | tr -d '\n'
```

出力例：
```
# cat ${LICENSE_KEY} | base64 | tr -d '\n'
W0xpY2Vuc2VDZXJ0aWZpY..
(略)
R1cmF0aW9uPQo=
```

出力されたテキストの内容は、後ほどDb2UのYamlファイルにCopy＆Pasteするため、必要に応じてローカルにテキストファイルとして保存しておきます。


### Step3. ライセンスファイル適用(oc edit)

Db2uClusterデプロイメントのカスタムリソース名（今回は「db2ucluster-4」）を取得し、OS環境変数 INSTANCE に設定します
```
oc get db2ucluster
NAME            STATE   MAINTENANCESTATE   AGE
db2ucluster-4   Ready   None               38d
```

```
INSTANCE_NAME="db2ucluster-4"
```

カスタムリソースを編集します
```
oc edit db2ucluster ${INSTANCE_NAME}
```

編集モードで、YAML ファイルの spec のひとつ下の階層に存在する license キーの値として、Step2.でエンコードして取得された文字列を入力します。

```
spec:
  license:
    value: <エンコード文字列を貼付>
```

編集の実例：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/468682/ac7fff71-9038-b355-7a9e-f54e825997b1.png)




:::note warn
注意点

 * Db2uCluster v11.5.8-cn2 のYamlには、"license"キーは2か所存在し、このうち、specの直下にあるlicenseキーに入力する必要があります
 * addOn用のlicenseキーの値としてDb2ライセンスのエンコードを入力してしまうと、oc edit自体は成功しますが、無効な入力値であるため、反映されません
:::

Yamlファイルを保存して閉じます。
viエディタであれば、[:wq]でクローズすることにより、元のターミナルに戻ります。
標準出力に" ... edited" と出力されていることを確認します。

```
oc edit db2ucluster db2ucluster-4
db2ucluster.db2u.databases.ibm.com/db2ucluster-4 edited
```

### Step4. Db2U Podの再起動

Db2 Podを再起動し、新しいライセンスを有効にします。
```
oc delete $(oc get po -l type=engine,formation_id=${INSTANCE_NAME} -oname)
pod "c-db2ucluster-4-db2u-0" deleted
```

### Step5. ライセンス確認

Db2 Pod にログインし、インスタンスオーナーにスイッチします
```
oc rsh c-db2ucluster-4-db2u-0 bash
Defaulted container "db2u" out of: db2u, init-labels (init), init-kernel (init)
[db2uadm@c-db2ucluster-4-db2u-0 /]$ su - db2inst1
Last login: Fri Jul 14 11:39:23 UTC 2023
```

ライセンス適用状況を確認します
```
[db2inst1@c-db2ucluster-4-db2u-0 - Db2U db2inst1]$ db2licm -l
Product name:                     "DB2 Advanced Edition"
License type:                     "Virtual Processor Core"
Expiry date:                      "Permanent"
Product identifier:               "db2adv"
Version information:              "11.5"
Enforcement policy:               "Hard Stop"
Features:
IBM DB2 Performance Management Offering:              "Not licensed"


```
"DB2 Advanced Edition"と出力され、ライセンスが適用されていることが確認できました。


### (Option) Db2Uのスケールアップ
CPU数、メモリーサイズの拡張が必要となった場合には、oc patch コマンドにて実施可能です。
参考：[Db2マニュアル[Db2 のスケールアップ]](https://www.ibm.com/docs/ja/db2/11.5?topic=db2-scaling-up)