2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Db2uInstance(11.5.8-cn2)デプロイYaml

Last updated at Posted at 2023-09-25

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のみ

ここでは新しく登場した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 を選択します。
image.png

Db2u Instanceの「インスタンスの作成」をクリックします。

image.png

Yaml編集画面が開きます。
予め入力済となっているYamlをベースに修正するか、Db2マニュアルを参考に適宜修正を行い、「作成」を押下します。
 ※今回Deployした際のYamlファイルは末尾に掲載

image.png

インストールが開始され、Db2uInstanceの一覧画面に遷移します。
「ステータス」列が「NotReady」から「Ready」に変わったらデプロイ完了です。

(デプロイ開始直後)
image.png

(完了後)
image.png

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ファイル

db2uinstance-1
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は将来非推奨となること‥と記載があります。
新しい製品なので、動向を見守るしかないのでしょう。
image.png

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"のままの状態で半永久的に膠着してしまいます。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?