Db2 for OpenShift and Kubernetes 11.5.8.0-cn2
Db2をOpenShift/K8s環境で稼働するときは、Db2 for OpenShift and Kubernetes(別名Db2U)を利用します。
OpenShiftやK8sの環境に Db2(Db2U) Operatorをインストールすると、Db2のインストール、運用のためのAPIを提供するカスタムリソースが利用可能になります。
Db2のインストールには、以下2種類のカスタムリソースを利用することができます。
-
Db2uCluster
- Db2 Operator登場時(V11.5.5)に提供開始
- すべての複数論理ノード(MLN)が各Pod内で同じデータボリュームを共有
- OpenShift Data Foundation (ODF)やPortworxのようなSoftware-Defined Storageで比較的優れたパフォーマンスを発揮
- Db2エンジンとetcdはStatefulSetとしてDeployされる
-
Db2uInstance
- V11.5.8で登場
- 当初はWarehouse MPP構成のみサポート
- V11.5.8.0-cn1以降、通常のOLTPデータベース構成(db2oltp)もサポート
- Amazon Web Services (AWS) や Azure などのクラウドプラットフォームで、大幅なパフォーマンス向上を実現
- StatefulSetとしてDeployされるのはetcdのみ
- V11.5.8で登場
ここでは新しく登場したDb2uInstanceで、OLTP用データベースを構成します。
Db2uCluster, Db2uInstance YAMLの違い
以下の点が異なります。(他にもあるのかもしれませんが、顕著な違いとして)
- API(kind)
- ストレージ定義の記述位置
- Db2uClusterでは、ストレージ定義はまとめて一か所に記載
- Db2uInstanceでは、データ/アクティブログ用のストレージ定義はデータベース定義の一部となる
- Db2uClusterと同じ記述方法ではDeploy不可(詳細は後述)
- 複数論理ノード(MLN)の定義
- Db2uInstanceには、Volume Per Partition の設定がある
前提
- CPU, Memory, Storage等の前提条件は、Db2 Operator の Readme画面で確認可能
- Db2uInstanceのデプロイの前提は、Db2uClusterと変わらないようです
- 今回はDb2uCluster稼働中のROKS環境に、Db2uInstanceを追加デプロイ
- Db2前提要件~Db2 Operatorまでの導入手順は、過去ログに記載しているため、この記事では割愛します
- 稼働中のDb2uClusterがあるプロジェクト内に、Db2uInstanceを導入
Db2uInstanceデプロイ手順
Db2マニュアル に沿って導入します。
Step1. Db2uInstance インストール
OCP Webコンソールを開き、Db2 Operator を選択します。
Db2u Instanceの「インスタンスの作成」をクリックします。
Yaml編集画面が開きます。
予め入力済となっているYamlをベースに修正するか、Db2マニュアルを参考に適宜修正を行い、「作成」を押下します。
※今回Deployした際のYamlファイルは末尾に掲載
インストールが開始され、Db2uInstanceの一覧画面に遷移します。
「ステータス」列が「NotReady」から「Ready」に変わったらデプロイ完了です。
Step2. Db2uInstance インストール完了確認
OCP Webコンソールのステータスが「Ready」となっていれば導入は成功していますが、念のためコマンドラインでも状況を確認します。
・Db2uInstanceのSTATEが「Ready」となっていること
# oc get db2uinstance
NAME STATE MAINTENANCESTATE AGE
db2uinstance-1 Ready None 36m
・<deploy-name>-restore-morph の Pod の STATE が Completed であること
・<deploy-name>-db2u-0 の Pod の STATE が Running かつ READY が「1/1」であること
root@IBM-PF2E8K5F:~# oc get all | grep -v db2ucluster
NAME READY STATUS RESTARTS AGE
pod/c-db2uinstance-1-db2u-0 1/1 Running 0 5d1h
pod/c-db2uinstance-1-etcd-0 1/1 Running 0 5d1h
pod/c-db2uinstance-1-restore-morph-vmk24 0/1 Completed 0 5d1h
pod/db2u-day2-ops-controller-manager-569554d5f-bshsx 1/1 Running 1 (92d ago) 121d
pod/db2u-operator-manager-6dff8b7d74-cgpwf 1/1 Running 7 (6d22h ago) 121d
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)
AGE
service/c-db2uinstance-1-db2u ClusterIP 172.21.179.245 <none> 50000/TCP,50001/TCP,25000/TCP,25001/TCP,25002/TCP,25003/TCP,25004/TCP,25005/TCP 5d1h
service/c-db2uinstance-1-db2u-engn-svc NodePort 172.21.228.2 <none> 50001:32383/TCP,50000:32713/TCP 5d1h
service/c-db2uinstance-1-db2u-head-engn-svc NodePort 172.21.119.65 <none> 50001:30372/TCP,50000:30755/TCP 5d1h
service/c-db2uinstance-1-db2u-internal ClusterIP None <none> 50000/TCP,9443/TCP,50052/TCP 5d1h
service/c-db2uinstance-1-etcd ClusterIP None <none> 2379/TCP,2380/TCP 5d1h
service/db2u-day2-ops-controller-manager-metrics-service ClusterIP 172.21.49.113 <none> 8443/TCP
160d
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/db2u-day2-ops-controller-manager 1/1 1 1 160d
deployment.apps/db2u-operator-manager 1/1 1 1 234d
NAME DESIRED CURRENT READY AGE
replicaset.apps/db2u-day2-ops-controller-manager-569554d5f 1 1 1 121d
replicaset.apps/db2u-day2-ops-controller-manager-84cc85fb8d 0 0 0 160d
replicaset.apps/db2u-operator-manager-6dff8b7d74 1 1 1 121d
replicaset.apps/db2u-operator-manager-7dff69955b 0 0 0 160d
NAME READY AGE
statefulset.apps/c-db2uinstance-1-etcd 1/1 5d1h
NAME COMPLETIONS DURATION AGE
job.batch/c-db2uinstance-1-restore-morph 1/1 5s 5d1h
oc get all の結果から、StatefulSet としてデプロイ・管理されるのは etcd だけであることも確認できます。
Step3. 動作確認
バージョン確認:
# oc rsh c-db2uinstance-1-db2u-0 bash
Defaulted container "db2u" out of: db2u, instdb (init), init-labels (init), init-kernel (init)
[db2uadm@c-db2uinstance-1-db2u-0 /]$ su - db2inst1
Last login: Wed Sep 20 06:42:41 UTC 2023 on pts/0
[db2inst1@c-db2uinstance-1-db2u-0 - Db2U db2inst1]$ db2level
DB21085I This instance or install (instance name, where applicable:
"db2inst1") uses "64" bits and DB2 code release "SQL11058" with level
identifier "0609010F".
Informational tokens are "DB2 v11.5.8.0", "special_28620",
"DYN2304191336AMD64_28620", and Fix Pack "0".
Product is installed at "/opt/ibm/db2/V11.5.0.0".
[db2inst1@c-db2uinstance-1-db2u-0 - Db2U db2inst1]$
簡易な動作確認として、接続確認、オブジェクト作成、データ挿入、データ読込:
[db2inst1@c-db2uinstance-1-db2u-0 - Db2U db2inst1]$ db2gcf -s
DB2 State : Available
[db2inst1@c-db2uinstance-1-db2u-0 - Db2U db2inst1]$ db2 list db directory
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-1-db2u-0 - Db2U db2inst1]$ db2 connect to sampledb
Database Connection Information
Database server = DB2/LINUXX8664 11.5.8.0
SQL authorization ID = DB2INST1
Local database alias = SAMPLEDB
[db2inst1@c-db2uinstance-1-db2u-0 - Db2U db2inst1]$ db2 list tables
Table/View Schema Type Creation time
------------------------------- --------------- ----- --------------------------
0 record(s) selected.
[db2inst1@c-db2uinstance-1-db2u-0 - Db2U db2inst1]$ db2 "create table t1 (c1 integer, c2 char(32))"
DB20000I The SQL command completed successfully.
[db2inst1@c-db2uinstance-1-db2u-0 - Db2U db2inst1]$ db2 "insert into t1 values (1,'db2uinst')"
DB20000I The SQL command completed successfully.
[db2inst1@c-db2uinstance-1-db2u-0 - Db2U db2inst1]$ db2 "insert into t1 values (2,'deploy-comp')"
DB20000I The SQL command completed successfully.
[db2inst1@c-db2uinstance-1-db2u-0 - Db2U db2inst1]$ db2 "select * from t1"
C1 C2
----------- --------------------------------
1 db2uinst
2 deploy-comp
2 record(s) selected.
[db2inst1@c-db2uinstance-1-db2u-0 - Db2U db2inst1]$ db2 terminate
DB20000I The TERMINATE command completed successfully.
[db2inst1@c-db2uinstance-1-db2u-0 - Db2U db2inst1]$
Step4. ライセンス適用(Option)
ライセンスはこちらのマニュアルに従って適用可能です。
Db2マニュアル「Db2 Community Edition ライセンス証明書キーのアップグレード」
(※Db2uClusterの場合と同一手順)
Db2uInstanceデプロイ用Yamlファイル
apiVersion: db2u.databases.ibm.com/v1
kind: Db2uInstance
metadata:
name: db2uinstance-1
namespace: db2u-1
spec:
license:
accept: true
account:
imagePullSecrets:
- ibm-registry
privileged: true
environment:
partitionConfig:
dataOnMln0: true
total: 1
volumePerPartition: true
instance:
password:
value: xxxxxxxx
registry:
DB2_ATS_ENABLE: 'NO'
DB2_DISPATCHER_PEEKTIMEOUT: '2'
DB2_OBJECT_STORAGE_SETTINGS: 'OFF'
databases:
- settings:
codeset: UTF-8
territory: JP
name: SAMPLEDB
storage:
- name: data
type: template
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
storageClassName: ocs-storagecluster-ceph-rbd
- name: activelogs
type: template
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
storageClassName: ocs-storagecluster-ceph-rbd
authentication:
ldap:
enabled: false
dbType: db2oltp
storage:
- name: meta
type: create
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 5Gi
storageClassName: ocs-storagecluster-cephfs
- name: backup
type: create
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 5Gi
storageClassName: ocs-storagecluster-cephfs
- name: archivelogs
type: create
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 5Gi
storageClassName: ocs-storagecluster-cephfs
podTemplate:
db2u:
resource:
db2u:
limits:
cpu: 4
memory: 16Gi
nodes: 1
version: s11.5.8.0-cn2
補足
Db2uClusterは今後非推奨 ??
Db2の製品マニュアルには、Db2uClusterが非推奨とは記載されません。
OCP Webコンソールから Db2 Operator を表示すると、Db2u Instanceの説明としてDb2uInstanceの利用が推奨されること、Db2uClusterは将来非推奨となること‥と記載があります。
新しい製品なので、動向を見守るしかないのでしょう。
Storageの定義をDb2uCluster同様にYaml記述した場合
Db2uInstanceをデプロイする際には、Db2uClusterと異なり、データとアクティブログのストレージ定義をデータベース(Database)の子要素として記述する必要があります。
うっかり、Db2uCluster同様に末尾に一括してストレージ定義を書くとどうなるか?
エラーになってくれると良いのですが、Deployが永遠に終わらないという残念な状況となり、何が起きているのかわかりません。
以下のように、restore-morphのJob, Pod が起動せず、db2u-0 の Podが 「STATE:Running, READY: 0/1」 の状態となります。
# oc get all -o wide | grep -i db2uinstance-1
2023年 9月 16日 土曜日 00:00:42 JST
pod/c-db2uinstance-1-db2u-0 0/1 Running 0 84s 172.17.12.158 10.244.64.6 <none> <none>
pod/c-db2uinstance-1-etcd-0 1/1 Running 0 98s 172.17.12.164 10.244.64.6 <none> <none>
pod/c-db2uinstance-1-ldap-7d754d498c-2gccw 1/1 Running 0 109s 172.17.12.177 10.244.64.6 <none> <none>
service/c-db2uinstance-1-db2u ClusterIP 172.21.100.222 <none> 50000/TCP,50001/TCP,25000/TCP,25001/TCP,25002/TCP,25003/TCP,25004/TCP,25005/TCP 95s app=db2uinstance-1,component=db2oltp,formation_id=db2uinstance-1,role=db,type=engine
service/c-db2uinstance-1-db2u-engn-svc NodePort 172.21.222.167 <none> 50001:30726/TCP,50000:31144/TCP 97s app=db2uinstance-1,component=db2oltp,formation_id=db2uinstance-1,role=db,type=engine
service/c-db2uinstance-1-db2u-head-engn-svc NodePort 172.21.4.38 <none> 50001:30113/TCP,50000:31286/TCP 96s app=db2uinstance-1,component=db2oltp,formation_id=db2uinstance-1,name=dashmpp-head-0,role=db,type=engine
service/c-db2uinstance-1-db2u-internal ClusterIP None <none> 50000/TCP,9443/TCP,50052/TCP 96s app=db2uinstance-1,component=db2oltp,formation_id=db2uinstance-1,role=db,type=engine
service/c-db2uinstance-1-etcd ClusterIP None <none> 2379/TCP,2380/TCP 109s app=db2uinstance-1,component=etcd,formation_id=db2uinstance-1
service/c-db2uinstance-1-ldap ClusterIP 172.21.160.12 <none> 50389/TCP
110s app=db2uinstance-1,formation_id=db2uinstance-1,role=ldap
deployment.apps/c-db2uinstance-1-ldap 1/1 1 1 110s ldap icr.io/db2u/db2u.auxiliary.auth@sha256:89c19da618e6f0c9f2e5218ed1d6afa39c83cd21b332f0b611afa0ee430fbceb app=db2uinstance-1,formation_id=db2uinstance-1,role=ldap
replicaset.apps/c-db2uinstance-1-ldap-7d754d498c 1 1 1 110s ldap
icr.io/db2u/db2u.auxiliary.auth@sha256:89c19da618e6f0c9f2e5218ed1d6afa39c83cd21b332f0b611afa0ee430fbceb
app=db2uinstance-1,formation_id=db2uinstance-1,pod-template-hash=7d754d498c,role=ldap
statefulset.apps/c-db2uinstance-1-etcd 1/1 98s etcd icr.io/db2u/etcd@sha256:c6c35e11f923c9d058e012d02caab720bf1e6db0c9bcb0363635a51a76f972b4
root@IBM-PF2E8K5F:~#
data, activelog についてストレージ定義を正しい位置に記述しないと、Db2Uセットアップの必須ステップであるrestore-morphジョブが開始されません。Db2エンジン本体である db2u-0 のPod自体は作成されるものの、肝心のデータベースの初期化が進まないため、Startup probe の成功条件が満たされず、READY出力が"0/1"のままの状態で半永久的に膠着してしまいます。