OpenShift環境へのDb2 Operator導入手順

Db2 on OpenShift の2021年1月現在の最新版である V11.5.5 の最大の特徴は、
Operatorが実装されたことです。
Db2 11.5.5 を OpenShift上で稼働させるには、Db2 Operator を利用してデプロイします。

ここでは、

 * 「Db2 Operator」とは何ができるツールなのか
 *  どうやって導入するのか

の2点に絞って整理したいと思います。

Db2 on OpenShift 導入作業の全体像(手順は)こちらにまとめています。
 ---> [「Db2 11.5.5 on OpenShift デプロイ手順」](https://qiita.com/mi-kana/items/6266fcdcdc3b71d8a0fb)
この文書でカバーするのは、Db2 on OpenShift導入作業全体のうち、矢印で示す部分です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/468682/91302315-5bef-c52b-5861-2b6a828799db.png)

## Operatorとは

Operator とは、運用管理操作を自動化する目的から Kubernetes 機能を拡張するためのフレームワークです。
Operator SDKで作成され、OpenShiftで稼働します。
Db2のような製品の一部として提供される場合には、開発部門が提供するOperatorをユーザーがOpenShift上に導入し、利用する形となります。

Operatorは、下記の2つがセットになっているものの総称です。

 * Kubernetesのカスタム・リソース<br>（Operatorが独自に定義するYamlマニフェスト、略してCR）
 * Kubernetesのカスタム・コントローラ<br>（CRを読み込んで管理対象のアプリを（インストールする等）管理する常駐プログラム）

このページの説明もわかりやすいと思いました：
[Kubernetes Operator とは](https://www.redhat.com/ja/topics/containers/what-is-a-kubernetes-operator)

## Db2 Operatorとは
IBMのリレーショナル・データベース製品である Db2 for LUW(Linux, Unix, and Windows)では、比較的古いバージョンからコンテナ版のDb2(※)が提供されていました。
　(※)docker pull/docker runで導入実行できるもの
Db2 11.5.1以降では、OpenShift Container Platform環境で動くDb2である、Db2 on OpenShiftが提供開始されました。

2020年12月にリリースされた Db2 on OpenShift 11.5.5では Kubernetes Operator に対応し、
「Db2 Operator(Db2U Operator)」が提供されるようになりました。

Db2 11.5.5 で提供される Db2 Operator V1.0.0 を実際に導入してみると、以下のカスタム・リソースが利用可能になります。

1. Db2u Cluster(シングルインスタンスDb2導入/構成)
2. Db2u Hadr(OpenShift環境でのHADR構成)
3. Db2u Helm Migration(Helm Chartの移行？)

Db2 Operator は、OpenShift上にDb2のコンテナ・イメージをデプロイし、稼働させるための自動化ツールとしての役割を果たします。Db2 Operatorの登場により、これまでのバージョンに比べてより簡単に、OpenShift環境のDb2やHADRの導入・構成が出来るようになりました。

◆OCP Webコンソール画面(Db2 Operator)↓
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/468682/049be5de-8016-0174-c881-8307fd24ee53.png)



__補足:「Db2uとは」__

 * 「Db2 Universal Container」の略
 * OpenShift上にデプロイするためのDb2
 * マイクロサービスアーキテクチャに基づいて設計されたDb2ファミリーのコンテナのエコシステムで、OpenShift向けに最適化・認証されている(出典：[Link](https://hub.docker.com/r/ibmcom/db2u.instdb))


## Db2 Operator の導入経路

Db2 Operatorは下記いずれかから導入可能ですが、<2>については会社所在地がUSでないとアカウントが作れないという制約があったため(2020/12時点)、今回は<1>を選択します。

<1> [IBM Operator Catalog](https://www.ibm.com/support/knowledgecenter/SSEPGG_11.5.0/com.ibm.db2.luw.db2u_openshift.doc/doc/t_db2u_install_op_catalog.html)
<2> [RedHat MarketPlace](https://www.ibm.com/support/knowledgecenter/SSEPGG_11.5.0/com.ibm.db2.luw.db2u_openshift.doc/doc/t_db2u_install_from_RHM.html)


## Db2 Operatorの導入前提

Db2 Operatorのインストールに着手する前に、下記の準備を整えます。

* OpenShift version 3.11以上(4.xも含む)
* cluster-admin権限を持つOCPユーザ
*  [IBM Cloud](https://cloud.ibm.com/login)のユーザアカウント
*  Db2 Operator/Db2本体をデプロイするためのプロジェクト

参考：[Db2 11.5 KnowledgeCenter[
Installing Db2 on a Red Hat OpenShift cluster]](
https://www.ibm.com/support/knowledgecenter/SSEPGG_11.5.0/com.ibm.db2.luw.db2u_openshift.doc/doc/t_db2u_install_db2.html)

また、Db2 Operator自体は少ないリソースで導入可能ですが、その後Db2本体も稼働させることになるため、トータルで必要なリソースを見積もっておきます。

####Db2 Operator のリソース要件

| Software | CPU(cores) | Memory(GB) |
|:-:|:-:|:-:|
| Db2 Operator  | 500m  | 512Mi  |

####補足：最小構成での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  |  |  |

##Db2 Operator導入手順

以下の流れでDb2 Operator を導入します。

1. IBM Operator Catalog 導入
2. セキュリティ設定
3. Db2 Operator 導入

__補足：__

本当は、2.(セキュリティ設定) が終わってから1.(IBM Operator Catalog)を実行するように、と Db2 Operator readme には記載されています。しかし、1.を行った後でなければこのreadmeを読むことができないために、実質不可抗力的に上記の作業手順となりました。
上記手順で、その後のDb2やHADR構成も出来ていますので、結果としては問題なかったようです。

## Step1. IBM Operator Catalog導入

IBM Operator Catalogは、openshift-marketplace プロジェクトに導入します。
事前にIBM Operator Catalog が導入済みであるか確認します。
(→導入済みであれば、Step1はスキップ可能)

```sh

$ 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

```

[製品マニュアル](https://www.ibm.com/support/knowledgecenter/en/SSEPGG_11.5.0/com.ibm.db2.luw.db2u_openshift.doc/doc/t_db2u_install_op_catalog.html)に記載されるyaml定義の内容を、「ibm-operator-catalog.yaml」という名称のファイルに保管し、IBM Operator Catalog の CatalogSourceリソースを作成します。

```yaml:ibm-operator-catalog.yaml
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: docker.io/ibmcom/ibm-operator-catalog
  updateStrategy:
    registryPoll:
      interval: 45m
```

CatalogSourceリソース作成：

```sh

$ oc create -f /work/db2-11.5.5/ibm-operator-catalog.yaml
catalogsource.operators.coreos.com/ibm-operator-catalog created
```


CatalogSource およびパッケージマニフェストが正常に作成されていることを確認します。

```sh

$ 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] を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/468682/23934099-4147-3a68-2f88-f284d75a9e4d.png)


ナビゲーションパネル [Provider Type] の下に [IBM Operator Catalog]のオプションが表示され、そこからDb2 Operatorをインストールすることができます。
(多くのOperatorが表示されるため、ナビゲーションパネルで更に「Database」に限定して表示するかフィルターで「Db2」を指定するほうが見つけやすい)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/468682/30d0d088-8801-1244-1edd-2b82e95718de.png)

上のOperator一覧の画面で「IBM Db2」を選択すると、Readmeが表示されるため、ここで手順・前提を確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/468682/c64c349d-353a-9e37-d150-292872267a76.png)




## Step2. セキュリティ設定
後のDb2U Cluster(Db2インスタンス本体)の導入時に必要となる Entitlement key を取得します。

#### ①Entitlement key の取得
MyIBM のサイトにアクセスし、ライセンスが付与されているソフトウェアに関連付けられた IBMid とパスワードを入力しログインします。
https://myibm.ibm.com/products-services/containerlibrary

「ライブラリーの表示 (View library)」ページに表示されるライセンスを確認します。
この例では「IBM SOFTWARE ACCESS 1 YEAR : all」と表示されています。(※この画面の表示は一例です)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/468682/67d96ade-38a4-1b98-53a1-16d4b3018914.png)




続いて「ライセンス・キーの取得 (Get entitlement key)」に移動してキーを取得します。
[Copy key]ボタンを押下し、Entitlement key をコピーします。(→後ほど利用するため、テキストファイル等に一時保管しておく)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/468682/d9a0da54-fe8f-1344-55bb-e38370d4ba4b.png)


#### ②Image Pull Secret の作成
①で取得したENTITLEDKEY、 EMAILアドレス、プロジェクト(ネームスペース)名を環境に応じて設定し、oc create secret コマンドを実行します。

◆環境変数の設定

```sh

$ ENTITLEDKEY="①で取得したEntitlement key"
$ EMAIL="ｘｘｘ@sample.com"
$ NAMESPACE="db2u-oltp1"
```

◆Secret オブジェクトの作成

```sh

$ 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

```


#### ③OpenShift Global Pull Secret の Modify

続いて下記コマンドを実行すると、「dockerconfig_merged」という名称のファイルが出力されます。

 * カレントディレクトリへの書き込み権限があることを事前に確認しておきます。
 * 1つ前の②(Image Pull Secret作成)の手順で定義しておいた環境変数が使われるため、同じプロンプトで引き続き作業を行います。

dockerconfig_merged ファイルの生成：

```sh

$ echo $(oc get secret pull-secret -n openshift-config --output="jsonpath={.data.\.dockerconfigjson}" | base64 --decode; \
oc get secret ibm-registry -n ${NAMESPACE} --output="jsonpath={.data.\.dockerconfigjson}" | base64 --decode) | \
jq -s '.[0] * .[1]' > dockerconfig_merged

```

上記コマンドによって、dockerconfig_mergedファイルが生成されます。(以下、ファイルへの出力内容)

```sh

$ cat dockerconfig_merged
{
  "auths": {
　　－－－中略－－－
    "cp.icr.io": {
      "username": "cp",
      "password": "＜＜Entitlement key値＞＞",
      "email": "ｘｘｘ@sample.com",
      "auth": "(略)"
    }
  }
}

```

続いて、oc set data コマンドを実行します。	

```sh
	
$ oc set data secret/pull-secret -n openshift-config --from-file=.dockerconfigjson=dockerconfig_merged	
secret/pull-secret data updated	
```

## Step3. Db2 Operator の導入

OCP Webコンソールにログインし、[Operators] -> [OperatorHub] の画面を開き、[IBM Db2]をクリックします。
(アイコンが多く探しづらい場合、「Db2」とキーワードを入力すると画面の表示対象が絞り込まれます)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/468682/40caa566-2575-dbc1-4bae-95fa5a317c2b.png)

[Install」ボタンを押下し、Db2 Operatorインストール画面を開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/468682/fbd32d34-3cb6-3f3c-34b7-6ec69dee988c.png)

Step2.で作成したプロジェクト(ネームスペース)名を選択し、[Install]を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/468682/833330db-14dd-de41-f36b-10ab74e263d1.png)

数分程度で、Db2 Operatorが導入されます。
[Installed Operators]の一覧に表示されるようになり、Statusが「Installing」→「Succeeded」へ遷移されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/468682/4fff780f-b085-b6f2-7380-fbfbcaabd9c7.png)

oc get pods コマンドで確認してみると、Db2 Operator Manager のPodは無事、Running状態となっています。

```sh

$ oc get pods
NAME                                    READY   STATUS    RESTARTS   AGE
db2u-operator-manager-9b8b9d877-b8r5m   1/1     Running   0          22m
```


<br>
__<<導入の結果>>__

 * ここまでの作業により、Db2 Operatorが導入されました
 * Db2 Operatorによって、Db2uCluster(シングルインスタンスDb2)などのリソースの型情報（Cluster Resource Definition）が提供され、Kubernetes/OpenShift環境で利用可能となっています
 * 続いて、Db2uCluster型のオブジェクトのデプロイ(≒OCP環境へのDb2導入・構成)を行います (→[Link](https://qiita.com/mi-kana/items/6266fcdcdc3b71d8a0fb))


__<<補足>>__

Db2 Operator導入後、oc get all で作成済オブジェクトを確認した結果：

```sh

$ oc get all
NAME                                        READY   STATUS    RESTARTS   AGE
pod/db2u-operator-manager-9b8b9d877-b8r5m   1/1     Running   0          161m

NAME                                    READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/db2u-operator-manager   1/1     1            1           161m

NAME                                              DESIRED   CURRENT   READY   AGE
replicaset.apps/db2u-operator-manager-9b8b9d877   1         1         1       161m


```

##関連記事

◆Db2 11.5.5 on OpenShift デプロイ手順
https://qiita.com/mi-kana/items/6266fcdcdc3b71d8a0fb
◆Db2 11.5.5 on OpenShift：GUIベースのデプロイ手順
https://qiita.com/mi-kana/items/f429c7e4e86f6077df84
◆Db2 HADR on OpenShift かんたんデプロイ
https://qiita.com/mi-kana/items/7fb2fecc02067bc8386b

--------
以上です。