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/