Kubernetes版Db2(製品名 Db2 for Red Hat OpenShift and Kubernetes )の最新版、V11.5.9をDeployしました。
2024年1月概観
OpenShiftのWebコンソールでGUIベースでもYaml生成/デプロイできますが、今のところは仕様に沿った正しいYamlが生成されないため、コンソール生成Yamlを部分的に手動で修正します(→詳細は後述)。
デプロイ手順・考慮点はDb2uInstance 11.5.8-cn2,3 と変わりません。かつてLDAP無し構成としないとDeployが進まない問題もありましたが、11.5.9はLDAPありでも特に問題なく立てられました。
参考資料
Db2 for Red Hat OpenShift and Kubernetesの情報源は以下3つあります。
2023年12月末時点、Db2uInstanceのデプロイ手順が言及されるのは今のところ製品マニュアルのみですので、マニュアルをベースにYamlを作成・Deployします。
- Db2製品マニュアル「Db2uInstance カスタム・リソースを使用した Db2 のデプロイ」
-
IBM Db2U Operator Adoption Guide
- 2023.12時点Db2uCluster(旧CR)についてのみ解説
- Db2 Operator Readme
- OpenShift(OCP)のWebコンソールから参照可
- 2023.12時点Db2uCluster(旧CR)についてのみ解説
構成
<<環境>>
- Red Hat OpenShift on IBM Cloud (ROKS)
- Red Hat OpenShift のフルマネージドサービス
- OCP version: 4.10.67_1591
- Db2 for OpenShift and Kubernetes(Db2U)
- Db2 Operator 110509.0.0
- Db2 Engine version s11.5.9.0
※ OCPバージョンが古くDb2サポート範囲外ですが、まあひとまず試すだけということで‥
<<ストレージ構成>>
性能(I/O分散)のため、PVCを分ける構成をとることができます
今回は以下の構成としました
Db2uInstanceデプロイの前提
Db2 for Red Hat OpenShift and Kubernetesをデプロイするには、OCPやストレージクラスが構成済であること、Db2コンテナイメージ取得のために必要となるSecretを事前定義しておくこと、Db2 Operatorを導入しておくこと、Db2 Operatorバージョンが古い場合は最新化しておくこと‥などの事前準備が必要となります。
Db2担当者が行う手順の全体的な流れについては、以下別記事に記録しています。
ここでは Db2 Operatorまで導入済であることを前提として、Db2uInstanceをデプロイする手順(≒Yaml)を記載します。
Db2uInstanceデプロイ手順
上記のようなyamlを作成したら、以下いずれかを用いてDeployします。
- OCP Webコンソール
- oc apply(create)コマンド
今回は1.で実施します。
OCP WebコンソールからDeployすると、Yamlのひな型が大方出来上がった状態で提供され、フォーム画面やYaml編集画面で直接編集可能です。
Db2 Operator先頭画面
Db2uInstanceデプロイ画面(フォームビュー)
テキストボックス、ドロップダウンリストなどを利用して手軽にプロパティ編集できます
ただしYamlの全項目網羅されるわけではないため、YAMLビューも併用します
Db2uInstanceデプロイ初期画面(YAMLビュー)
自動生成されるYAMLを直接編集できる画面です
フォームビューで編集できない項目があればこの画面で追記/編集します。
補足: 自動生成されるYAMLはアクセスモード ReadWriteOnce のストレージ(PVC)の定義位置が間違っているため、手動で修正する必要があります。そのままDeployするとフリーズしDeployが永遠に終わりません。
Db2uInstauceデプロイ開始
フォームビュー/YAMLビューどちらかで「作成」ボタンを押すと、デプロイが開始されます。
デプロイ状況の確認
デプロイには数分程度時間がかかります。
oc get pod(または oc get allなど)にて確認し、以下の状態になっていればDeploy完了です。
Pod名 | STATUS | READY | 備考 |
---|---|---|---|
c-db2uinstance-3-db2u-0 | Running | 1/1 | Db2エンジンのPod * db2syscが稼働 |
c-db2uinstance-3-restore-morph-xxxxx | Completed | 0/1 | Db2セットアップの最終処理を行うJobに属するPod |
Deploy完了時の oc get all コマンド出力例
# oc get all | grep -i db2uinstance-3
pod/c-db2uinstance-3-db2u-0 1/1 Running 0 10m
pod/c-db2uinstance-3-etcd-0 1/1 Running 0 10m
pod/c-db2uinstance-3-ldap-df8b64c59-7vf6v 1/1 Running 0 11m
pod/c-db2uinstance-3-restore-morph-98sh7 0/1 Completed 0 99s
service/c-db2uinstance-3-db2u ClusterIP 172.21.102.17 <none> 50000/TCP,50001/TCP,25000/TCP,25001/TCP,25002/TCP,25003/TCP,25004/TCP,25005/TCP 10m
service/c-db2uinstance-3-db2u-engn-svc NodePort 172.21.141.74 <none> 50001:31853/TCP,50000:30582/TCP 10m
service/c-db2uinstance-3-db2u-head-engn-svc NodePort 172.21.212.246 <none> 50001:32708/TCP,50000:30335/TCP 10m
service/c-db2uinstance-3-db2u-internal ClusterIP None <none> 50000/TCP,9443/TCP,50052/TCP 10m
service/c-db2uinstance-3-etcd ClusterIP None <none> 2379/TCP,2380/TCP 11m
service/c-db2uinstance-3-ldap ClusterIP 172.21.142.167 <none> 50389/TCP 11m
deployment.apps/c-db2uinstance-3-ldap 1/1 1 1 11m
replicaset.apps/c-db2uinstance-3-ldap-df8b64c59 1 1 1 11m
statefulset.apps/c-db2uinstance-3-etcd 1/1 10m
job.batch/c-db2uinstance-3-restore-morph 1/1 7s 99s
動作確認
本格的なUTまではいきませんが、ひととおりの簡単な動作確認をします。
- Podにログインできるか
- db2inst1ユーザにスイッチ可能か
- DBディレクトリが正しく表示されるか
- データベースに接続できるか
- 表の作成/INSERT/SELECTなど、読み書き操作ともに支障なく行えるか
# oc rsh c-db2uinstance-3-db2u-0 bash
Defaulted container "db2u" out of: db2u, instdb (init), init-labels (init), init-kernel (init)
[db2uadm@c-db2uinstance-3-db2u-0 /]$ db2 list db directory
bash: db2: command not found
[db2uadm@c-db2uinstance-3-db2u-0 /]$ su - db2inst1
Last login: Mon Dec 25 03:06:35 UTC 2023
[db2inst1@c-db2uinstance-3-db2u-0 - Db2U db2inst1]$ date ; db2 list db directory
Mon Dec 25 03:16:48 UTC 2023
System Database Directory
Number of entries in the directory = 1
Database 1 entry:
Database alias = SAMPLEDB
Database name = SAMPLEDB
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-db2uinstance-3-db2u-0 - Db2U db2inst1]$ db2 "connect to sampledb"
Database Connection Information
Database server = DB2/LINUXX8664 11.5.9.0
SQL authorization ID = DB2INST1
Local database alias = SAMPLEDB
[db2inst1@c-db2uinstance-3-db2u-0 - Db2U db2inst1]$ db2 "create table t1 (c1 integer, c2 char(32), c3 timestamp)"
DB20000I The SQL command completed successfully.
[db2inst1@c-db2uinstance-3-db2u-0 - Db2U db2inst1]$ db2 "insert into t1 values (1,'db created', current timestamp)"
DB20000I The SQL command completed successfully.
[db2inst1@c-db2uinstance-3-db2u-0 - Db2U db2inst1]$ db2 "select * from t1"
C1 C2 C3
----------- -------------------------------- --------------------------
1 db created 2023-12-25-03.17.20.923992
1 record(s) selected.
[db2inst1@c-db2uinstance-3-db2u-0 - Db2U db2inst1]$
ライセンス適用
Db2 for Red Hat OpenShift and Kubernetes でも、従来のオンプレ版Db2同様に、有償版利用時にはライセンスを適用します。
適用するライセンスファイルはオンプレ版と同じものを使用しますが、適用手順が異なります。手順はDb2マニュアルに記載される通りです。ここでは割愛。
Db2uInstance 11.5.9 デプロイ用Yaml
以下内容で構成します
- CRの種類: Db2uInstance
- バージョン:s11.5.9.0
- DB種別:db2oltp
- warehouseの場合、db2wh を選択
- DB名:SAMPLEDB
- デフォルトではBLUDB
- コードセット:UTF-8
- テリトリー:JP
- レジストリ変数の一部を事前構成
- ライセンス:Accept
- Image Pull Secret:ibm-registry(事前定義済)
- リソース制限: CPU 4 / Memory 16 Gi
- ストレージ:上図の通りの分散構成
apiVersion: db2u.databases.ibm.com/v1
kind: Db2uInstance
metadata:
name: db2uinstance-3
namespace: db2u-1
spec:
account:
imagePullSecrets:
- ibm-registry
securityConfig:
privilegedSysctlInit: true
environment:
databases:
- name: SAMPLEDB
settings:
codeset: UTF-8
territory: JP
storage:
- name: data
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
storageClassName: ocs-storagecluster-ceph-rbd
type: template
- name: activelogs
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
storageClassName: ocs-storagecluster-ceph-rbd
type: template
- name: tempts
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
storageClassName: ocs-storagecluster-ceph-rbd
type: template
dbType: db2oltp
instance:
password:
value: xxxxxxxx
registry:
DB2_ATS_ENABLE: 'NO'
DB2_DISPATCHER_PEEKTIMEOUT: '2'
DB2_OBJECT_STORAGE_SETTINGS: 'OFF'
partitionConfig:
dataOnMln0: true
total: 1
volumePerPartition: true
license:
accept: true
nodes: 1
podTemplate:
db2u:
resource:
db2u:
limits:
cpu: '4'
memory: 16Gi
storage:
- name: meta
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 5Gi
storageClassName: ocs-storagecluster-cephfs
type: create
- name: backup
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 5Gi
storageClassName: ocs-storagecluster-cephfs
type: create
- name: archivelogs
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
storageClassName: ocs-storagecluster-cephfs
type: create
version: s11.5.9.0