Db2 on OpenShift 11.5.6 アップグレード手順

## Db2 on OpenShift のアップグレード
オンプレミス環境で稼働するDb2に、現在稼働中のOS上でFix適用を行う場合には

 * 新しいFixPackのモジュールをダウンロード
 * FixPackをインストール(もしくは、新しいパスに新規導入)
 * インスタンスのアップグレード
 
といった手順を踏みますが、
Db2 on OpenShift(Db2U) の場合は、Db2ユーザ(管理者)が行う手順は以下のようになります。

 * 新しいCNリリース(※)に対応した新しいバージョンのDb2オペレータにアップグレード
 * Db2クラスタ(Db2サーバ本体の動くコンテナ群) のアップグレード

(※) CN(container-enhanced) 各リリースレベルにおける変更点はこちらを参照
　　Db2マニュアル：[Container layer enhanced (cn) releases](https://www.ibm.com/docs/en/db2/11.5?topic=1156-whats-new-in-db2#wn_db2u_11-5-5__cn_releases)

Db2クラスタの最新cnリリースを利用するには、Db2オペレータも最新にしておく必要があります。
Db2オペレータ、Db2クラスタ のアップグレードはいずれも、OpenShift Container Platform(OCP) Webコンソール上で行うことができ、アップグレード作業は実質ほとんどGUIベースで実施可能といえます。


## Db2サーバとDb2オペレータの関係
OpenShift の世界では、Db2サーバは下記の要領でデプロイします。

 * Db2 Operator を導入
 * カスタムリソースであるDb2クラスタ(Db2uCluster)のインスタンスを作成
    * クラスタという名称ですが、レプリカ数は1、Db2エンジンが動くPodが1つ稼働する構成です
    * Db2サーバ本体のPod以外にもldap,etcdなどの周辺機能を提供するPodもあわせて作成されます

Db2サーバのアップグレードにあたって、Db2ユーザ(管理者)が行うのはYamlベースになっている構成情報のテキスト編集だけで、Db2サーバのアップグレードはDb2オペレータにより行われます。
この前提として、Db2オペレータが新しいバージョンに上がっていないと新しいDb2サーバにリリースアップすることができないため、Db2サーバのアップグレード前に、Db2オペレータのアップグレードを行います。

[](Db2 on OpenShift で利用可能なアップグレードおよびアップデートのオプションはオペレータによって決定されます。)例えば、Db2 11.5.6.0-cn3 から cn5 にアップグレードするには、あらかじめ Db2u Operator を cn5 に対応するバージョンである V1.1.8 にアップグレードしておく必要があります。
Db2オペレータとDb2クラスタのバージョンの対応については、マニュアルに一覧化されています。

参考：[Db2マニュアル Upgrading and updating your Db2 on Red Hat OpenShift cluster](https://www.ibm.com/docs/en/db2/11.5?topic=1156-upgrading-updating)

## Db2 11.5.6.0-cn5 について
今回検証したのは Db2 on OpenShift 11.5.6 cn3 から cn5 へのアップグレードです。
なお cn5 はいくつかの不具合が修正されているもので、機能追加は含まれないリリースとなります。

アップグレード後もDb2バージョン(Fixレベル)は V11.5.6.0 と同一ですが、 db2level コマンドの出力結果はに含まれる Informational tokens が変更されていて、Db2エンジンのマイナーバージョンアップが行われているようです。

| CNリリース | db2level出力抜粋(Informational tokens) |
|:-|:-|
|V11.5.6.0-cn3   | "DB2 v11.5.6.0", "s2109240421", "DYN2109240421AMD64",and Fix Pack "0".|
|V11.5.6.0-cn5   | "DB2 v11.5.6.0", "s2111010843", "DYN2111010843AMD64",and Fix Pack "0". |

ここから、実際にアップグレードを行っていきます。

## Step1. Db2 オペレータのアップグレード手順

#### 1. OCP Webコンソールにログイン
[Operator] > [インストールされたOperator]の画面を開きます。
更新可能な場合、[IBM Db2] のステータス欄に「利用可能なアップグレード」というリンクが表示されます。
このリンクをクリックし、アップグレードを開始します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/468682/730b081d-2e5d-b823-f102-d4d82f5a2043.png)

#### 2. InstallPlanのプレビュー
[InstallPlanのプレビュー]ボタンを押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/468682/c4ab41a9-d36a-a820-339d-1e94e94c1f97.png)

#### 3. 承認(オプション)
今回の環境では「更新の承認(Approval Policy)」をデフォルトの「自動」から「手動」へ変更しているため、承認が求められます。(→[承認]を押下)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/468682/85af4b6f-f9bc-8bcb-fdb3-b498d27e6e73.png)

インストールプランの右横にステータスが表示され、Installing → Complete と状態が遷移します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/468682/c8209a8a-82b6-edb3-9066-ce657f5ff178.png)

#### 4．更新されていることを確認
[インストールされたOperator] の一覧画面に戻ると、V1.1.8 へアップグレードされていることがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/468682/93f8cd61-8f58-e1d3-4ca5-91e2e8730e46.png)

#### 補足：CUIベースのDb2オペレータの更新
IBM Cloud 環境であれば CUIベースでDb2オペレータをアップグレードすることもできるようです。
参考：[Upgrading the Db2 Operator](https://www.ibm.com/docs/en/db2/11.5?topic=updating-upgrading-db2-operator)

## Step2. Db2サーバ本体のアップグレード手順
Db2サーバ本体のアップグレードは、Db2 on OpenShift クラスタに関連付けられているカスタムリソース(CR)のソースYAMLを編集することで行います。
[](CR のバージョンを更新すると、Db2 オペレータは、CR が最初に作成されたときに Db2 オペレータが作成および管理していたすべてのオブジェクトを自動的に調整します。また、Db2 オペレータは、Db2 on OpenShift のステートフルセットを編集して新しいイメージを指すようにし、Db2 エンジンポッドが新しいイメージを使用して再作成されるようにします。)
このアップグレードのプロセスはGUI/CUI(oc edit db2uclusters ...)、どちらでも実行することができます。

#### 1. OCP Webコンソールへログイン
[Operator] > [インストールされたOperator]の画面を開きます。
[IBM Db2]を選択しDb2オペレータの詳細画面に入ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/468682/8ddba5ff-6f48-1739-d71c-de53ac9f4c1c.png)

#### 2. [Db2u Cluster]タブを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/468682/ef1598bc-1fdc-8b64-be8d-7142d7834b9c.png)

#### 3. 構成情報(Yaml)編集画面を開く
更新対象のカスタムリソース(CR)を探し、右端の列から楕円形（...）をクリックして「Db2uClusterを編集」を選択すると、Yaml編集画面が開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/468682/0ea3121a-a23e-6b2c-5db2-c70835eec32a.png)

#### 4. Yaml編集箇所の特定
Yaml編集画面(黒地)を選択した状態で [Ctrl]+F を押下すると検索バーが右上に開かれ、Yaml内をキーワード検索できるようになります。<br>この検索バーで "version" という文字を検索します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/468682/fee0112e-6d17-1328-1df3-5fecd955e96d.png)

#### 5. バージョンの値を変更
バージョンストリングを編集します。
Yamlファイル中、versionという文字列自体は複数回登場します。
編集するのは、spec配下にあるversionの値です。

<編集前>	  version: 11.5.6.0-cn3
<編集後>	  version: 11.5.6.0-cn5
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/468682/64effab1-0388-bfe5-7db9-104906cfab10.png)

#### 6. 変更内容を保存
編集画面下にある [保存]ボタンを押下し、変更内容を保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/468682/e2e9fef8-92a2-ab7b-4156-27ed09b3f002.png)

保存が完了すると、Yaml編集画面下に「\<db2ucluster-name\>がnnnnnnnnに更新されました」というメッセージが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/468682/c5c0356f-86cc-fd11-2619-1a740ae942b5.png)


#### 7.アップグレード済であることの確認

<< Db2uCluster Yaml定義の確認 >>
OCP Webコンソールに表示されるYamlの定義内容を改めて確認すると、先の手順で変更した spec だけでなくstatus 内に記載されるバージョンストリングも、Db2 11.5.6.0-cn5 に上がっていることがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/468682/d4817c06-f45b-c3e2-d31a-cb625a5b7e56.png)

<< OCP Webコンソール上の表示の確認 >>
OCP Webコンソール Db2オペレータのDb2u Clusterタブより、今回アップグレードを行ったインスタンスを選択し詳細表示を行います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/468682/5649b22d-5d1f-df4f-8e78-dcd3661a2a52.png)


Version の項目が、cn3 から cn5 に変わっていることが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/468682/d6326ab1-c316-8e3d-b062-7359ffe9a680.png)

#### 補足：Db2サーバアップグレード後のJob/Pod
上記操作にてCNリリースアップを行った後の oc get all 出力を添付します。
アップグレード用のJob/Podが実行されていたことがわかります。

 * Job ... c-db2ucluster-sample-11.5.6.0-cn3-to-11.5.6.0-cn5
 * Pod ... c-db2ucluster-sample-11.5.6.0-cn3-to-11.5.6.0-cn5-7w9mn

```
[utsumi@k3bastion ~]$ oc get all -o wide
NAME                                                          READY   STATUS      RESTARTS   AGE    IP             NODE      NOMINATED NODE   READINESS GATES
pod/c-db2ucluster-sample-11.5.6.0-cn3-to-11.5.6.0-cn5-7w9mn   0/1     Completed   0          39m    10.131.1.97    worker2   <none>           <none>
pod/c-db2ucluster-sample-db2u-0                               1/1     Running     0          58m    10.129.2.155   worker3   <none>           <none>
pod/c-db2ucluster-sample-etcd-0                               1/1     Running     0          53m    10.128.3.239   worker1   <none>           <none>
pod/c-db2ucluster-sample-instdb-4fwnx                         0/1     Completed   0          11d    10.131.1.81    worker2   <none>           <none>
pod/c-db2ucluster-sample-ldap-8c9dcb5d9-bmmjt                 1/1     Running     0          59m    10.128.3.237   worker1   <none>           <none>
pod/c-db2ucluster-sample-restore-morph-lvr9w                  0/1     Completed   0          11d    10.131.1.82    worker2   <none>           <none>
pod/db2u-operator-manager-55bb58dfd8-twrtt                    1/1     Running     13         120m   10.128.3.224   worker1   <none>           <none>

NAME                                         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                                                                           AGE   SELECTOR
service/c-db2ucluster-sample-db2u            ClusterIP   172.30.60.2      <none>        50000/TCP,50001/TCP,25000/TCP,25001/TCP,25002/TCP,25003/TCP,25004/TCP,25005/TCP   11d   app=db2ucluster-sample,component=db2oltp,formation_id=db2ucluster-sample,role=db,type=engine
service/c-db2ucluster-sample-db2u-engn-svc   NodePort    172.30.217.115   <none>        50000:31545/TCP,50001:30675/TCP                                                   11d   app=db2ucluster-sample,component=db2oltp,formation_id=db2ucluster-sample,role=db,type=engine
service/c-db2ucluster-sample-db2u-internal   ClusterIP   None             <none>        50000/TCP,9443/TCP,50052/TCP                                                      11d   app=db2ucluster-sample,component=db2oltp,formation_id=db2ucluster-sample,role=db,type=engine
service/c-db2ucluster-sample-etcd            ClusterIP   None             <none>        2379/TCP,2380/TCP                                                                 11d   app=db2ucluster-sample,component=etcd,formation_id=db2ucluster-sample
service/c-db2ucluster-sample-ldap            ClusterIP   172.30.89.239    <none>        50389/TCP                                                                         11d   app=db2ucluster-sample,formation_id=db2ucluster-sample,role=ldap

NAME                                        READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES                                                                                                    SELECTOR
deployment.apps/c-db2ucluster-sample-ldap   1/1     1            1           11d   ldap         icr.io/db2u/db2u.auxiliary.auth@sha256:d3f4668425c2f0c303c3507b9d899ceeff4c7127e718662466bbf4a86b166731   app=db2ucluster-sample,formation_id=db2ucluster-sample,role=ldap
deployment.apps/db2u-operator-manager       1/1     1            1           20d   manager      docker.io/ibmcom/db2u-operator@sha256:c6d918de8092cdc6ae58087718413567d22920562a777a448d56a4fa3c57d6e4    control-plane=db2u-operator-manager

NAME                                                  DESIRED   CURRENT   READY   AGE    CONTAINERS   IMAGES                                                                                                     SELECTOR
replicaset.apps/c-db2ucluster-sample-ldap-7d6d659bc   0         0         0       11d    ldap         cp.icr.io/cp/db2u.auxiliary.auth@sha256:34c5d313843262d4027fcf84eeed8ed8ec0886b7361796ee493bd42b9224bc4a   app=db2ucluster-sample,formation_id=db2ucluster-sample,pod-template-hash=7d6d659bc,role=ldap
replicaset.apps/c-db2ucluster-sample-ldap-8c9dcb5d9   1         1         1       59m    ldap         icr.io/db2u/db2u.auxiliary.auth@sha256:d3f4668425c2f0c303c3507b9d899ceeff4c7127e718662466bbf4a86b166731    app=db2ucluster-sample,formation_id=db2ucluster-sample,pod-template-hash=8c9dcb5d9,role=ldap
replicaset.apps/db2u-operator-manager-55bb58dfd8      1         1         1       120m   manager      docker.io/ibmcom/db2u-operator@sha256:c6d918de8092cdc6ae58087718413567d22920562a777a448d56a4fa3c57d6e4     control-plane=db2u-operator-manager,pod-template-hash=55bb58dfd8
replicaset.apps/db2u-operator-manager-7b5dfb5bc7      0         0         0       20d    manager      docker.io/ibmcom/db2u-operator@sha256:5dc50046595172f94fd37ef8497e2b4f2fdf2c12dff4885b6397969bdade11a5     control-plane=db2u-operator-manager,pod-template-hash=7b5dfb5bc7

NAME                                         READY   AGE   CONTAINERS   IMAGES
statefulset.apps/c-db2ucluster-sample-db2u   1/1     11d   db2u         icr.io/db2u/db2u@sha256:fa30d2c32cde7882cac6a49938b324011d0521b9300cd565230589c983212617
statefulset.apps/c-db2ucluster-sample-etcd   1/1     11d   etcd         icr.io/db2u/etcd@sha256:621d9a72ec012ed64f8b56cc56b3ec613d81367fc0ef235d06d44cd2823fca8d

NAME                                                          COMPLETIONS   DURATION   AGE   CONTAINERS      IMAGES                                                                                             SELECTOR
job.batch/c-db2ucluster-sample-11.5.6.0-cn3-to-11.5.6.0-cn5   1/1           43m        59m   engn-update     icr.io/db2u/db2u.tools@sha256:867277235139cd0f32341b68f423bd720be30d4019d67c0ff24d4e5279d44f6e     controller-uid=04cf2fa0-5520-498b-9600-1b91dbc3e1df
job.batch/c-db2ucluster-sample-instdb                         1/1           33s        11d   instdb          cp.icr.io/cp/db2u.instdb@sha256:c35d117b57a57971afb24dbe60f34cc0c496fba46d7f11756d80a25bf4edf3c1   controller-uid=e762b583-29cb-43db-8e41-efb95191eaf9
job.batch/c-db2ucluster-sample-restore-morph                  1/1           25m        11d   restore-morph   cp.icr.io/cp/db2u.tools@sha256:a981cb52a2d87416417fd58e434c9dbeff6115f8656dc8dea4f89b25271fbaf0    controller-uid=99941ba6-bb8a-4536-a753-aa2106bea80b
$

```

## 参考

 * Db2製品マニュアル [[Upgrading and updating your Db2 on Red Hat OpenShift cluster]](https://www.ibm.com/docs/en/db2/11.5?topic=1156-upgrading-updating)
 * 初期セットアップ手順メモ
    * [Operatorとは/Db2オペレータの導入手順](https://qiita.com/mi-kana/items/c3fb640d671caf624eb8))
    * [Db2クラスタ(≒Db2 on OpenShiftにおけるDb2サーバ本体) の導入手順](https://qiita.com/mi-kana/items/b1cc3018b0df32414d64)