オフラインのKubenetesにPrometheus/GrafanaをHelmチャートでインストールしたいので必要なファイルを集める

オフラインのKubernetesにPrometheus/Grafanaを導入するために、オンライン環境で必要なファイルを集めたメモ。

## Minikubeの起動

Minikubeを起動する。

```shell-session
$ minikube start
😄  minikube v1.3.1 on Darwin 10.14.6
🔥  Creating virtualbox VM (CPUs=4, Memory=4096MB, Disk=20000MB) ...
🐳  Preparing Kubernetes v1.15.2 on Docker 18.09.8 ...
🚜  Pulling images ...
🚀  Launching Kubernetes ...
⌛  Waiting for: apiserver proxy etcd scheduler controller dns
🏄  Done! kubectl is now configured to use "minikube"
$
````

Tillerをデプロイする。

```shell-session
$ helm init
$HELM_HOME has been configured at /Users/sotoiwa/.helm.

Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.

Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.
To prevent this, run `helm init` with the --tiller-tls-verify flag.
For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation
$
```

## チャートの取得

リポジトリーを確認する。

```shell-session
$ helm repo list
NAME      	URL
stable    	https://kubernetes-charts.storage.googleapis.com
local     	http://127.0.0.1:8879/charts
loki      	https://grafana.github.io/loki/charts
iks-charts	https://icr.io/helm/iks-charts
ibm-charts	https://icr.io/helm/ibm-charts
$
```

リポジトリーを更新。

```shell-session
$ helm repo update
Hang tight while we grab the latest from your chart repositories...
...Skip local chart repository
...Successfully got an update from the "loki" chart repository
...Successfully got an update from the "iks-charts" chart repository
...Successfully got an update from the "ibm-charts" chart repository
...Successfully got an update from the "stable" chart repository
Update Complete.
$
```

Prometheusのチャートを確認する。

```shell-session
$ helm search prometheus
NAME                                         	CHART VERSION	APP VERSION	DESCRIPTION
ibm-charts/ibm-netcool-piagent-prometheus-dev	0.2.0        	           	Prometheus metrics agent for Predictive Insights
stable/prometheus                            	8.15.1       	2.11.1     	Prometheus is a monitoring system and time series database.
stable/prometheus-adapter                    	1.2.0        	v0.5.0     	A Helm chart for k8s prometheus adapter
stable/prometheus-blackbox-exporter          	1.0.1        	0.14.0     	Prometheus Blackbox Exporter
stable/prometheus-cloudwatch-exporter        	0.4.9        	0.5.0      	A Helm chart for prometheus cloudwatch-exporter
stable/prometheus-consul-exporter            	0.1.4        	0.4.0      	A Helm chart for the Prometheus Consul Exporter
stable/prometheus-couchdb-exporter           	0.1.1        	1.0        	A Helm chart to export the metrics from couchdb in Promet...
stable/prometheus-mongodb-exporter           	2.2.0        	v0.7.0     	A Prometheus exporter for MongoDB metrics
stable/prometheus-mysql-exporter             	0.5.1        	v0.11.0    	A Helm chart for prometheus mysql exporter with cloudsqlp...
stable/prometheus-nats-exporter              	2.2.1        	0.5.0      	A Helm chart for prometheus-nats-exporter
stable/prometheus-node-exporter              	1.6.0        	0.18.0     	A Helm chart for prometheus node-exporter
stable/prometheus-operator                   	6.6.1        	0.31.1     	Provides easy monitoring definitions for Kubernetes servi...
stable/prometheus-postgres-exporter          	0.7.2        	0.5.1      	A Helm chart for prometheus postgres-exporter
stable/prometheus-pushgateway                	1.0.1        	0.9.1      	A Helm chart for prometheus pushgateway
stable/prometheus-rabbitmq-exporter          	0.5.2        	v0.29.0    	Rabbitmq metrics exporter for prometheus
stable/prometheus-redis-exporter             	3.0.1        	1.0.4      	Prometheus exporter for Redis metrics
stable/prometheus-snmp-exporter              	0.0.4        	0.14.0     	Prometheus SNMP Exporter
stable/prometheus-to-sd                      	0.2.0        	0.5.2      	Scrape metrics stored in prometheus format and push them ...
loki/loki                                    	0.13.0       	0.0.1      	Loki: like Prometheus, but for logs.
loki/loki-stack                              	0.15.0       	0.0.1      	Loki: like Prometheus, but for logs.
stable/elasticsearch-exporter                	1.7.0        	1.0.2      	Elasticsearch stats exporter for Prometheus
stable/helm-exporter                         	0.3.1        	0.4.0      	Exports helm release stats to prometheus
stable/karma                                 	1.1.18       	v0.42      	A Helm chart for Karma - an UI for Prometheus Alertmanager
stable/stackdriver-exporter                  	1.1.1        	0.6.0      	Stackdriver exporter for Prometheus
stable/weave-cloud                           	0.3.3        	1.3.0      	Weave Cloud is a add-on to Kubernetes which provides Cont...
stable/kube-state-metrics                    	2.3.0        	1.7.2      	Install kube-state-metrics to generate and expose cluster...
stable/kuberhealthy                          	1.2.6        	v1.0.2     	The official Helm chart for Kuberhealthy.
stable/mariadb                               	6.7.4        	10.3.17    	Fast, reliable, scalable, and easy to use open-source rel...
$
```

Grafanaのチャートを確認する。

```shell-session
$ helm search grafana
NAME          	CHART VERSION	APP VERSION	DESCRIPTION
stable/grafana	3.8.3        	6.2.5      	The leading tool for querying and visualizing time series...
$
```

最新のPrometheusとGrafanaのチャートをファイルに保存する。

```shell-session
$ helm fetch stable/prometheus
$ helm fetch stable/grafana
$ ls -l *.tgz
-rw-r--r--  1 sotoiwa  staff  16195  8 16 10:23 grafana-3.8.3.tgz
-rw-r--r--  1 sotoiwa  staff  22489  8 16 10:22 prometheus-8.15.1.tgz
$
```

## イメージの取得

デフォルトのvaluesを取得する。

```shell-session
$ helm inspect values stable/prometheus > prometheus-default-values.yaml
$ helm inspect values stable/grafana > grafana-default-values.yaml
$
```

普通はこのデフォルト値とチャートのREADMEを参考に、valuesファイル適宜カスタマイズする。今回はデフォルトのまま試用する。

- https://github.com/helm/charts/blob/master/stable/prometheus/README.md
- https://github.com/helm/charts/blob/master/stable/grafana/README.md

`helm template`コマンドでマニフェストを生成し、必要なイメージを確認する。

```
$ helm template prometheus-8.15.1.tgz -f prometheus-default-values.yaml | grep "image:"
          image: "prom/node-exporter:v0.18.0"
          image: "prom/alertmanager:v0.18.0"
          image: "jimmidyson/configmap-reload:v0.2.2"
          image: "quay.io/coreos/kube-state-metrics:v1.6.0"
          image: "prom/pushgateway:v0.8.0"
          image: "jimmidyson/configmap-reload:v0.2.2"
          image: "prom/prometheus:v2.11.1"
$ helm template -f grafana-default-values.yaml grafana-3.8.3.tgz | grep "image:"
      image: "dduportal/bats:0.4.0"
      image: "dduportal/bats:0.4.0"
          image: "grafana/grafana:6.2.5"
$
```

これらをpullしてsaveする。

```shell
images=$(helm template prometheus-8.15.1.tgz -f prometheus-default-values.yaml | grep "image:" | awk '{print $2}' | awk -F'"' '{print $2}')
for image in $images
do
  tag=${image##*:}
  repo=${image%:*}
  filename=$(echo "${repo}_${tag}.tar.gz" | tr '/' '_')
  echo "repo: $repo"
  echo "tag: $tag"
  echo "filename: $filename"
  docker pull $image
  docker save $image | gzip > $filename
done
```

```shell
images=$(helm template -f grafana-default-values.yaml grafana-3.8.3.tgz | grep "image:" | awk '{print $2}' | awk -F'"' '{print $2}')
for image in $images
do
  tag=${image##*:}
  repo=${image%:*}
  filename=$(echo "${repo}_${tag}.tar.gz" | tr '/' '_')
  echo "repo: $repo"
  echo "tag: $tag"
  echo "filename: $filename"
  docker pull $image
  docker save $image | gzip > $filename
done
```

保存したファイルを確認。

```shell-session
$ ls -l *.tar.gz
-rw-r--r--  1 sotoiwa  staff  67834060  8 16 10:57 dduportal_bats_0.4.0.tar.gz
-rw-r--r--  1 sotoiwa  staff  90113835  8 16 10:58 grafana_grafana_6.2.5.tar.gz
-rw-r--r--  1 sotoiwa  staff   9641412  8 16 10:56 jimmidyson_configmap-reload_v0.2.2.tar.gz
-rw-r--r--  1 sotoiwa  staff  24853721  8 16 10:56 prom_alertmanager_v0.18.0.tar.gz
-rw-r--r--  1 sotoiwa  staff  10946390  8 16 10:56 prom_node-exporter_v0.18.0.tar.gz
-rw-r--r--  1 sotoiwa  staff  50601034  8 16 10:56 prom_prometheus_v2.11.1.tar.gz
-rw-r--r--  1 sotoiwa  staff   7764275  8 16 10:56 prom_pushgateway_v0.8.0.tar.gz
-rw-r--r--  1 sotoiwa  staff  11985628  8 16 10:56 quay.io_coreos_kube-state-metrics_v1.6.0.tar.gz
$
```

以上で完了。

## 参考

- [MinikubeにPrometheusとGrafanaをHelmチャートでデプロイする](https://qiita.com/sotoiwa/items/993990edf2bb98af7c1d)