Db2 11.5.4 on OpenShift をアンインストールする

とりあえず入れてみたけれどやっぱり違う名前で入れなおしたい、ストレージオプションを間違えていてPodが起動しない、などなど、一度導入したミドルウェアをアンインストールしたくなる事だってたまにはあります。
そんな時のための備忘録として、Db2 11.5.4 on Openshift をアンインストールした時の作業記録を残します。

 * Db2 Community Edition 11.5.4.0 インストール時の手順・ログはこちらにまとめています
   → [Db2 11.5.4 on OpenShift をデプロイしてみた](https://qiita.com/mi-kana/items/fed0d47fca56853fdd4e) 

 * Db2 11.5.4 on OpenShift は、Helm V2 を前提としていることから、このアンインストール手順も Helm V2 を前提に作成しています

## 参考資料
ここから先、記述する手順は、2020年7月時点のGitHubの手順をベースとしています。

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


## Db2 on OpenShift アンインストールの流れ

1. インストール済みのリリースを削除
2. セキュリティ関連の構成オブジェクトの削除
3. PVC/PVの削除

##Step1. インストール済みのリリースを削除

リリース名を確認する ( → db2u-oltp-0 )

```
$ helm list 
"NAME      	      REVISION	          UPDATED                            STATUS           CHART              APP VERSION       NAMESPACE"
db2u-oltp-0      1                 Sun Jul 12 21:33:20 2020           DEPLOYED        ibm-db2-3.0.1        11.5.4.0         db2u-oltp0

```

helm delete コマンドでリリースを削除する

```
$ helm delete --purge db2u-oltp-0
release "db2u-oltp-0" deleted
```

削除できたことを確認する
(--namespaceオプションは指定しなくてもOK / この例ではdb2u-oltp0ネームスペース内のリリースを一覧表示)

```
$ helm list --namespace db2u-oltp0
(空白)
```
正常に削除できていれば、Pod/Jobなどもすべて削除される

```
$ oc get all | grep -i db2
No resources found in db2u-oltp0 namespace.
```


##Step2. セキュリティ関連の構成オブジェクトの削除
db2u-install 前に作成した ServiceAccount, Role, Secret 等を削除する。
インストーラ同梱のスクリプトを用いてServiceAccount, Role , Rolebinding , SCCとRoleの紐づけを削除する。

```
$ cd <Db2u-installer_Extracted_Dir>/ibm_cloud_pak/pak_extensions/post-delete/namespaceAdministration/deleteSecurityNamespacePrereqs.sh

$ ./deleteSecurityNamespacePrereqs.sh
Removing all namespace users from SCC...
serviceaccount "db2u" deleted
role.rbac.authorization.k8s.io "ibm-db2-role" deleted
rolebinding.rbac.authorization.k8s.io "ibm-db2-rolebinding" deleted
securitycontextconstraints.security.openshift.io/db2oltp-scc removed from: ["system:serviceaccount:db2u-oltp0:db2u"]

```

Secret削除

```
$ oc delete -n <PROJECT> secret/<RELEASE-NAME>-db2u-ldap-bluadmin secret/<RELEASE-NAME>-db2u-instance
```

##Step3. PVC/PVの削除

OCP版Db2公式のGitHubでは、下記コマンドによる削除方法が紹介される。

```
#kubectl delete pvc -l release=my-release
```

もしくは、下記のように個別に手動で削除する

####① PVC削除
ここでは、「pvc00-nfsdb2」という名前のPVCを削除する

```
$ oc delete pvc pvc00-nfsdb2
persistentvolumeclaim "pvc00-nfsdb2" deleted
```

PVCが削除されたことを確認

```
oc get pvc
NAME           STATUS   VOLUME        CAPACITY   ACCESS MODES   STORAGECLASS   AGE
(該当のPVCが存在しない)
```

####② PV削除
RelaimPolicy = Retain で作成されたPVは、PVCを削除してもPVは残り続けるため、不要であればディスクを占有させないよう明示的に削除する。

「pv00-nfsdb2」という名前のPVを削除する

```
oc delete pv pv00-nfsdb2
persistentvolume "pv00-nfsdb2" deleted
```

PVが削除されたことを確認

```
oc get pv
NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS     CLAIM                       STORAGECLASS      REASON   AGE
(該当のPVが存在しない)
```

####③ NFSディレクトリのクリーンアップ

正常アンインストールができた場合も、NFSディレクトリーにDb2関連のディレクトリ・ファイルが残ることがある(etcd用のディレクトリ等)
また同じNFSディレクトリを再利用する場合には、手動で削除する。

(以下は、削除の一例)

```
# ls -la
total 0
drwxr-xr-x. 3 root root 18 Jun 10 01:56 .
drwxr-xr-x. 6 root root 57 Jul  4 02:12 ..
drwxr-xr-x. 5 root root 87 Jun 10 01:56 etcd

# rm -rf ./etcd

# ls -la
total 0
drwxr-xr-x. 2 root root  6 Jul 14 02:55 .
drwxr-xr-x. 6 root root 57 Jul  4 02:12 ..
```