Db2 11.5.4 on Openshift デプロイのための前提作業 (1) Helm V2セットアップ

## Db2 on OpenShift インストールの前提

Db2 11.5.4 をRed Hat OpenShift上で稼働させるための前提要件は、こちらのサイトに整理されています。

Db2 Community Edition 11.5.4.0
https://github.com/IBM/charts/tree/master/stable/ibm-db2

### Db2 11.5.4 on OpenShift 前提要件

 - Kubernetes Level - ">=1.11.0"
 - Helm Level:
    - Power: ">=2.12(*) and < 3.0"
    - X86: ">=2.14(*) and < 3.0"
      - (*) Tested Integrations
 - OpenShift Version - "3.11, 4.3"
 - PersistentVolume requirements - requires one of the following:
    - NFS
    - IBM Cloud File Storage (gold storage class)
    - Portworx
    - Red Hat OpenShift Container Storage 4.3 and above
    - or a hostPath PV that is a mounted clustered filesystem
 - An [IBM Cloud](https://cloud.ibm.com/login) account

[](Kubernetes / OpenShift / PersistentVolume用ストレージ については基盤担当に用意してもらえることが多いですが、)

[](上記のうち、Helm V2 については別用途で既に使われていればそのまま利用できますが、もし使われていない場合、Helm　V2 のセットアップについてはDb2担当のカバー範囲になるケースもあるかと思います。)
Helmのバージョン前提が Helm V2 であるため、Tiller のセットアップが必要となる点も忘れられがちな考慮点かと思います。(Tiller は Helm v3 で廃止されたため、記憶の彼方に、ということもあるんじゃないかと..)
Db2 11.5.4 デプロイに先立ち、Helm V2 セットアップを行った際の手順をメモに残します。

#### その他、推奨される設定項目

他にも、Db2 on OpenShift 導入前提手順としては下記の項目があります。

- ~~container_manage_cgroup 有効化~~
- CRI-O PID拡張 (オプション)

　(※container_manage_cgroup 有効化は Db2 11.5.4 on OpenShiftインストーラ内で実施されるようになり不要となった)

## 利用するHelmのバージョン

Db2 11.5.4 on OpenShift の導入前提は、Helm V2.14以上V3未満となります。2020/07時点の最新版である Helm v2.16.9 を利用します。最新バージョンは下記ページから確認することができます。
https://github.com/helm/helm/releases


## Helm V2 セットアップの参考になる資料

このページには、Db2 on OpenShift のデプロイに必要な手順(※)が簡潔にまとまっています。

How to Build a Db2 for OpenShift Environment for your Desktop
https://www.ibm.com/cloud/blog/how-to-build-a-db2-for-openshift-environment-for-your-desktop

CentOS 7.7導入 -> OpenShift 3.11導入 -> Helm 導入 -> プロジェクトのセットアップ -> 権限設定 -> Db2U導入
という流れで記述されるうちの、Helm導入の手順を実行します。

(※)Helm V2 導入後、Db2U 11.5.4導入手順としては [GitHub Readme](https://github.com/IBM/charts/tree/master/stable/ibm-db2) が最新と判断し、GitHubでガイドされる手順に従って導入しました
　---> [Db2 11.5.4 on OpenShift をデプロイしてみた](https://qiita.com/mi-kana/items/fed0d47fca56853fdd4e)

## セットアップ作業の流れ
1. プロジェクト作成
2. Helmインストール
3. OS環境変数の設定
4. helm-init実行
5. Tillerデプロイ
6. デプロイ状況確認
7. リポジトリ登録


#### Step1. プロジェクト作成

```
oc new-project tiller-world
```

### Step2. Helmインストール

```
curl -s https://storage.googleapis.com/kubernetes-helm/helm-v2.16.9-linux-amd64.tar.gz | tar xz
```

### Step3. OS環境変数の設定
2つの環境変数を設定しておく。

####①Helm用プロジェクト名
ここから先の手順で、Step1.で作成したプロジェクト名称を利用するため、環境変数として設定しておく。

```
export TILLER_NAMESPACE=tiller-world
```

####②helmコマンドパス
ここから先の手順で helm コマンドを実行するため、PATH環境変数に、helmコマンドのパスを設定する。

```
export PATH=$PATH:/work/HelmV2.16.9/linux-amd64
```

補足：
Db2Uのインストーラ(db2u-install コマンド) 内では helmコマンドが実行されるため、Db2Uインストール前にも同様にPATH変数の設定を行うか、許容される環境であればインストーラ実行ノードの .bashrc などに設定を入れておく。



### Step4. helm-init実行

```
helm init --client-only
```

(実行時の標準出力例)

```
# helm init --client-only
Creating /root/.helm
Creating /root/.helm/repository
Creating /root/.helm/repository/cache
Creating /root/.helm/repository/local
Creating /root/.helm/plugins
Creating /root/.helm/starters
Creating /root/.helm/cache/archive
Creating /root/.helm/repository/repositories.yaml
Adding stable repo with URL: https://kubernetes-charts.storage.googleapis.com
Adding local repo with URL: http://127.0.0.1:8879/charts
$HELM_HOME has been configured at /root/.helm.
Not installing Tiller due to 'client-only' flag having been set
Happy Helming!
```

### Step5. Tillerデプロイ
下記コマンドにより、Tillerのデプロイが行われる。
サービスアカウント、ロール、ロールバインディング、Deployment、いずれの名称も tiller となっている。

```
# oc process -f https://github.com/openshift/origin/raw/master/examples/helm/tiller-template.yaml -p TILLER_NAMESPACE="${TILLER_NAMESPACE}" -p HELM_VERSION=v2.16.9 | oc create -f -
serviceaccount/tiller created
role.authorization.openshift.io/tiller created
rolebinding.authorization.openshift.io/tiller created
deployment.apps/tiller created
```


### Step6. デプロイ状況確認
以下のメッセージが出れば、正常にデプロイできている

```
# oc rollout status deployment tiller
deployment "tiller" successfully rolled out
```

Tiller Podの稼働確認 → 正常に稼働(Running)している状態

```
# oc get pods -n tiller-world
NAME                      READY   STATUS    RESTARTS   AGE
tiller-75f55d8d9d-z225b   1/1     Running   0          4m4s
```

バージョンも確認する
Client / Server 両方のバージョンが出力されることを確認

```
# helm version
Client: &version.Version{SemVer:"v2.16.9", GitCommit:"8ad7037828e5a0fca1009dabe290130da6368e39", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.16.9", GitCommit:"8ad7037828e5a0fca1009dabe290130da6368e39", GitTreeState:"clean"}
```


### Step7. リポジトリ登録

この時点では、IBMのリポジトリが登録されていないため、下記GitHubに記載されるコマンドを登録する。
https://github.com/IBM/charts

現状確認：

```
# helm repo list
NAME    URL
local   http://127.0.0.1:8879/charts
```

リポジトリ追加：

```
# helm repo add stable https://raw.githubusercontent.com/IBM/charts/master/repo/stable
stable has been added to your repositories
```

ibm-repo が追加されたことを確認：

```
# helm repo list
NAME            URL
stable          https://raw.githubusercontent.com/IBM/charts/master/repo/stable
local           http://127.0.0.1:8879/charts
```

Chartを確認：

```
# helm search stable/ibm-db2
NAME                    CHART VERSION   APP VERSION     DESCRIPTION
stable/ibm-db2          3.0.1           11.5.4.0        Db2 Community Edition 11.5.4.0
stable/ibm-db2warehouse 3.0.1           11.5.4.0        Db2 Warehouse 11.5.4.0
```
　→ Db2 11.5.4 が利用可能であることが確認できる。

## Tips：
Db2Uをデプロイする際には、Db2Uをデプロイするプロジェクトにおける管理者権限をサービスアカウント tiller に付与する必要がある。

現在のプロジェクトにおいて、admin ロールを tiller ユーザに追加するには以下コマンドを実行する：

```
 oc policy add-role-to-user admin "system:serviceaccount:${TILLER_NAMESPACE}:tiller"
```

以上でHelm V2 セットアップは完了です。