Prometheus and Grafana Helm Install For EKS 設定 ① Prometheusをインストール


EKS環境へ、Prometheus and Grafanaを入れたメモ

StorageClassを定義する

データの永続化する場所を定義。

prometheus-storageclass.yaml
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: prometheus
  namespace: prometheus
provisioner: kubernetes.io/aws-ebs
parameters:
  type: gp2
reclaimPolicy: Retain
$ kubectl apply -f prometheus-storageclass.yaml

prometheus-values.yamlの準備

Prometheusは主に
Prometheus Server,Alertmanager,Exporter,Pushgatewayの4つのマイクロサービスで成り立っている。
参考: Prometheus でスケーラブルな監視基盤を作ってみよう! 〜概要編〜

ここで取得する設定ファイルはすごく長いが、上記4サービスの設定が全て記載されており、
よくみるとそれぞれの設定に分けられるので、よく見ること。

chartの確認
$ helm search prometheus
NAME                                    CHART VERSION   APP VERSION DESCRIPTION
stable/prometheus                       9.3.1           2.13.1      Prometheus is a
...
デフォルトの設定値を取得する。
$ helm inspect values stable/prometheus > prometheus-values.yaml
pushgatewayは今回は使わないので無効化
pushgateway:
  ## If false, pushgateway will not be installed
  ##
  enabled: false 

 移行の記述も邪魔なので削除
server.service公開をNodePortへ
    servicePort: 80
    nodePort: 30000 # 不要?
    type: NodePort
serverとalertmanagerのstorageClassをprometheusに変更
  storageClass: "prometheus"

変更するところ(ALB Ingress Controller使う用)

私の環境ではこちらの環境を設定しているので、
これらを設定します。

ingressを有効化、server.ingress.annotationsへ設定を追加
  ingress:
    ## If true, Prometheus server Ingress will be created
    ##
    enabled: true

    ## Prometheus server Ingress annotations
    ##
    annotations:
      kubernetes.io/ingress.class: alb
      alb.ingress.kubernetes.io/scheme: internet-facing
      alb.ingress.kubernetes.io/security-groups: セキュリティグループ名
server.ingress.hostsを設定する
    hosts: 
      - prometheus.XXXX.com

prometheusの起動

起動
helm install -f prometheus-values.yaml stable/prometheus --name prometheus --namespace prometheus

ここまでで画面が確認できるはずなのだが、、http:://prometheus.XXXX.comを確認したが、503となった。
ELB ingress controllerがserverを見つけられないようだ...

ERROR
 kubebuilder/controller "msg"="Reconciler error" "error"="no object matching key \"prometheus/prometheus-server\" in local store"  "Controller"="alb-ingress-controller" "Request"={"Namespace":"prometheus","Name":"prometheus-server"}

server.ingress部分を全て削除し、ingressを自分でapplyしてみる。

ingress.yaml
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: "ingress"
  namespace: "prometheus"
  annotations:
    kubernetes.io/ingress.class: alb
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/security-groups: セキュリティグループコード
  labels:
    app: prometheus-ingress
spec:
  rules:
    - host: prometheus.XXXX.com
      http:
        paths:
          - path: /*
            backend:
              serviceName: "prometheus-server"
              servicePort: 80
kubectl apply -f ingress.yaml

画面を見ることができた。

状態確認
kubectl get all -n prometheus
NAME                                                 READY   STATUS    RESTARTS   AGE
pod/prometheus-alertmanager-6f5c6d6f49-pprwj         2/2     Running   0          56m
pod/prometheus-kube-state-metrics-7fddb795c8-7qqlx   1/1     Running   0          56m
pod/prometheus-node-exporter-cjj2d                   1/1     Running   0          56m
pod/prometheus-node-exporter-sx6st                   1/1     Running   0          56m
pod/prometheus-server-775cc84c8f-9ptbd               2/2     Running   0          56m

NAME                                    TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
service/prometheus-alertmanager         ClusterIP   10.100.165.160   <none>        80/TCP         56m
service/prometheus-kube-state-metrics   ClusterIP   None             <none>        80/TCP         56m
service/prometheus-node-exporter        ClusterIP   None             <none>        9100/TCP       56m
service/prometheus-server               NodePort    10.100.130.6     <none>        80:30000/TCP   56m

NAME                                      DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
daemonset.apps/prometheus-node-exporter   2         2         2       2            2           <none>          56m

NAME                                            READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/prometheus-alertmanager         1/1     1            1           56m
deployment.apps/prometheus-kube-state-metrics   1/1     1            1           56m
deployment.apps/prometheus-server               1/1     1            1           56m

NAME                                                       DESIRED   CURRENT   READY   AGE
replicaset.apps/prometheus-alertmanager-6f5c6d6f49         1         1         1       56m
replicaset.apps/prometheus-kube-state-metrics-7fddb795c8   1         1         1       56m
replicaset.apps/prometheus-server-775cc84c8f               1         1         1       56m

不要な設定部分を削除し、最終的な形はこうなりました。
configmapReloadはこの後、利用すると思うので、残してあります。

prometheus-value.yaml
##########
## alertmanager ##
##########
alertmanager:
  ## If false, alertmanager will not be installed
  ##
  enabled: true

  ## alertmanager container name
  ##
  name: alertmanager

  ## alertmanager container image
  ##
  image:
    repository: prom/alertmanager
    tag: v0.18.0
    pullPolicy: IfNotPresent

  persistentVolume:
    enabled: true
    accessModes:
      - ReadWriteOnce
    mountPath: /data
    size: 2Gi
    storageClass: "prometheus"
    subPath: ""

  ## Annotations to be added to alertmanager pods
  ##
  podAnnotations: {}

  service:
    annotations: {}
    labels: {}
    servicePort: 80
    type: ClusterIP

##########
## configmapReload ##
##########
configmapReload:
  ## configmap-reload container name
  ##
  name: configmap-reload

  ## configmap-reload container image
  ##
  image:
    repository: jimmidyson/configmap-reload
    tag: v0.2.2
    pullPolicy: IfNotPresent

nodeExporter:
  image:
    repository: prom/node-exporter
    tag: v0.18.0
    pullPolicy: IfNotPresent
##########
## server ##
##########
server:
  ## Prometheus server container name
  ##
  enabled: true
  name: server
  sidecarContainers:

  ## Prometheus server container image
  ##
  image:
    repository: prom/prometheus
    tag: v2.13.1
    pullPolicy: IfNotPresent
  ## Prometheus server persistentVolume
  ##
  persistentVolume:
    enabled: true
    accessModes:
      - ReadWriteOnce
    existingClaim: ""
    mountPath: /data
    size: 8Gi
    storageClass: "prometheus"
    subPath: ""
  ## Prometheus server service
  ##
  service:
    servicePort: 80
    nodePort: 30000
    type: NodePort # 外部から見る為、NodePortに変更
##########
## pushgateway ##
##########
pushgateway:
  enabled: false # 利用しない

備考

下記コマンドでdeleteしながらトライアンドエラーを繰り返しました。

helm delete prometheus
helm del --purge prometheus