Db2 on OpenShift (Db2U) とは
Db2 on OpenShift は、マイクロサービスアーキテクチャに基づいて設計され、コンテナとして提供されるDb2ランタイムです。Kubernetesをベースとするコンテナ・プラットフォームである Red Hat OpenShift クラスタ上で、Db2をマイクロサービス(Pod)として稼働させることができます。
別名として、Db2U(Db2 Universal Container) と呼ばれることもあります。
通常のオンプレ環境では、ユーザーがDb2バイナリをインストール→Db2インスタンス作成→データベース作成、といった流れで環境構築を行いますが、Db2 on OpenShift の場合は、OpenShift環境用に提供されるDb2uClusterというカスタムリソースをoc(kubectl)コマンド1つでデプロイすることで、Db2データベース作成までの構成作業がバックエンドで、自動で行われます。
Db2データベース名など環境ごとの設定情報は、事前にYamlファイルに定義しておくことができます。
【補足:Db2 on OpenShift と Docker版Db2との違い】
Db2には、Docker版もあります。(正式名称:Db2 Community Edition for Docker)
DockerHub に配置されていて誰でも無償で利用できます。
Docker版も、この記事で扱う Db2 on OpenShift も、大きくくくればどちらも「コンテナ化されたDb2」です。
どちらかといえば、Dockerランタイムさえあれば利用可能なDocker版のほうが身近でお手軽です。
しかし、Docker版はライセンスを適用することが許可されず商用利用は実質出来ないため、お客さま環境のコンテナ化を目指す上では Db2 on OpenShift が適しています。
Docker版と、OpenShift版には大きく以下のような違いがあります。
比較項目 | Docker版Db2 | Db2 on OpenShift (Db2U) |
---|---|---|
商用利用 | 不可 | 可 |
Db2エンジンのバージョン | オンプレ版Db2と一致 | オンプレ版Db2と基本的に同じ cn-x というマイナーリリースアップが随時行われる |
作成可能なDBの数 | 1つ | 複数(最大 8) |
初期セットアップ方法 | docker pull/docker runコマンド | oc createコマンド(+yamlファイル) |
コンテナ障害時のデータの復元 | バックアップがあれば復元可能 | データ/ログがPV上に存在するため、コンテナ(Pod)が再起動出来れば障害発生時点に戻れる |
Db2 on OpenShift 11.5.6 新機能
- 複数データベース構成のサポート
- これまで単一インスタンス / 単一データベース構成のみサポートされていましたが、
V11.5.6から、単一インスタンス / 複数データベース(最大8) の構成がサポートされるようになりました。
- これまで単一インスタンス / 単一データベース構成のみサポートされていましたが、
- IBM Common Services のサポート
- HADR マルチスタンバイ構成のサポート
- Db2 11.5.6.0-cn3 新機能:一時表スペース用に別のストレージ領域を指定可能
- I/O のボトルネックを低減し、パフォーマンス向上の効果が期待されます
- Db2 11.5.6.0-cn1/2/5 はいずれも、不具合の修正のみ行われる修正版の位置づけとなります。
Db2 11.5.6.0-cn3 では label など定義情報が増えているため、旧バージョン(V11.5.6.0以前)用に作成しておいたYamlファイルを(バージョンストリングだけ変更して)流用することはできません。
Db2の導入/インスタンス作成/DB作成を行うには、OCP Webコンソールからインスタンス作成画面を利用するか、WebコンソールのDb2インスタンス作成画面のYamlビューで表示されるYamlファイルをベースとし、必要な定義情報を追加してoc apply(create)コマンドでデプロイを行います。
この記事では、Webコンソールを利用する手順を備忘録として残します。
随時リリースアップされますので、最新情報は Db2製品マニュアル を参照ください。
デプロイ済のDb2 on OpenShift 11.5.6 を、より新しいCN リリースにアップグレードするための手順はこちらに記載があります。
- Db2 製品マニュアル [Upgrading and updating your Db2 on Red Hat OpenShift cluster]
- Db2 on OpenShift 11.5.6 アップグレード手順
Db2 on OpenShift 11.5.6 前提要件
Db2 on OpenShift 11.5.6 (OLTP) 導入にあたり、以下の要件があります。
(*下記は、Db2製品マニュアル / 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 or greater
- IBM Cloud File Storage (gold storage class)
- Portworx 2.5.5 or 2.5.6 or 2.6.2
- A HostPath PV that is a mounted clustered filesystem
- IBM® Cloud File Storage (ibmc-file-gold-gid storage class)
- Traditional storage:
- NFS
- IBM Spectrum Scale
- Local storage
ストレージについての要件は Db2製品マニュアルとDb2 Operator Readme(OCP Webコンソール) に記載されますが、バージョンが一致しない箇所もあるため、実際に採用を検討する場合はIBM社に確認を取ったほうが良さそうです。
###(2)その他の要件
- cluster-admin権限を持つOCPユーザ
- IBM Cloud のユーザアカウント
Db2 11.5 マニュアル [Installing Db2 on a Red Hat OpenShift cluster]
導入環境
ここで整理する導入手順では、Db2 on OpenShift の永続ボリュームとして、 Red Hat OpenShift Data Foundation (ODF, 旧名称: OpenShift Container Storage(OCS)) を利用する構成を想定します。
項目 | バージョン |
---|---|
OS(bastion) | Red Hat Enterprise Linux release 8.3 (Ootpa) |
OS(worker) | Red Hat Enterprise Linux CoreOS release 4.8 |
OCP(Client) | 4.8.12 |
OCP(Server) | 4.8.12 |
Kubernetes | v1.21.1+d8043e1 |
ODF(OCS) | 4.8.0 |
Db2 OLTP | 11.5.6.0-cn3 |
構成
今回は、以下のような構成のOCP環境にDb2をデプロイします。
Db2はStatefulSetとしてデプロイされます。
- Bastion Node x1
- Master Node x3
- Worker Node x3
- Worker Node(ODF稼働) x3
データ配置:
Db2 on OpenShift のデータとしては以下の内訳があり、いずれも Persistent Volume に保持されます。
① メタデータ - System & Backup storage [Shared with RWX]
- Db2 instance home directory
- Diagnostic logs
- Other global configuration directories
- Backups, Restore or Load locations
② ユーザデータ - User storage [Exclusive with RWO]
- Database storage paths
- Transaction logs
※「①メタデータ」のうちBackups用領域を別PVに分け、合計3PV構成とすることも可能
今回は、ODFにデータを保持する構成で、Db2をデプロイします。
ODF(OCS)についてや、Db2 on OpenShift におけるデータの永続性については 過去記事 に記載していますのでこの記事では割愛します。
Db2 on OpenShift を導入する際には、以下のODFストレージクラスを指定します。
配置データ種別 | ストレージクラス名 | アクセスモード |
---|---|---|
メタデータ(System/backup data) | ocs-storagecluster-cephfs | ReadWriteMany (RWX) |
ユーザーデータ(User data) | ocs-storagecluster-ceph-rbd | ReadWriteOnce (RWO) |
Db2導入作業を行う時点で、以下のように利用予定のストレージクラスが作成済であることを前提とします。
$ oc get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
localblock kubernetes.io/no-provisioner Delete WaitForFirstConsumer false 59d
ocs-storagecluster-ceph-rbd openshift-storage.rbd.csi.ceph.com Delete Immediate true 59d
ocs-storagecluster-ceph-rgw openshift-storage.ceph.rook.io/bucket Delete Immediate false 59d
ocs-storagecluster-cephfs openshift-storage.cephfs.csi.ceph.com Delete Immediate true 59d
openshift-storage.noobaa.io openshift-storage.noobaa.io/obc Delete Immediate false 59d
作業を行うノード / ユーザ
ここから先で実行するコマンドはすべてBastionノードから実行しています。
cluster-admin権限を持つ、ocコマンド実行可能なユーザで作業します。
コマンド操作の実行ノード・実行ユーザについてはご使用の環境に応じて決めてください。
また、ocコマンド実行前には、oc login が必要となります。
Db2 on OpenShift 導入の流れ
Db2 on OpenShift(Db2U)は、以下の流れで導入します。
このうちDb2 Operatorについては、OpenShift Webコンソールを用いて導入します(※)。他作業はすべてコマンドラインで実施します。
(※)IBM Cloud環境であればCUI導入も可能)
Db2 on OpenShift デプロイ手順
Step1. プロジェクトの作成
Db2 Operaotor/Db2本体をデプロイするためのプロジェクト(ネームスペース)を作成します。
「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のコンテナ・イメージをデプロイし、稼働させるための自動化ツールとしての役割を果たします。Db2 Operatorにより、OpenShift環境のDb2やHADRの導入・構成が容易に出来るようになっています。
Operatorとは何か、Db2 Operatorで出来ることは何か。については別記事に記載していますのでここでは割愛します。
Db2 Operator を導入します。
Step2-1. IBM Operator Catalog導入
IBM Operator Catalogは、openshift-marketplace プロジェクトに導入します。
事前にIBM Operator Catalog が導入済みであるか確認します。
(→導入済みであれば、Step2-1はスキップ可能)
$ oc get CatalogSource -n openshift-marketplace
NAME DISPLAY TYPE PUBLISHER AGE
certified-operators Certified Operators grpc Red Hat 98d
community-operators Community Operators grpc Red Hat 98d
ibm-spp-operator IBM SPP Operator grpc IBM 4h57m
redhat-marketplace Red Hat Marketplace grpc Red Hat 98d
redhat-operators Red Hat Operators grpc Red Hat 98d
製品マニュアルに記載されるyaml定義の内容を、「ibm-operator-catalog.yaml」という名称のファイルに保管し、IBM Operator Catalog の CatalogSourceリソースを作成します。
apiVersion: operators.coreos.com/v1alpha1
kind: CatalogSource
metadata:
name: ibm-operator-catalog
namespace: openshift-marketplace
spec:
displayName: "IBM Operator Catalog"
publisher: IBM
sourceType: grpc
image: icr.io/cpopen/ibm-operator-catalog
updateStrategy:
registryPoll:
interval: 45m
CatalogSourceリソース作成:
$ oc create -f /work/ibm-operator-catalog.yaml
catalogsource.operators.coreos.com/ibm-operator-catalog created
CatalogSource およびパッケージマニフェストが正常に作成されていることを確認します。
$ oc get CatalogSource -n openshift-marketplace
NAME DISPLAY TYPE PUBLISHER AGE
certified-operators Certified Operators grpc Red Hat 98d
community-operators Community Operators grpc Red Hat 98d
ibm-operator-catalog IBM Operator Catalog grpc IBM 72s <---追加された
ibm-spp-operator IBM SPP Operator grpc IBM 5h10m
redhat-marketplace Red Hat Marketplace grpc Red Hat 98d
redhat-operators Red Hat Operators grpc Red Hat 98d
OCP Webコンソールを開き、メニューバーの [Operators] -> [Operators Hub] を選択します。
ナビゲーションパネル [Provider Type] の下に [IBM Operator Catalog]のオプションが表示され、そこからDb2 Operatorをインストールすることができます。
(多くのOperatorが表示されるため、フィルターで「Db2」などと絞って検索するほうが見つけやすいです)
上のOperator一覧の画面で「IBM Db2」を選択すると、Readmeが表示されるため、ここで手順・前提を確認します。
Step2-2. セキュリティ設定
後のDb2U Cluster(Db2インスタンス本体)の導入時に必要となる Entitlement key を取得します。
①Entitlement key の取得
MyIBM のサイトにアクセスし、ライセンスが付与されているソフトウェアに関連付けられた IBMid とパスワードを入力しログインします。
https://myibm.ibm.com/products-services/containerlibrary
「ライブラリーの表示 (View library)」ページに表示されるライセンスを確認します。
この例では「IBM SOFTWARE ACCESS 1 YEAR : all」と表示されています。(※この画面の表示は一例です)
続いて「ライセンス・キーの取得 (Get entitlement key)」に移動してキーを取得します。
[Copy key]ボタンを押下し、Entitlement key をコピーします。(→後ほど利用するため、テキストファイル等に一時保管しておく)
②Image Pull Secret の作成
①で取得したENTITLEDKEY、 EMAILアドレス、プロジェクト(ネームスペース)名を環境に応じて設定し、oc create secret コマンドを実行します。
◆環境変数の設定
$ ENTITLEDKEY="①で取得したEntitlement key"
$ EMAIL="xxx@sample.com"
$ NAMESPACE="db2u-ocs1"
◆Secret オブジェクトの作成
$ oc create secret docker-registry ibm-registry \
> --docker-server=cp.icr.io \
> --docker-username=cp \
> --docker-password=${ENTITLEDKEY} \
> --docker-email=${EMAIL} \
> --namespace=${NAMESPACE}
secret/ibm-registry created
Step2-3. Db2 Operator の導入
OCP Webコンソールにログインし、[Operators] -> [OperatorHub] の画面を開き、[IBM Db2]をクリックします。
(アイコンが多く探しづらい場合、「Db2」とキーワードを入力すると画面の表示対象が絞り込まれます)
[インストール」ボタンを押下し、Db2 Operatorインストール画面を開きます。
Step1.で作成したプロジェクト(ネームスペース)名を選択し、
[インストール]を押下します。
※この画面例では、「更新の承認(Approval Policy)」をデフォルトの「自動」から「手動」へ変更しているため、承認が求められます。「承認」を押下すると Operator 導入が開始されます。
数分程度で、Db2 Operator導入は完了します。
"インストールされた Operator - 使用の準備ができています " というメッセージが表示されます。
oc get pods コマンドで確認してみると、Db2 Operator Manager のPodは無事、Running状態となっています。
$ oc get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
db2u-operator-manager-7b5dfb5bc7-clgp4 1/1 Running 0 12m 10.129.3.51 worker3 <none> <none>
Step3. SecurityContextConstraints 定義作成
Db2マニュアル または Db2 Operator Readme に記載されるyaml定義をコピー&ペーストし、SecurityContextConstraints定義を作成します。
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
Step4. Db2uCluster(シングル構成Db2本体)の導入
Step4-1. デプロイ実施
OCP Webコンソールより、カスタムリソース Db2uCluster のインスタンスを作成します。
OCP Webコンソールから、Db2uCluster インストール画面を開きます。
[Operator] > [インストールされたOperator] > [インスタンスの作成]をクリックします。
必要に応じて、リリース名を変更します。
デプロイされるDb2エンジンのPod名は、「c-リリース名-db2u-0」となります。
「Step2-2.②Image Pull Secret の作成」で作成したSecret名(ibm-registry)を選択し、
ライセンスの受け入れを選択します。
データベースタイプ:db2oltp(デフォルト)を選択し、任意のデータベース名を指定します。
必要に応じて、コードセット、照合順序、テリトリー(国)を指定します。
Db2インスタンスオーナーとなるユーザ(デフォルトではdb2inst)のパスワードを指定します。
今回は、ストレージは下記の2つに分ける想定でデプロイします。
配置データ種別 | ストレージ名 | ストレージクラス名 | アクセスモード |
---|---|---|---|
メタデータ (System/backup data) |
meta | ocs-storagecluster-cephfs | ReadWriteMany (RWX) |
ユーザーデータ(User data) | data | ocs-storagecluster-ceph-rbd | ReadWriteOnce (RWO) |
それぞれの構成情報を指定します。
いずれも、Typeには [create]を指定します。
ここでYamlビューに切り替えると、GUI画面で指定した内容がYamlファイルに反映されていることを確認することができます。
補足:4Kセクターサポート
4Kセクターサイズのストレージを利用する場合には、DB2_4K_DEVICE_SUPPORTレジストリー変数を設定する必要があります。
Yamlビューにて以下のようにレジストリ変数設定を追記します。(一部抜粋)
spec:
(中略)
environment:
dbType: db2oltp
database:
name: sampledb
instance:
registry:
DB2_4K_DEVICE_SUPPORT: "ON"
上記のレジストリー変数が設定されていない状態で 4K セクターサイズのストレージ上にDb2データベースを作成しようとすると、以下のようなエラーメッセージが発生し、DB作成が出来ません。
(標準出力) SQL0293N Error accessing a table space container. SQLSTATE=57048
(db2diag.log) DIA8501C A buffer pool logic error has occured.
最後に、「作成」ボタンを押下すると、Db2uClusterの新規デプロイが開始されます。
Step4-2. デプロイの状況確認
「作成」ボタンを押下したwebコンソール画面から、Db2uClusterインスタンスの作成状況を確認することができます。
コマンドラインからも同様に、Db2uCluster インスタンスの作成状況の確認が可能です。
oc get db2ucluster
NAME STATE MAINTENANCESTATE AGE
db2ucluster-sample NotReady None 10s
定義通り、メタデータ、ユーザデータ用に2つの永続ストレージが作成されていることを確認します。
2つのPVC/PVが作成されていることを確認します。
【PVC】
PVCはネーミングルールとして、「c-<Db2uClusterインスタンス名>」が先頭に付与されています。
oc get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
c-db2ucluster-sample-data Bound pvc-92dd55dc-02f9-47cd-8a59-d9235920eed9 10Gi RWO ocs-storagecluster-ceph-rbd 15s
c-db2ucluster-sample-meta Bound pvc-c711f1af-a986-412b-9847-78e670ddc2c3 10Gi RWX ocs-storagecluster-cephfs 18s
【PV】
自動作成されるため、名前は任意文字列となります。
CLAIM列にて、対応するPVCの名前がわかるため、どのPVがDb2用途のものか識別可能です。
oc get pv | grep -i db2
pvc-92dd55dc-02f9-47cd-8a59-d9235920eed9 10Gi RWO Delete Bound db2u-oltp1/c-db2ucluster-sample-data ocs-storagecluster-ceph-rbd 38s
pvc-c711f1af-a986-412b-9847-78e670ddc2c3 10Gi RWX Delete Bound db2u-oltp1/c-db2ucluster-sample-meta ocs-storagecluster-cephfs 34s
PVC/PVは、Db2uClusterインスタンス作成開始から間もなく作成されます。
環境にも依存しますが、数分経過してもPVC/PVが表示されない場合には何か問題が起きている可能性があります。
Step4-3. デプロイ完了待ち~デプロイ完了確認
Db2uClusterインスタンス作成ボタン自体の応答はすぐに戻されますが、実際にデプロイが完了するまではもう少し時間がかかります。(数十分~数時間。環境に依存します)
しばらくの間 oc get pod コマンドを実行してもそれらしい出力が一切出てこないため不安になりますが、しばらく待ちます。
以下の状態になっていればデプロイ完了し、Db2インスタンスが利用可能な状態になっています。
- 「c--instdb-*」の Pod の状態が「Completed」
- 「c--restore-morph-*」の Pod の状態が「Completed」
- 「c--db2u-0」の Pod の状態が「Running」
$ oc get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
c-db2ucluster-sample-db2u-0 1/1 Running 0 3h36m 10.129.2.151 worker3 <none> <none>
c-db2ucluster-sample-etcd-0 1/1 Running 0 3h37m 10.129.2.150 worker3 <none> <none>
c-db2ucluster-sample-instdb-4fwnx 0/1 Completed 0 3h38m 10.131.1.81 worker2 <none> <none>
c-db2ucluster-sample-ldap-7d6d659bc-26c7g 1/1 Running 0 3h38m 10.128.3.78 worker1 <none> <none>
c-db2ucluster-sample-restore-morph-lvr9w 0/1 Completed 0 3h35m 10.131.1.82 worker2 <none> <none>
db2u-operator-manager-7b5dfb5bc7-clgp4 1/1 Running 193 9d 10.129.3.51 worker3 <none> <none>
以上でデプロイ完了です。
###Step5. 動作確認
Db2 の Pod「c-db2ucluster-sample-db2u-0」 にログインし、データベースに接続できることを確認します。
Podには以下のコマンドでログインします。
$ oc rsh c-db2ucluster-sample-db2u-0 /bin/bash
【動作確認例】
ログイン時のユーザは Db2コマンド実行権限を持たない db2uadm であるため、Podへのログインが成功したら db2inst1 ユーザにスイッチユーザします。
db2 list db directory コマンドにより、この環境に作成されるデータベース名が、WebコンソールのDb2uCluterインスタンス作成画面で指定した、SAMPLEDBであると確認できます。
以下は、DBに接続しテスト用テーブルを作成し、データを挿入することで動作確認を行う例。
$ oc rsh c-db2ucluster-sample-db2u-0 bash
Defaulted container "db2u" out of: db2u, init-labels (init), init-kernel (init)
[db2uadm@c-db2ucluster-sample-db2u-0 /]$ su - db2inst1
Last login: Thu Dec 2 09:20:38 UTC 2021
[db2inst1@c-db2ucluster-sample-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-db2ucluster-sample-db2u-0 - Db2U db2inst1]$ db2 connect to sampledb
Database Connection Information
Database server = DB2/LINUXX8664 11.5.6.0
SQL authorization ID = DB2INST1
Local database alias = SAMPLEDB
[db2inst1@c-db2ucluster-sample-db2u-0 - Db2U db2inst1]$ db2 list tables
Table/View Schema Type Creation time
------------------------------- --------------- ----- --------------------------
0 record(s) selected.
[db2inst1@c-db2ucluster-sample-db2u-0 - Db2U db2inst1]$ db2 "create table t1 (c1 integer, c2 char(32))"
DB20000I The SQL command completed successfully.
[db2inst1@c-db2ucluster-sample-db2u-0 - Db2U db2inst1]$ db2 "insert into t1 values (101,'TARGET DB DATA1'), (102, 'TARGET DB DATA2')"
DB20000I The SQL command completed successfully.
[db2inst1@c-db2ucluster-sample-db2u-0 - Db2U db2inst1]$ db2 "select * from t1"
C1 C2
----------- --------------------------------
101 TARGET DB DATA1
102 TARGET DB DATA2
2 record(s) selected.
[db2inst1@c-db2ucluster-sample-db2u-0 - Db2U db2inst1]$ db2 terminate
DB20000I The TERMINATE command completed successfully.
[db2inst1@c-db2ucluster-sample-db2u-0 - Db2U db2inst1]$ exit
[db2uadm@c-db2ucluster-sample-db2u-0 /]$ exit
---> 導入したDb2は問題なく稼働していることが確認できました。
Step6. ライセンスの登録状況確認
Db2 V11.5では、ライセンスを適用しなくても Community Editionという無償版ライセンスが適用された状態となっている。旧バージョンのDb2試用版のように90日経過したらDb2が起動しなくなるということはありません。
この点はDb2 on OpenShiftも共通です。
導入したDb2のライセンス確認/更新を行うには、下記マニュアルに記載コマンドを実行します。
Db2 11.5 マニュアル [Upgrading your Db2 Community Edition license certificate key]
Step7.接続情報の確認
(1) OCPクラスタ内からの接続情報
Liberty など、OCPクラスタ内からのDB接続時に必要となる接続情報として、クラスターIPアドレスとポート番号を確認します。
#####① IPアドレス
プロジェクト名、リリース名は環境に応じて書き換えて実行します。
oc get svc -n <PROJECT> c-<RELEASE-NAME>-db2u-engn-svc -o jsonpath='{.spec.clusterIP}'
(確認例)
$ oc get svc -n db2u-oltp1 c-db2ucluster-sample-db2u-engn-svc -o jsonpath='{.spec.clusterIP}'
172.30.217.115
$
#####② ポート番号
プロジェクト名、リリース名は環境に応じて書き換えて実行します。
oc get svc -n <PROJECT> c-<RELEASE-NAME>-db2u-engn-svc -o jsonpath='{.spec.ports[?(@.name=="legacy-server")].nodePort}'
(確認例)
$ oc get svc -n db2u-oltp1 c-db2ucluster-sample-db2u-engn-svc -o jsonpath='{.spec.ports[?(@.name=="legacy-server")].nodePort}'
31545
$
(2) OCPクラスタ外からの接続情報
Db2uClusterカスタムリソースをデプロイすると、NodePortタイプのサービスが作成/公開されます。
以下のドキュメントに記載される通り、
<いずれかのワーカーノードのIP>:<NodePortのポート番号> の組み合わせを指定すれば、OpenShiftクラスタ外のクライアントからDb2に接続できるようになります。
NodePort: 各NodeのIPにて、静的なポート(NodePort)上でServiceを公開します。
ワーカー・ノードのパブリック・ポートを公開し、ワーカー・ノードのパブリック IP アドレスを使用して、クラスター内のサービスにインターネットからパブリック・アクセスを行います。
NodePort タイプの Kubernetes サービスを作成してアプリを公開する場合は、30000 から 32767 の範囲の NodePort と内部クラスター IP アドレスがサービスに割り当てられます。 NodePort サービスは、アプリに対する着信要求のための外部エントリー・ポイントとして機能します。
######① IPアドレス
Db2が稼働するワーカーノードのIPアドレス(ホスト名)を確認します。
今回の環境では、/etc/hosts ファイルで確認可能です。
(どのワーカーノードのIPアドレス宛でも、Db2接続可能)
######② ポート番号
Service定義を確認し、TYPE:NodePort のエントリを探します。
Db2のデフォルトのListenPortは50000番(※バージョンによっては25000番)であり、この50000番に対応するポートが接続先となります。
$ oc get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
c-db2ucluster-sample-db2u ClusterIP 172.30.60.2 <none> 50000/TCP,50001/TCP,25000/TCP,25001/TCP,25002/TCP,25003/TCP,25004/TCP,25005/TCP 6d4h
c-db2ucluster-sample-db2u-engn-svc NodePort 172.30.217.115 <none> 50000:31545/TCP,50001:30675/TCP 6d4h
c-db2ucluster-sample-db2u-internal ClusterIP None <none> 50000/TCP,9443/TCP,50052/TCP 6d4h
c-db2ucluster-sample-etcd ClusterIP None <none> 2379/TCP,2380/TCP 6d4h
c-db2ucluster-sample-ldap ClusterIP 172.30.89.239 <none> 50389/TCP 6d4h
(NodePortのみ抜粋)
c-db2ucluster-sample-db2u-engn-svc NodePort 172.30.217.115 <none> 50000:31545/TCP,50001:30675/TCP
→ この環境においては、Db2のデフォルトのサービスポートである50000番に対応する 31545 番が、クライアントの指定する接続先ポートに該当します。
(参考) デプロイ完了後の oc get all 出力
$ oc get all -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod/c-db2ucluster-sample-db2u-0 1/1 Running 0 6d5h 10.129.2.151 worker3 <none> <none>
pod/c-db2ucluster-sample-etcd-0 1/1 Running 0 6d5h 10.129.2.150 worker3 <none> <none>
pod/c-db2ucluster-sample-instdb-4fwnx 0/1 Completed 0 6d5h 10.131.1.81 worker2 <none> <none>
pod/c-db2ucluster-sample-ldap-7d6d659bc-26c7g 1/1 Running 0 6d5h 10.128.3.78 worker1 <none> <none>
pod/c-db2ucluster-sample-restore-morph-lvr9w 0/1 Completed 0 6d5h 10.131.1.82 worker2 <none> <none>
pod/db2u-operator-manager-7b5dfb5bc7-clgp4 1/1 Running 243 15d 10.129.3.51 worker3 <none> <none>
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
service/c-db2ucluster-sample-db2u ClusterIP 172.30.60.2 <none> 50000/TCP,50001/TCP,25000/TCP,25001/TCP,25002/TCP,25003/TCP,25004/TCP,25005/TCP 6d5h app=db2ucluster-sample,component=db2oltp,formation_id=db2ucluster-sample,role=db,type=engine
service/c-db2ucluster-sample-db2u-engn-svc NodePort 172.30.217.115 <none> 50000:31545/TCP,50001:30675/TCP 6d5h app=db2ucluster-sample,component=db2oltp,formation_id=db2ucluster-sample,role=db,type=engine
service/c-db2ucluster-sample-db2u-internal ClusterIP None <none> 50000/TCP,9443/TCP,50052/TCP 6d5h app=db2ucluster-sample,component=db2oltp,formation_id=db2ucluster-sample,role=db,type=engine
service/c-db2ucluster-sample-etcd ClusterIP None <none> 2379/TCP,2380/TCP 6d5h app=db2ucluster-sample,component=etcd,formation_id=db2ucluster-sample
service/c-db2ucluster-sample-ldap ClusterIP 172.30.89.239 <none> 50389/TCP 6d5h app=db2ucluster-sample,formation_id=db2ucluster-sample,role=ldap
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
deployment.apps/c-db2ucluster-sample-ldap 1/1 1 1 6d5h ldap cp.icr.io/cp/db2u.auxiliary.auth@sha256:34c5d313843262d4027fcf84eeed8ed8ec0886b7361796ee493bd42b9224bc4a app=db2ucluster-sample,formation_id=db2ucluster-sample,role=ldap
deployment.apps/db2u-operator-manager 1/1 1 1 15d manager docker.io/ibmcom/db2u-operator@sha256:5dc50046595172f94fd37ef8497e2b4f2fdf2c12dff4885b6397969bdade11a5 control-plane=db2u-operator-manager
NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR
replicaset.apps/c-db2ucluster-sample-ldap-7d6d659bc 1 1 1 6d5h ldap cp.icr.io/cp/db2u.auxiliary.auth@sha256:34c5d313843262d4027fcf84eeed8ed8ec0886b7361796ee493bd42b9224bc4a app=db2ucluster-sample,formation_id=db2ucluster-sample,pod-template-hash=7d6d659bc,role=ldap
replicaset.apps/db2u-operator-manager-7b5dfb5bc7 1 1 1 15d manager docker.io/ibmcom/db2u-operator@sha256:5dc50046595172f94fd37ef8497e2b4f2fdf2c12dff4885b6397969bdade11a5 control-plane=db2u-operator-manager,pod-template-hash=7b5dfb5bc7
NAME READY AGE CONTAINERS IMAGES
statefulset.apps/c-db2ucluster-sample-db2u 1/1 6d5h db2u cp.icr.io/cp/db2u@sha256:dc570377bd8e0a740bc53dc491fca3752096dfa64e00b1dedd239eb1cfa312aa
statefulset.apps/c-db2ucluster-sample-etcd 1/1 6d5h etcd cp.icr.io/cp/etcd@sha256:e8efda1725011bd75194953043c581281a164bc0ad2f23e96d266c869d9e4686
NAME COMPLETIONS DURATION AGE CONTAINERS IMAGES SELECTOR
job.batch/c-db2ucluster-sample-instdb 1/1 33s 6d5h instdb cp.icr.io/cp/db2u.instdb@sha256:c35d117b57a57971afb24dbe60f34cc0c496fba46d7f11756d80a25bf4edf3c1 controller-uid=e762b583-29cb-43db-8e41-efb95191eaf9
job.batch/c-db2ucluster-sample-restore-morph 1/1 25m 6d5h restore-morph cp.icr.io/cp/db2u.tools@sha256:a981cb52a2d87416417fd58e434c9dbeff6115f8656dc8dea4f89b25271fbaf0 controller-uid=99941ba6-bb8a-4536-a753-aa2106bea80b
以上です。