Rancher機能でモニタリングのIaCの実現

この記事は、カスタムリソースyamlで宣言しているモニタリング定義を、GitOpsワークフローで継続デリバリーさせる方法を紹介します。

今回で使用する機能は下記の2つです。
- Rancher Monitoring(Prometheus Operator) v2機能
- Rancher Continuous Delivery機能

いずれもRancher v2.5にGAリリースした機能です。まず、最初は簡単に機能紹介します。
## Rancher Monitoring(Prometheus Operator) v2機能
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256080/492dce2f-d8c6-4938-ab11-af07738cb5d8.png)

### 特徴
・Prometheus Operatorをベースとしたモニタリングのソリューション
・カスタムメトリックの収集、アラームルールなどは、CRs(カスタムリソース)により簡単に定義できる
・全てのモニタリング定義が、CRsのyamlで定義出来る為、GitOpsベースのワークフローを簡単に構築できる

詳細な機能紹介は、[こちらの記事](https://rancher.co.jp/blog/2020/maximize-monitoring-in-rancher-2-5-with-prometheus)をご参照ください。
または、[こちらのドキュメント](https://rancher.com/docs/rancher/v2.x/en/monitoring-alerting/v2.5/)をご参照ください。

## Rancher Continuous Delivery機能
![fleet.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256080/d1b083e7-1ca7-fc20-4cde-eda80ed8fb91.png)

### 特徴
・[Rancher Fleet](https://fleet.rancher.io/)をベースとしたGitOpsのソリューション
・Gitリポジトリから複数のクラスタにアプリケーションと構成設定をデプロイ可能
・シングルクラスターだけではなく、マルチクラスターにも対応
・アプリケーションや構成設定は、Kubernetes YAML,Helm,Kustomizeというフォーマットを対応

詳細な機能紹介は、[こちらのドキュメント](https://rancher.com/docs/rancher/v2.x/en/deploy-across-clusters/fleet/)をご参照ください。

## モニタリングのIaCの構築
### Rancher Monitoring v2のインストール
Rancher 2.5 から Rancher Monitoring v2 をインストールするのは簡単です。 
・新しいダッシュボード画面の左上のメニューから、[Cluster Explorer] -> [Apps & Marketplace]にアクセスし、[Monitoring]をインストールするだけです。

・インストールが完了すると、ダッシュボード画面の左上のメニューから、[Cluster Explorer] -> [Monitoring]にアクセスし、モニタリングのダッシュボードを表示します。※ここからモニタリングの各コンポーネントUI画面にアクセスできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256080/42446a5f-7a60-0be0-fcce-5c66f402f50c.png)

### GitOpsワークフローの設定
Rancher Continuous Delivery機能は、インストールが不要です。クラスター構築時に、Rancherが自動にインストールしてくれます。
・検証用アプリケーションのnamespaceを作成：example
・ダッシュボード画面の左上のメニューから、[Cluster Explorer] -> [Continuous Delivery]にアクセスし、開く[Git Repos]の画面に、モニタリング設定yamlを格納するGitリポジトリを設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256080/17c49bbb-f3d1-8d2f-4f61-35f4db040b66.png)
- [Repository URL]:モニタリング設定yamlを格納するGitリポジトリURL
- [Paths]:yamlフォルダーの相対パス
- [Deploy To]:デプロイ先のクラスター

※Gitリポジトリのディレクトリー構成は下記となります。

```bash
gitops/monitoring
├── alert-s2-prom-rule.yaml #Prometheus Rules定義CRs
├── alert-s3-prom-rule.yaml #Prometheus Rules定義CRs
└── prom-app-example
    ├── example-app-deployment.yaml #example-app(検証用アプリケーション)のデプロイメント
    ├── example-app-service.yaml #example-appのサービス
    ├── example-app-service-monitor.yaml #example-appのservice-monitor定義CRs
    └── example-app-pod-monitor.yaml #example-appのpod-monitor定義CRs
```

上記のyaml設定ファイルのデプロイで、下記のアプリや、モニタリング設定がでデプロイされる想定です。
- アプリケーション：
　デプロイメント：example-app
　サービス：example-app
- モニタリング：
　PodMonitor：example-app-pod-monitor
　ServiceMonitor：example-app-service-monitor
　PrometheusRule：alert-1、alert-２、prometheus-example-rules

詳細なコードは、[こちらのGithubリポジトリ](https://github.com/qiang1981cn/rancher-v25-demo/tree/main/gitops/monitoring)からご参照ください。

・Git Repos設定後に、自動にデプロイ作業が行われますので、しばらくすると、下記のような、リソースデプロイ完了ステータスの画面になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256080/a4b620be-2b0c-82da-15de-d60926f141e5.png)

・モニタリングのダッシュボードから、[Prometheus Targets]画面開き、example-appは監視対象に設定されていることが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256080/d1a88f56-b7b4-906f-e9b8-434426aed21c.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256080/599d5875-6ce9-e5e3-765e-fdf98bb9d31b.png)
・モニタリングのダッシュボードから、[Prometheus Graph]画面開き、example-appのメトリックが収集されていることが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256080/bf7b9075-6334-c686-f73e-9da8f34bd043.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256080/24d9cd20-0386-0e90-d832-2cd1e18e3d0d.png)
・モニタリングのダッシュボードから、[Prometheus Rules]画面開き、アラートルールは設定されていることが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256080/4fc0b579-25bc-185e-c4d0-032fea3e3eab.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256080/b050240b-fdf5-f298-83b8-df2b79335e83.png)

## まとめ
Rancher 2.5の新しい機能の利用により、アプリケーションの継続デリバリーだけではなく、インフラの継続デリバリーも簡単に実現できます。