kind で作った Kubernetes クラスタに Grafana をデプロイする方法を解説します。
Prometheus のデプロイ
前回の記事 の内容に沿って kind クラスタを立ち上げ、Prometheus をデプロイします。
Grafana の管理者パスワードを Secret としてデプロイする
Grafana の管理者のユーザー名とパスワードを Secret としてデプロイします。 ここでは管理者名を admin、パスワードを password としています。
Secret にはデータを base64 エンコードした値 を入力します。
$ echo -n admin | base64
YWRtaW4=
grafana-secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: grafana
type: Opaque
data:
username: YWRtaW4=
password: cGFzc3dvcmQ=
$ # kind 0.11.0 + Kubernetes 1.21.1
$ kubectl apply -f grafana-secret.yaml
secret/grafana created
Grafana の DataSource の設定をデプロイする
Grafana から Prometheus にアクセスするため、DataSource を設定します。 DataSource は Web UI から追加することもできますが、Provisioning 機能 を使って設定ファイルの形で管理することもできます。
Prometheus には Pod の IP アドレスでもアクセスできますが、Service が動作していればサービス名でアクセスできます。
grafana-datasource.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: grafana-datasource
data:
prometheus.yaml: |
apiVersion: 1
datasources:
- name: Prometheus
type: prometheus
url: http://prometheus:9090
isDefault: true
$ kubectl apply -f grafana-datasource.yaml
configmap/grafana-datasource created
Grafana の Pod をデプロイする
Grafana を実行するための Pod をデプロイします。 ユーザー名とパスワードを Secret から、DataSource の設定を ConfigMap から読み込みます。
Provisioning の設定ファイルのサンプルは /usr/share/grafana/conf/provisioning にあるので、ディレクトリをマウントして同じ場所に配置しています。
grafana.yaml
apiVersion: v1
kind: Pod
metadata:
name: grafana
spec:
containers:
- name: grafana
image: grafana/grafana:7.5.7
env:
- name: GF_SECURITY_ADMIN_USER
valueFrom:
secretKeyRef:
name: grafana
key: username
- name: GF_SECURITY_ADMIN_PASSWORD
valueFrom:
secretKeyRef:
name: grafana
key: password
- name: GF_PATHS_PROVISIONING
value: /usr/share/grafana/conf/provisioning
volumeMounts:
- name: datasources
mountPath: /usr/share/grafana/conf/provisioning/datasources
readOnly: true
volumes:
- name: datasources
configMap:
name: grafana-datasource
items:
- key: prometheus.yaml
path: prometheus.yaml
$ kubectl apply -f grafana.yaml
pod/grafana created
Grafana の起動時に GF_<SectionName>_<KeyName> という名前の環境変数がある場合、 この値は設定ファイルの値より優先して読み込まれます(マニュアル)。
したがって、上記の内容は grafana.ini に次の設定を書くことに相当します。
[security]
admin_user = admin
admin_password = password
[paths]
provisioning = /usr/share/grafana/conf/provisioning
ブラウザで動作を確認する
Grafana は デフォルト で 3000 番ポートで通信を待機します。
$ kubectl exec -it grafana -- sh
/usr/share/grafana $ netstat -tln
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 :::3000 :::* LISTEN
/usr/share/grafana $ wget -q -O - http://localhost:3000/
<!DOCTYPE html>
...
kubectl port-forward を使えばブラウザから動作を確認できます。
$ kubectl port-forward grafana 3000
Forwarding from 127.0.0.1:3000 -> 3000
Forwarding from [::1]:3000 -> 3000
Grafana の Explore タブを開き、PromQL クエリを入力すると収集した Prometheus のメトリクスを確認できます。
補足
Grafana コンテナの設定ファイルの構成は次の方法で確認できます。
$ docker run -it --rm --entrypoint="/bin/sh" grafana/grafana:7.4.3
/usr/share/grafana $ find conf -type d
conf
conf/provisioning
conf/provisioning/notifiers
conf/provisioning/dashboards
conf/provisioning/datasources
conf/provisioning/plugins
/usr/share/grafana $ ls conf/provisioning/datasources/
sample.yaml
sample.yaml の内容は 公式マニュアル と同じです。
参考資料
-
grafana/grafana | GitHub
https://github.com/grafana/grafana -
Grafana documentation / Administration / Configuration / Config file locations
https://grafana.com/docs/grafana/latest/administration/configuration/#config-file-locations -
Grafana documentation / Administration / Configuration / Configure with environment variables
https://grafana.com/docs/grafana/latest/administration/configuration/#configure-with-environment-variables -
Grafana documentation / Administration / Provisioning
https://grafana.com/docs/grafana/latest/administration/provisioning/ -
Grafana documentation / Data sources / Prometheus
https://grafana.com/docs/grafana/latest/datasources/prometheus/ -
grafana/grafana | Docker Hub
https://hub.docker.com/r/grafana/grafana/