Kubernetes のクラスターでサービスを監視したくなったので、kube-prometheus-stack で、Prometheusと、Grafana をインストールしてみました。
の記事をかなり参考にさせていただきました。貴重な記事をありがとうざいます。感謝🙇♂
Kubernetes, Prometheus, Grafana, Service, ServiceMonitor,PV,PVCの関係図
Prometheus が、ServiceMonitor で設定されているサービスから情報を収集し、それを Grafana で閲覧する形です。
無設定時では、Prometheus も Grafana もコンテナ内にデータを保存するため、Podの再起動でデータが消えてしまいます。
なので、以下の流れでインストールを行い、永続化ボリューム(NFS)にデータが保存されるようにします。
インストール完了までの全体の流れ
- 一度インストール
- 設定ファイル書き出し
- アンインストール
- ストレージ作成
- 設定ファイル書き換え
- 再インストール(設定ファイルあり)
この流れでインストールを完了させます。
kube-prometheus-stack のインストール
リポジトリ追加
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
ネームスペース作成
kubectl create ns monitoring
インストール実行
helm install kube-prometheus-stack prometheus-community/kube-prometheus-stack -n monitoring
設定ファイル書き出し
helm show values prometheus-community/kube-prometheus-stack > values-monitoring.yaml
アンインストール
helm uninstall kube-prometheus-stack -n monitoring
ストレージ作成
nano monitoring-storage-class.yaml
以下の内容を貼り付けてください。
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: grafana-nfs
provisioner: kubernetes.io/nfs
parameters:
archiveOnDelete: "false"
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: prometheus-nfs
provisioner: kubernetes.io/nfs
parameters:
archiveOnDelete: "false"
適用します。
# kubectl apply -f monitoring-storage-class.yaml
PV作成
nano monitoring-pv.yaml
以下の内容を貼り付けてください。
NFS周りの情報は皆様の環境にあわせてください。
NFSの構築方法は
でまとめています。
apiVersion: v1
kind: PersistentVolume
metadata:
name: grafana-pv
spec:
accessModes:
- ReadWriteOnce
capacity:
storage: 2Gi
persistentVolumeReclaimPolicy: Retain
storageClassName: grafana-nfs
volumeMode: Filesystem
nfs:
server: 100.64.1.114
path: "/srv/nfs/share/grafana"
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: prometheus-pv
spec:
accessModes:
- ReadWriteOnce
capacity:
storage: 10Gi
persistentVolumeReclaimPolicy: Retain
storageClassName: prometheus-nfs
volumeMode: Filesystem
nfs:
server: 100.64.1.114
path: "/srv/nfs/share/prometheus"
適用します
# kubectl apply -f monitoring-pv.yaml
確認
# kubectl get pv -A
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS VOLUMEATTRIBUTESCLASS REASON AGE
grafana-pv 2Gi RWO Retain Available grafana-nfs <unset> 16s
microai-pv 50Gi RWX Retain Released default/microai-pvc microai-storage <unset> 16d
microai-redis-pv 1Gi RWX Retain Bound redis/microai-redis-pvc microai-storage <unset> 16d
prometheus-pv 10Gi RWO Retain Available prometheus-nfs <unset> 16s
kube-prometheus-stack の設定変更
# nano values-monitoring.yaml
設定箇所 (grafana)
grafana:
の
defaultDashboardsTimezone: utc
↓
defaultDashboardsTimezone: Asia/Tokyo
その下に以下を追記
deploymentStrategy:
type: Recreate
persistence:
enabled: true
type: pvc
storageClassName: grafana-nfs
accessModes:
- ReadWriteOnce
size: 2Gi
finalizers:
- kubernetes.io/pvc-protection
initChownData:
enabled: false
設定箇所 (prometheus)
prometheus:
prometheusSpec:
の
storageSpec: {}
↓
storageSpec:
その下に以下を追記
volumeClaimTemplate:
spec:
storageClassName: prometheus-nfs
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 10Gi
再インストール
helm install kube-prometheus-stack -f values-monitoring.yaml prometheus-community/kube-prometheus-stack -n monitoring
NAME: kube-prometheus-stack
LAST DEPLOYED:
NAMESPACE: monitoring
STATUS: deployed
REVISION: 1
NOTES:
kube-prometheus-stack has been installed. Check its status by running:
kubectl --namespace monitoring get pods -l "release=kube-prometheus-stack"
Visit https://github.com/prometheus-operator/kube-prometheus for instructions on how to create & configure Alertmanager and Prometheus instances using the Operator.
GrafanaのWEB UIにアクセス
microAI では、Cloudflare tunnel を使用しているので、
http://kube-prometheus-stack-grafana.monitoring.svc.cluster.local
を設定して、クラスター外から見られるようにしました。
初期パスワード
username: admin
password: 以下のコマンドで確認( admin と書かれている記事が多くありますが、kube-prometheus-stack でインストールされた場合は admin じゃないっぽい)
# cat values-monitoring.yaml | grep adminPassword:
adminPassword: prom-operator
Grafana のスクショたち
Prometheus の WEB UIにアクセス
同じく、Cloudflare tunnel を使用しているので、
http://kube-prometheus-stack-prometheus.monitoring.svc.cluster.local:9090
を設定して、クラスター外から見られるようにしました。
初期エラー
インストール直後から、上記の4つのターゲットでエラーが発生してしまっています。
こちらは、現状特に困らなないので一旦放置して、そのうち対応する予定です。
以上!結構苦労しましたが無事インストール完了🍺