Db2 on CP4D 4.6.2 導入と構成 - 1.(準備)Db2専用ノードの設定

## Db2 on Cloud Pak for Data 4.6.2 導入と構成
シリーズ"Db2 on CP4D 4.6.2 導入と構成"は　2023年02月の経験をベースに　次のようなCloud Pak for Data (以下CP4D)4.6.2環境へ　Db2を導入デプロイする手順をご紹介します。　
- Managed OpenShift cluster (ROKS) on IBM Cloud (VPC/"Gen2")
- OpenShift Container Platform (OCP) 4.10 , OpenShift Data Foundation (ODF) 4.10
- Cloud Pak for Data (CP4D) 4.6.2 

本シリーズの目次は[こちら](https://qiita.com/mi-shimo/items/be803376088b482e2954)です。
ここでは　Db2専用ノードを設定します。

## 1.(準備)Db2専用ノードの設定
Db2では 専用ノードを使用することを推奨されています。 とくに 本番環境では専用ノードで稼働させる必要があります。ここでは　Db2専用ノード `10.244.128.70`にして　dedicated_specifier(ノードラベル)`database-db2oltp`を設定します。

### 手順
作業は踏み台マシンでおこないます。

(1) 環境変数シェルスクリプトを次のようにして実行して環境変数を定義してOpenShiftクラスターにログインしましょう。 ここで実行している$OCLOGINはcpd_vars.sh内で環境変数として定義しています。
```    
# source ./cpd_vars.sh
# $OCLOGIN
```
シリーズ"Db2 on CP4D 4.6.2 導入と構成"で使用している環境変数登録用のシェルcpd_vars.shについては[Db2 on CP4D 4.6.2 導入と構成 - 前提, 環境変数定義シェルcpd_vars.sh](https://qiita.com/mi-shimo/items/161e887624224c73e697#%E7%92%B0%E5%A2%83%E5%A4%89%E6%95%B0%E5%AE%9A%E7%BE%A9%E3%82%B7%E3%82%A7%E3%83%ABcpd_varssh)をご参照ください。

(2) ワーカーノードをリストして Db2専用ノードにするノードを決定します。
```
# oc get nodes
NAME            STATUS   ROLES           AGE   VERSION
10.244.128.63   Ready    master,worker   27h   v1.23.12+8a6bfe4
10.244.128.64   Ready    master,worker   27h   v1.23.12+8a6bfe4
10.244.128.65   Ready    master,worker   27h   v1.23.12+8a6bfe4
10.244.128.67   Ready    master,worker   27h   v1.23.12+8a6bfe4
10.244.128.68   Ready    master,worker   27h   v1.23.12+8a6bfe4
10.244.128.69   Ready    master,worker   27h   v1.23.12+8a6bfe4
10.244.128.70   Ready    master,worker   27h   v1.23.12+8a6bfe4
10.244.128.72   Ready    master,worker   27h   v1.23.12+8a6bfe4
#
```
(3) この後の作業で使用するDb2専用ノード `10.244.128.70`　dedicated_specifier`database-db2oltp`を環境変数に登録しておきましょう。
```
# db2node=10.244.128.70; dedicated_specifier=database-db2oltp
```

(4) NoSchedule オプションをつけて `oc adm taint node`を実行します。 taintが適用されたノードにポッドがデプロイされないようにします。
```
# oc adm taint node ${db2node} icp4data=${dedicated_specifier}:NoSchedule --overwrite
node/10.244.128.70 modified
#
```

(5) `oc adm drain` コマンドを実行して すべてのPodを taint したノードから 安全に退避させます。drainをオプションなしで実行するとほとんどのケースで 次のようなエラーがします。 
(注)エラーの出力は異なる環境のものであるため nodeのIPアドレスが異なります。
```
# oc adm drain ${db2node}
node/10.245.0.96 cordoned
error: unable to drain node "10.245.0.96" due to error:[cannot delete Pods not managed by ReplicationController,　(省略)
There are pending nodes to be drained:
 10.245.0.96
cannot delete Pods not managed by ReplicationController, ReplicaSet, Job, DaemonSet or StatefulSet (use --force to override): (省略)
cannot delete DaemonSet-managed Pods (use --ignore-daemonsets to ignore): (省略)
cannot delete Pods with local storage (use --delete-emptydir-data to override): (省略)
#
```
`oc adm drain` コマンドで エラーが発生する場合、エラーメッセージを吟味して 問題ないようであれば エラーメッセージで指定されたオプションをつかって 再度 `oc adm drain` コマンドを実行します。
```
# oc adm drain ${db2node} --ignore-daemonsets --delete-emptydir-data --force
node/10.244.128.70 cordoned
WARNING: deleting Pods not managed by ReplicationController,(省略)
evicting pod kube-system/ibm-worker-info-agent-10.248.128.75-yx1r2-drptv
evicting pod ibm-odf-validation-webhook/managed-storage-validation-webhooks-d9f78d586-xxxgb
:(省略)
pod/certified-operators-dsgpx evicted
node/10.244.128.70 drained
#
```

(6) `oc adm drain` 実行中にスケジュール対象外とされた(cordoned)ノードを スケジュール対象としてマーク(uncordon)します。
```
# oc adm uncordon ${db2node}
node/10.244.128.70 uncordoned
#
```

(7) ノードにラベルを付けます。
```
# oc label node ${db2node} icp4data=${dedicated_specifier} --overwrite
node/10.244.128.70 labeled
#
```

(8) 8. オプション : ノードにラベルがつけられたことを確認しましょう。
```
# oc get node --show-labels | grep ${dedicated_specifier}
10.244.128.70   Ready    master,worker   28h   v1.23.12+8a6bfe4   arch=amd64,(省略),icp4data=database-db2oltp,(省略)
#
```
↑の出力例は大半を省略していて、実際の出力では1000文字目以降に`icp4data=database-db2oltp`が出現していました。

これで　Db2専用ノードの設定ができました。　


#### (メモ) taint の削除 node labelの削除方法
ノード 10.245.0.89につけたラベルキーicp4dataを削除するコマンドの例が次です。
```
oc adm taint nodes 10.245.0.89 icp4data-
oc label node 10.245.0.89 icp4data- --overwrite
```
### 参考文書
- [Setting up dedicated nodes for your Db2 deployment](
https://www.ibm.com/docs/en/cloud-paks/cp-data/4.6.x?topic=install-setting-up-dedicated-nodes)
- [シリーズ"Db2 on CP4D 4.6.2 導入と構成"目次](https://qiita.com/mi-shimo/items/be803376088b482e2954)