[OpenShift]Prometheus用のPVの設定方法

#はじめに
Cluster Monitoring Operatorを設定して、OpenShiftのPrometheusのモニターデータの保存先をPV（Persistent Volume）に変更する手順を確認します。

https://access.redhat.com/documentation/en-us/openshift_container_platform/4.5/html-single/scalability_and_performance/index#prometheus-database-storage-requirements_cluster-monitoring-operator

OCPのバージョンは4.5.4です。

```
$ oc version 
Client Version: 4.5.4
Server Version: 4.5.4
Kubernetes Version: v1.18.3+012b3ec
```

#Configmapの確認
Cluster Monitoring Operator を設定するには、openshift-monitoring Namespaceに cluster-monitoring-config というConfigmapを作成します。このConfigmapはデフォルトでは存在しません。

```
$ oc get configmap cluster-monitoring-config -n openshift-monitoring
Error from server (NotFound): configmaps "cluster-monitoring-config" not found
```

#Prometheus Podの確認
Prometheus Podを確認して、/prometheus のファイルシステムを確認します。

```
$ oc get pod -n openshift-monitoring |grep prometheus
prometheus-adapter-6f55bb555b-lqr7d           1/1     Running   0          5d17h
prometheus-adapter-6f55bb555b-zt2l5           1/1     Running   0          5d17h
prometheus-k8s-0                              7/7     Running   0          16h
prometheus-k8s-1                              7/7     Running   0          16h
prometheus-operator-9f7877d6f-pr6zb           2/2     Running   1          5d17h
$ oc exec -it -n openshift-monitoring -c prometheus prometheus-k8s-0 -- /bin/bash
bash-4.2$
bash-4.2$ mount |grep prometheus
/dev/mapper/coreos-luks-root-nocrypt on /prometheus type xfs (rw,relatime,seclabel,attr2,inode64,prjquota)
・・・
bash-4.2$ exit
```
デフォルトではemptyDirでノード上のファイルシステムを使っています。

# Configmapの作成
今回はPVとしてNFSを使用します。StorageClassは設定済みです。
なお、PrometheusではNFSではなくブロックストレージが推奨されています。今回はNFSしか用意ができなかったので。

```
$ oc get storageclasses.storage.k8s.io 
NAME                    PROVISIONER               RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
nfs-storage (default)   nfs-storage-provisioner   Delete          Immediate           false                  183d
```

Configmapの設定ファイルとして、以下を用意しました。

```pv.yaml
prometheusK8s:
  retention: 15d
  volumeClaimTemplate:
    spec:
      storageClassName: nfs-storage
      resources:
        requests:
          storage: 40Gi
```

このファイルを使用して、Configmapを作成します。

```
$ oc create configmap cluster-monitoring-config --from-file config.yaml=pv.yaml -n openshift-monitoring
configmap/cluster-monitoring-config created
```

#確認
しばらく待ってPVCが設定されていることを確認します。

```
$ oc get pvc -n openshift-monitoring 
NAME                                 STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
prometheus-k8s-db-prometheus-k8s-0   Bound    pvc-de9e9b7b-47c9-4055-889f-14d15d9f6e1c   40Gi       RWO            nfs-storage    9s
prometheus-k8s-db-prometheus-k8s-1   Bound    pvc-af01886e-b110-4d11-a8c5-e1f4db7057bb   40Gi       RWO            nfs-storage    9s
```

コンテナにログインし、/prometheus にマウントしているファイルシステムを確認します。

```
$ oc exec -it -n openshift-monitoring -c prometheus prometheus-k8s-0 -- /bin/bash
bash-4.2$ mount |grep prometheus
192.168.5.254:/exports/openshift-monitoring-prometheus-k8s-db-prometheus-k8s-0-pvc-de9e9b7b-47c9-4055-889f-14d15d9f6e1c/prometheus-db on /prometheus type nfs (rw,relatime,vers=3,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=192.168.5.254,mountvers=3,mountport=20048,mountproto=tcp,local_lock=all,addr=192.168.5.254)
```

NFSがマウントされていることが確認できます。