Db2 11.5.5 on OpenShift デプロイ手順 -NFSストレージ利用構成-

## コンテナ版Db2の最新動向

IBMのリレーショナル・データベース製品である Db2 for LUW(Linux, Unix, and Windows)では、比較的古いバージョンからコンテナ版のDb2(for Docker)が提供されていました。

Db2 V11.5 における "コンテナ版Db2" としては、以下の種類のものが利用可能です。

1. [Db2 Community Edition for Docker (for non-production use)](https://www.ibm.com/support/knowledgecenter/SSEPGG_11.5.0/com.ibm.db2.luw.db2u_openshift.doc/doc/c_db2CE_dokr.html)
2. Db2 on OpenShift  (別名 "Db2 Universal Container (Db2U)")
　　<--- OpenShift Container Platform(以下、OCP) にデプロイするためのコンテナ版Db2

    2-1. [Db2 OLTP](https://www.ibm.com/support/knowledgecenter/en/SSEPGG_11.5.0/com.ibm.db2.luw.db2u_openshift.doc/doc/c_db2u_overview.html)
    2-2. [Db2 Warehouse](https://www.ibm.com/support/knowledgecenter/ja/SSCJDQ/com.ibm.swg.im.dashdb.ucontainer.doc/doc/db2w_universal_container.html)

この記事では、Db2(OLTP) 11.5.5 on OpenShift (上記の2-1.)をOCP 4.5環境に導入する手順を整理します。

Db2 11.5.5 on OpenShift は、導入の観点ではこのような点が前バージョン(11.5.4)から変わっています。

 * Operator対応 (Db2本体 / HADR / HelmMigration)
 * GUIベースでの導入が可能になった
 * 導入にあたりHelmのセットアップが不要となった
 * 必要なCPU資源量が少なくなった(5.7 -> 2.5 cores)
 * ストレージ構成のサポートの追加(OCS 4.5、Spectrum Scale CSI 2.1など)
 * 新しいプラットフォームのサポート追加(z/Linux)

(2021.03追記)
Db2 11.5.5-cn2 では、DB名を変更できるようになりました。(cn1までは、BLUDBという名前決め打ちでした)

## Db2 on OpenShiftインストール方法の公式ドキュメント

オンプレミス版のDb2のインストール手順はDb2製品マニュアル([KnowledgeCenter](https://www.ibm.com/support/knowledgecenter/ja/SSEPGG_11.5.0/com.ibm.db2.luw.welcome.doc/doc/welcome.html))に記載されますが、Db2 on OpenShift導入手順は主にDb2U OperatorのReadMe(※)に記載されています。
　(※)OCP環境にIBM Operator Catalogを導入した後でないと読めないのが不便です

Db2uClusterカスタムリソースのyamlサンプル、ストレージ関連のオプション、HADR
HADRのセットアップなど、Db2マニュアルに記載される情報もありますので、Db2U Operator Readmeとマニュアルを併用してセットアップを進めます。

Db2 11.5 KnowledgeCenter[Db2 Version 11.5 Mod Pack 5 for Red Hat OpenShift]
https://www.ibm.com/support/knowledgecenter/SSEPGG_11.5.0/com.ibm.db2.luw.db2u_openshift.doc/doc/c_db2u_11-5-5.html

ここから記述する導入手順は、上の2つの情報源の内容をマージしたものです。

## OpenShiftにDb2を導入するための前提
Db2 on OpenShift 11.5.5 (OLTP) 導入にあたり、以下の要件があります。
(*下記は、Db2 KnowledgeCenter / Db2U Operator Readme から抜粋したものです)

###(1) ハードウェア要件

####Db2U Operator の要件

| Software | CPU(cores) | Memory(GB) |
|:-:|:-:|:-:|
| Db2 Operator  | 500m  | 512Mi  |

####Db2U Operand(Db2本体) の要件

 * 1.7 CPU
 * 2Gi

####最小構成でのDb2デプロイのためのリソース要件

| Software | CPU(cores) | Memory(GB) | Disk(GB) | Nodes |
|:-:|:-:|:-:|:-:|:-:|
| Db2  |0.5   |4Gi   | 100GB | 1 |
| Authentication (ldap)  |1   |1Gi   | | 1 |
| Etcd  |0.5   |512Mi   | |  1 |
| Tools  |0.5   |512Mi   | |  1 |
| **Total**  | 2.5  | 6Gi  |  |  |

####ストレージの要件

 * NFS
 * Red Hat OpenShift Container Storage 4.5
 * IBM Spectrum Scale CSI 2.1
 * IBM Cloud File Storage (gold storage class)
 * Portworx 2.5.5
 * A HostPath PV that is a mounted clustered filesystem

ストレージについての詳細な要件はマニュアルで確認します。
[Db2 11.5 KnowledgeCenter[Certified storage options for Db2]](
https://www.ibm.com/support/knowledgecenter/SSEPGG_11.5.0/com.ibm.db2.luw.db2u_openshift.doc/database-storage-aese.html)

###(2)その他の要件

* OpenShift version 3.11以上(4.xも含む)
* cluster-admin権限を持つOCPユーザ
*  [IBM Cloud](https://cloud.ibm.com/login)のユーザアカウント

[Db2 11.5 KnowledgeCenter[
Installing Db2 on a Red Hat OpenShift cluster]](
https://www.ibm.com/support/knowledgecenter/SSEPGG_11.5.0/com.ibm.db2.luw.db2u_openshift.doc/doc/t_db2u_install_db2.html)

## 導入環境
今回は、以下のような環境に Db2 11.5.5 on OpenShift をデプロイしました。

| 項目                    | バージョン         |
|:------------------------|:------------------|
| OS(bastion)             |          RHEL 7.7 |
| OS(worker)       |          RHEL 7.7 |
| OCP(Client) ※            | 4.5.0-202007240519.p0-b66f2d3 |
| OCP(Server) ※           | 4.5.7             |
| Kubernetes              |  v1.18.3+2cf11e2  |
| NFS                     |  4.2  |
| Db2 OLTP               |            11.5.5 |


###構成
今回は、以下のような構成のOCP環境にDb2をデプロイします。
Db2はStatefulSetとしてデプロイされます。

 - Bastion Node x1
 - Master Node x3
 - Worker Node x3

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/468682/c409e62f-4af9-7188-5f67-9ca7666b6175.png)


ストレージには、当該環境では最も準備が容易だったNFS-静的プロビジョニング構成を選択しています。
今回はBastionサーバをNFSサーバとして構築し、Bastionサーバのローカルファイルシステムの1つをNFSボリュームとしてexportする単純な構成としています。
ストレージ構成は今回の導入検証のための簡易テスト環境であり、実際の本番環境での利用にあたっては技術的な構成確認の場をメーカー(IBM)側にとるようにお願いします。

### 作業を行うノード / ユーザ

ここから先で実行するコマンドはすべてBastionノードから実行しています。
また、ユーザは以下の用途で使い分けています。

| ユーザ | 用途/補足 |
|:------------|:----------------|
|rootユーザ   |NFSサーバのセットアップ用   |
|OCPユーザ   |ocコマンド実行<br>(cluster-admin権限付与)   |


コマンド操作の実行ノード・実行ユーザについてはご使用の環境に応じて決めてください。
また、ocコマンド実行前には、oc login が必要となります。


## 導入の流れ
Db2 on OpenShift導入は、以下の流れで行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/468682/97966c23-7ade-e2db-ea50-7ba914c26a1e.png)

## Step1. プロジェクトの作成

続いて、Db2 Operaotor/Db2本体をデプロイするため、プロジェクト(ネームスペース)を作成します。

* 本当は、Db2 Operatorをクラスタ内すべてのネームスペースから利用可能なモードで導入できると良いのですが、Db2 Operator V1.0.0 では非サポートのため、複数のプロジェクトにDb2を導入したい場合は各プロジェクトに対してDb2 Operatorも導入していく手順となります。

「db2u-oltp1」プロジェクトを作成します。

```
oc new-project db2u-oltp1
Now using project "db2u-oltp1" on server "https://api.isvsol.jp-ise.com:6443".

You can add applications to this project with the 'new-app' command. For example, try:

    oc new-app ruby~https://github.com/sclorg/ruby-ex.git

to build a new example application in Ruby. Or use kubectl to deploy a simple Kubernetes application:

    kubectl create deployment hello-node --image=gcr.io/hello-minikube-zero-install/hello-node

```


##Step2. Db2 Operator 導入

 * Db2 Operatorとは / 導入手順は、別記事に記載します
    * 別記事 → [OpenShift環境へのDb2 Operator導入手順](https://qiita.com/mi-kana/items/c3fb640d671caf624eb8)
    * Db2 Operator導入手順の中に、Db2導入において必要となるセキュリティ設定も含まれます
 * Db2 Operator V1.0.0 では、Db2u Cluster(Db2本体)、Db2u Hadr、Db2u Helm Migration の3つのカスタム・リソースが提供されます。
    * シングル構成Db2の導入・構成を行うには、「Db2u Cluster」のインスタンスを作成します。


##Step3. ストレージ構成
Db2uCluster(Db2本体)導入時は、メタデータ/ユーザデータを配置するためのストレージとして、ストレージクラス、もしくは作成済のPVを指定します。
ここでは、作成済PVを指定してDb2uClusterを導入する手順を想定しています。

### Step3-1. NFSサーバの構成
今回は検証環境であるため、セットアップの容易なNFSをストレージとして利用します。
(※本番稼働環境であれば、性能/可用性/バックアップ取得要件等を考慮した上でストレージ構成を検討することが望ましい)
NFSサーバ(＝bastion) へログインし、root ユーザ にて以下の手順を実行します。

####① 空のディレクトリを作成
メタデータ、ユーザデータ用に2つのディレクトリを作成します

```
mkdir -p /work/nfsdir/Db2NFS_Data
mkdir -p /work/nfsdir/Db2NFS_Meta
```

####② NFSサーバ上で、エクスポートオプションを指定

Db2U 11.5.5 におけるNFS利用のための前提条件は、Db2製品マニュアルに記載されます。
[Db2 11.5 KnowledgeCenter[NFS storage requirements for Db2]
](https://www.ibm.com/support/knowledgecenter/en/SSEPGG_11.5.0/com.ibm.db2.luw.db2u_openshift.doc/aese-nfs-storage.html)

 - Db2 のPersistent Volume として NFS を利用する場合、NFSサーバ側で以下のエクスポートオプションを指定
rw,sync,no_root_squash,no_all_squash

 - IPアドレスは環境に応じて書き換える(db2_openshiftworkerN_IP_address の箇所)

```
echo "/work/nfsdir/Db2NFS_Data 10.1.1.1/27(rw,sync,no_wdelay,no_root_squash,insecure)" >> /etc/exports
echo "/work/nfsdir/Db2NFS_Meta 10.1.1.1/27(rw,sync,no_wdelay,no_root_squash,insecure)" >> /etc/exports
```

/etc/exportsファイルでのNFSの設定を反映する (exportfs -a または exportfs -r)

```
exportfs -a
```

-----------------
**補足：**

[Knowledge Center](https://www.ibm.com/support/knowledgecenter/SSEPGG_11.5.0/com.ibm.db2.luw.db2u_openshift.doc/aese-nfs-storage.html) には、/etc/fstab ファイルを編集するよう指示があるが、設定するよう指示される hard オプションは後で Persistent Volume の属性に設定するため、この手順はスキップする。

抜粋：
> 各 Db2OpenShiftワーカー・ノードで、マウント・オプションを/etc/fstabに追加します。
NFS ソフト・マウントは NFS タイムアウトの超過後に停止し、呼び出し元に正しくエラーを返さない可能性があります。
この問題によって、クラスター・アプリケーションでデータ破損が生じることがあります。これが、hard オプションを使用する理由です。

> 例えば、以下のシェル・スニペットを使用して更新を行うことができます。
cat <<'EOF' > /etc/fstab
hostname_OR_IP_address_of_NAS/NFS_server:NAS/NFS_share_exported  /nfsmount/ nfs
rw,relatime,vers=3,rsize=1048576,wsize=1048576,namlen=255,hard,intr,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,nolock 0 0
EOF


-----------------

### Step3-2. Persistent Volume(PV) 作成

####①メタデータ用PV
yamlファイルを作成します。

```yaml:pv-nfs-meta.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-nfs-db2meta
  labels:
    type: nfs-meta
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Retain
  storageClassName: slow
  mountOptions:
    - v4.2
    - context="system_u:object_r:container_file_t:s0"
    - hard
  nfs:
    path: /work/nfsdir/Db2NFS_Meta
    server: 10.1.1.1
```

PVを作成します。

```
oc create -f /work/db2-11.5.5/pv-nfs-meta.yaml
```

想定通り作成されていること、Available状態になっていることを確認します。

```
$ oc get pv | grep -i db2
NAME                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS        CLAIM                   STORAGECLASS                     REASON   AGE
pv-nfs-db2meta             10Gi       RWX            Retain           Available                             slow                                      19s

```


####②ユーザデータ用PV
yamlファイルを作成します。

```yaml:pv-nfs-data.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-nfs-db2data
  labels:
    type: nfs-data
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: slow
  mountOptions:
    - v4.2
    - context="system_u:object_r:container_file_t:s0"
    - hard
  nfs:
    path: /work/nfsdir/Db2NFS_Data
    server: 10.1.1.1

```

PVを作成します。

```
$ oc create -f /work/db2-11.5.5/pv-nfs-data.yaml
```

想定通り作成されていること、Available状態になっていることを確認します。

```
$ oc get pv | grep -i db2
NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS     CLAIM                       STORAGECLASS      REASON   AGE
pv-nfs-db2data                             10Gi       RWO            Retain           Available                             　 slow                      13s
```

##Step4. SecurityContextConstraints 定義作成

Db2 Operator Readme に記載されるyaml定義をコピー＆ペーストし、SecurityContextConstraints定義を作成します。

yamlファイル作成：

```yaml:db2u-scc.yaml
kind: SecurityContextConstraints
apiVersion: v1
apiGroup: security.openshift.io
metadata:
    name: db2u-scc
allowHostDirVolumePlugin: false
allowHostIPC: false
allowHostNetwork: false
allowHostPID: false
allowHostPorts: false
# privileged container is only needed for the init container that sets the Db2 kernel parameters
allowPrivilegedContainer: true
allowedCapabilities:
- "SYS_RESOURCE"
- "IPC_OWNER"
- "SYS_NICE"
- "CHOWN"
- "DAC_OVERRIDE"
- "FSETID"
- "FOWNER"
- "SETGID"
- "SETUID"
- "SETFCAP"
- "SETPCAP"
- "SYS_CHROOT"
- "KILL"
- "AUDIT_WRITE"
priority: 10
runAsUser:
    type: RunAsAny
seLinuxContext:
    type: MustRunAs
fsGroup:
    type: RunAsAny
supplementalGroups:
    type: RunAsAny
version: v1

```

SecurityContextConstraints定義作成：

```
 oc create -f ./db2u-scc.yaml
```

## Step5. Db2uCluster デプロイ(Db2 on OpenShiftの導入)

####① サンプルYAMLの確認
Db2 Operator Readme にDb2uClusterのサンプルyamlが記載されます。
下記に、サンプルのyamlファイルを転載します。
*実際にデプロイを行う際は、必要に応じて編集して利用する位置づけのファイルです。

```yaml:Db2uClusterカスタム・リソースのYAMLファイルのサンプル
apiVersion: db2u.databases.ibm.com/v1
kind: Db2uCluster
metadata:
  name: db2u-cicd-test
spec:
  license:
    accept: true
  account:
    privileged: true
    imagePullSecrets:
      - ibm-registry    
  version: "11.5.5.0"
  size: 1
  podConfig:
    db2u:
      resource:
        db2u:
          requests:
            cpu: 2
            memory: 4Gi
          limits:
            cpu: 2
            memory: 4Gi
  environment:
    dbType: db2oltp
    instance:
      password: cicdtest
  storage:
    - name: meta
      type: "create"
      spec:
        storageClassName: "managed-nfs-storage"
        accessModes:
          - ReadWriteMany
        resources:
          requests:
            storage: 10Gi
    - name: data
      type: "create"
      spec:
        storageClassName: "managed-nfs-storage"
        accessModes:
          - ReadWriteMany
        resources:
          requests:
            storage: 100Gi
```

####② Db2 on OpenShift デプロイに用いるためのyaml編集

今回は、サンプルとして提供されるyaml定義のうち、下記項目を編集します。

 * 名称 (metadata > name)
 * ストレージ構成 (spec > storage)

ストレージ構成については、デフォルトのサンプルファイルでは以下のような構成となっています。
ユーザ要件、環境に沿って修正します。

 * Db2インスタンスユーザのパスワードを変更
 * 今回はPVを指定するため、Step3.で作成しておいたPVに指定したラベル値をmatchLabelsに指定
 * ユーザデータについて100GiB確保される定義を、テスト環境では10GiBへ変更
 * アクセスモードをマニュアルの推奨(※)に合わせて変更

(※)[Db2 11.5 KnowledgeCenter[Configuring database storage for Db2]](https://www.ibm.com/support/knowledgecenter/en/SSEPGG_11.5.0/com.ibm.db2.luw.db2u_openshift.doc/database-storage-aese.html) より引用
>When provisioning the database, for user data (the main database data), select ReadWriteOnce (RWO) access mode for your storage.

```yaml:db2u-nfs1.yaml
apiVersion: db2u.databases.ibm.com/v1
kind: Db2uCluster
metadata:
  name: db2u-nfs1
spec:
  license:
    accept: true
  account:
    privileged: true
    imagePullSecrets:
      - ibm-registry
  version: "11.5.5.0"
  size: 1
  podConfig:
    db2u:
      resource:
        db2u:
          requests:
            cpu: 2
            memory: 4Gi
          limits:
            cpu: 2
            memory: 4Gi
  environment:
    dbType: db2oltp
    instance:
      password: db2inst1
  storage:
    - name: meta
      type: "create"
      spec:
        selector:
         matchLabels:
          type: "nfs-meta"　　　　← メタデータ用PVに定義済のラベルを指定
        accessModes:
          - ReadWriteMany
        storageClassName: slow
        resources:
          requests:
            storage: 10Gi
    - name: data
      type: "create"
      spec:
        selector:
         matchLabels:
          type: "nfs-data"　　　　← ユーザデータ用PVに定義済のラベルを指定
        accessModes:
          - ReadWriteOnce　　　　 ← ユーザデータ用アクセスモードとしてRWOを指定
        storageClassName: slow
        resources:
          requests:
            storage: 10Gi　　　　← 容量を変更(100 -> 10Gi)

```


####③ Db2 on OpenShift デプロイ

先の手順②で作成したyamlファイルを指定し、Db2uClusterをデプロイします。

```
oc create -f ./db2u-nfs1.yaml
```

即時に応答が戻り、標準出力は以下のように出力されます。
Db2uClusterデプロイは裏で進行していて、完了までには数分～十数分程度かかります。

```
oc create -f ./db2u-nfs1.yaml
db2ucluster.db2u.databases.ibm.com/db2u-nfs1 created
```

####③ Db2 on OpenShift デプロイ完了確認
Db2uCluster完了まではある程度の時間がかかります。
途中経過は、oc get all コマンド等である程度確認することができます。
「c-[name]-restore-morph*」「c-[name]-instdb*」のPodがComplete状態となり、Db2エンジン本体のPodである「c-[name]-db2u-0」がRunning状態になれば、Db2データベースは利用可能な状態となっています。

Db2データベース利用可能となった状態の oc get pods コマンド出力：

```
oc get pods -o wide
NAME                                     READY   STATUS      RESTARTS   AGE     IP             NODE                 NOMINATED NODE   READINESS GATES
c-db2u-nfs1-db2u-0                       1/1     Running     0          2d7h    10.128.3.19    worker2.jp-ise.com   <none>           <none>
c-db2u-nfs1-etcd-0                       1/1     Running     0          7d      10.131.0.60    worker3.jp-ise.com   <none>           <none>
c-db2u-nfs1-instdb-gpz4g                 0/1     Completed   0          7d      10.131.0.57    worker3.jp-ise.com   <none>           <none>
c-db2u-nfs1-ldap-77df7c8c7f-hgf99        1/1     Running     0          5d3h    10.131.0.148   worker3.jp-ise.com   <none>           <none>
c-db2u-nfs1-restore-morph-rrp9g          0/1     Completed   0          7d      10.129.3.18    worker1.jp-ise.com   <none>           <none>
c-db2u-nfs1-tools-868b94b4d9-gd474       1/1     Running     0          7d      10.129.3.12    worker1.jp-ise.com   <none>           <none>
db2u-operator-manager-9b8b9d877-wh26d    1/1     Running     25         6d4h    10.131.0.72    worker3.jp-ise.com   <none>           <none>


```

Podが起動するまでの間のデプロイの状況は、oc get all コマンドなどで追跡することができます。
下記は、デプロイ完了後の oc get all コマンド出力です。

```
oc get all -o wide
NAME                                        READY   STATUS      RESTARTS   AGE     IP             NODE                 NOMINATED NODE   READINESS GATES
pod/c-db2u-nfs1-db2u-0                      1/1     Running     0          3m26s   10.131.0.61    worker3.jp-ise.com   <none>           <none>
pod/c-db2u-nfs1-etcd-0                      1/1     Running     0          3m46s   10.131.0.60    worker3.jp-ise.com   <none>           <none>
pod/c-db2u-nfs1-instdb-gpz4g                0/1     Completed   0          5m29s   10.131.0.57    worker3.jp-ise.com   <none>           <none>
pod/c-db2u-nfs1-ldap-77df7c8c7f-56mj7       1/1     Running     0          6m34s   10.129.3.13    worker1.jp-ise.com   <none>           <none>
pod/c-db2u-nfs1-restore-morph-rrp9g         1/1     Running     0          36s     10.129.3.18    worker1.jp-ise.com   <none>           <none>
pod/c-db2u-nfs1-tools-868b94b4d9-gd474      1/1     Running     0          6m44s   10.129.3.12    worker1.jp-ise.com   <none>           <none>
pod/db2u-operator-manager-9b8b9d877-b8r5m   1/1     Running     2          23h     10.129.2.217   worker1.jp-ise.com   <none>           <none>

NAME                                TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                                                                           AGE     SELECTOR
service/c-db2u-nfs1-db2u            ClusterIP   172.30.124.96    <none>        50000/TCP,50001/TCP,25000/TCP,25001/TCP,25002/TCP,25003/TCP,25004/TCP,25005/TCP   3m36s   app=db2u-nfs1,component=db2oltp,formation_id=db2u-nfs1,role=db,type=engine
service/c-db2u-nfs1-db2u-engn-svc   NodePort    172.30.99.124    <none>        50000:32349/TCP,50001:30451/TCP                                                   3m36s   app=db2u-nfs1,component=db2oltp,formation_id=db2u-nfs1,role=db,type=engine
service/c-db2u-nfs1-db2u-internal   ClusterIP   None             <none>        50000/TCP,9443/TCP                                                                3m46s   app=db2u-nfs1,component=db2oltp,formation_id=db2u-nfs1,role=db,type=engine
service/c-db2u-nfs1-etcd            ClusterIP   None             <none>        2379/TCP,2380/TCP                                                                 3m56s   app=db2u-nfs1,component=etcd,formation_id=db2u-nfs1
service/c-db2u-nfs1-ldap            ClusterIP   172.30.122.120   <none>        50389/TCP                                                                         6m44s   app=db2u-nfs1,formation_id=db2u-nfs1,role=ldap
service/c-db2u-nfs1-tools           ClusterIP   172.30.222.67    <none>        53/TCP,53/UDP                                                                     6m55s   app=db2u-nfs1,formation_id=db2u-nfs1,role=tools

NAME                                    READY   UP-TO-DATE   AVAILABLE   AGE     CONTAINERS   IMAGES                                                                                                                 SELECTOR
deployment.apps/c-db2u-nfs1-ldap        1/1     1            1           6m35s   ldap         cp.icr.io/cp/db2u.auxiliary.auth@sha256:8b7cbb4f34caa6a4c5b98f3ddf9d15c4308c9ecdd26bbd61560498bc7e1e2dd9               app=db2u-nfs1,formation_id=db2u-nfs1,role=ldap
deployment.apps/c-db2u-nfs1-tools       1/1     1            1           6m45s   tools        cp.icr.io/cp/db2u.tools@sha256:b571c9309da714ae50d6b7c0964d7ec02f2d28279e2feff0dadc84295bed249d                        app=db2u-nfs1,formation_id=db2u-nfs1,role=tools
deployment.apps/db2u-operator-manager   1/1     1            1           23h     manager      registry.hub.docker.com/ibmcom/db2u-operator@sha256:686546a3fd338d08ddb084497d1e629e0f6a7fde83d7939f846385beb5ea9170   control-plane=db2u-operator-manager

NAME                                              DESIRED   CURRENT   READY   AGE     CONTAINERS   IMAGES                                                                                                                 SELECTOR
replicaset.apps/c-db2u-nfs1-ldap-77df7c8c7f       1         1         1       6m35s   ldap         cp.icr.io/cp/db2u.auxiliary.auth@sha256:8b7cbb4f34caa6a4c5b98f3ddf9d15c4308c9ecdd26bbd61560498bc7e1e2dd9               app=db2u-nfs1,formation_id=db2u-nfs1,pod-template-hash=77df7c8c7f,role=ldap
replicaset.apps/c-db2u-nfs1-tools-868b94b4d9      1         1         1       6m45s   tools        cp.icr.io/cp/db2u.tools@sha256:b571c9309da714ae50d6b7c0964d7ec02f2d28279e2feff0dadc84295bed249d                        app=db2u-nfs1,formation_id=db2u-nfs1,pod-template-hash=868b94b4d9,role=tools
replicaset.apps/db2u-operator-manager-9b8b9d877   1         1         1       23h     manager      registry.hub.docker.com/ibmcom/db2u-operator@sha256:686546a3fd338d08ddb084497d1e629e0f6a7fde83d7939f846385beb5ea9170   control-plane=db2u-operator-manager,pod-template-hash=9b8b9d877

NAME                                READY   AGE     CONTAINERS   IMAGES
statefulset.apps/c-db2u-nfs1-db2u   1/1     3m27s   db2u         cp.icr.io/cp/db2u@sha256:170c7727dfa1058f97b2deb1d56eeb964d11f4b09b89a03915387ebfd6f511ad
statefulset.apps/c-db2u-nfs1-etcd   1/1     3m47s   etcd         cp.icr.io/cp/etcd@sha256:170b415ddaad079189b480ec8d606b5ac7741194e2dd9f670c1230a100482324

NAME                                  COMPLETIONS   DURATION   AGE     CONTAINERS      IMAGES                                                                                             SELECTOR
job.batch/c-db2u-nfs1-instdb          1/1           85s        5m38s   instdb          cp.icr.io/cp/db2u.instdb@sha256:91561f4af4872288f5b4b5103fc0428cea191781495900132ed32f2e727373be   controller-uid=15d88848-969a-4c2b-a0b1-955d403e7f6c
job.batch/c-db2u-nfs1-restore-morph   0/1           38s        38s     restore-morph   cp.icr.io/cp/db2u.tools@sha256:b571c9309da714ae50d6b7c0964d7ec02f2d28279e2feff0dadc84295bed249d    controller-uid=51004303-5da9-402a-867f-4f5f2ebf0360

```



##Step6. 動作確認
Db2 の Pod「c-db2u-nfs1-db2u-0」 にログインし、データベースに接続できることを確認する。
Podには以下のコマンドでログインする。

```
 $ oc rsh c-db2u-nfs1-db2u-0 /bin/bash
```


**【動作確認例】**
ログイン時のユーザは Db2コマンド実行権限を持たないdb2uadm であるため、Podへのログインが成功したらdb2inst1 ユーザに su します。
db2 list db directory コマンドにより、この環境に作成されるデータベース名がBLUDBであると確認できます。
以下は、DBに接続しテスト用テーブルを作成し、データを挿入することで動作確認を行う例。

```
$ oc rsh c-db2u-nfs1-db2u-0 /bin/bash
[db2uadm@c-db2u-nfs1-db2u-0 /]$ whoami
db2uadm
[db2uadm@c-db2u-nfs1-db2u-0 /]$ su - db2inst1
Last login: Tue Dec 29 07:27:14 UTC 2020 on pts/2
[db2inst1@c-db2u-nfs1-db2u-0 - Db2U db2inst1]$ which db2
~/sqllib/bin/db2
[db2inst1@c-db2u-nfs1-db2u-0 - Db2U db2inst1]$ db2 list db directory

 System Database Directory

 Number of entries in the directory = 1

Database 1 entry:

 Database alias                       = BLUDB
 Database name                        = BLUDB
 Local database directory             = /mnt/blumeta0/db2/databases
 Database release level               = 15.00
 Comment                              =
 Directory entry type                 = Indirect
 Catalog database partition number    = 0
 Alternate server hostname            =
 Alternate server port number         =

[db2inst1@c-db2u-nfs1-db2u-0 - Db2U db2inst1]$ db2 connect to bludb

   Database Connection Information

 Database server        = DB2/LINUXX8664 11.5.5.0
 SQL authorization ID   = DB2INST1
 Local database alias   = BLUDB

[db2inst1@c-db2u-nfs1-db2u-0 - Db2U db2inst1]$
[db2inst1@c-db2u-nfs1-db2u-0 - Db2U db2inst1]$ db2 list tables

Table/View                      Schema          Type  Creation time
------------------------------- --------------- ----- --------------------------

  0 record(s) selected.

[db2inst1@c-db2u-nfs1-db2u-0 - Db2U db2inst1]$ db2 "create table t1 (c1 integer,c2 char(8))"
DB20000I  The SQL command completed successfully.
[db2inst1@c-db2u-nfs1-db2u-0 - Db2U db2inst1]$ db2 "insert into t1 values(1,'a'),(2,'b')"
DB20000I  The SQL command completed successfully.

[db2inst1@c-db2u-nfs1-db2u-0 - Db2U db2inst1]$ db2 "select * from t1"

C1          C2
----------- --------
          1 a
          2 b

  2 record(s) selected.

[db2inst1@c-db2u-nfs1-db2u-0 - Db2U db2inst1]$ db2 terminate
DB20000I  The TERMINATE command completed successfully.
[db2inst1@c-db2u-nfs1-db2u-0 - Db2U db2inst1]$ exit

db2 terminate
DB20000I  The TERMINATE command completed successfully.

```

 ---> 導入したDb2は問題なく稼働していることが確認できました。

##Step7. ライセンスの登録状況確認
Db2 V11.5では、ライセンスを適用しなくても Community Editionという無償版ライセンスが適用された状態となっている。旧バージョンのDb2試用版のように90日経過したらDb2が起動しなくなるということはありません。
この点はDb2 on OpenShiftも共通です。

導入したDb2のライセンス確認/更新を行うには、下記マニュアルに記載コマンドを実行します。

[Db2 11.5 KnowledgeCenter[Upgrading your Db2 Community Edition license certificate key]](
https://www.ibm.com/support/knowledgecenter/SSEPGG_11.5.0/com.ibm.db2.luw.db2u_openshift.doc/doc/t_db2u_upgrd_lic_v11-5-5.html)



## 接続情報
Liberty など、OCPクラスタ内からのDB接続時に必要となる接続情報として、クラスターIPアドレスとポート番号を確認する。

####① クラスターIPアドレス
プロジェクト名、リリース名は環境に応じて書き換えて実行する。

```
oc get svc -n <PROJECT> <RELEASE-NAME>-db2u-engn-svc -o jsonpath='{.spec.ports[?(@.name=="legacy-server")].nodePort}'
```

####② ポート番号
プロジェクト名、リリース名は環境に応じて書き換えて実行する。

```
oc get svc -n <PROJECT> <RELEASE-NAME>-db2u-engn-svc -o jsonpath='{.spec.clusterIP}'
```

## 関連記事
◆OpenShift環境へのDb2 Operator導入手順
https://qiita.com/mi-kana/items/c3fb640d671caf624eb8
◆Db2 11.5.5 on OpenShift：GUIベースのデプロイ手順
https://qiita.com/mi-kana/items/f429c7e4e86f6077df84
◆Db2 HADR on OpenShift かんたんデプロイ
https://qiita.com/mi-kana/items/7fb2fecc02067bc8386b

-------
以上です。