kubernetesへPrometheusOperatorの導入


はじめに

前回こちらの記事にPrometheusを導入しましたが、
Raspberry Piに導入する人なんてそうそういないだろうということで、
ESXiサーバ上に構築したKubernetesにHelmを使ってPrometheusOperetaorを導入した備忘録を記載します。
※使っているHELMはversion3です。

PrometheusOperetaorの導入

PrometheusOperatorのHelmリポジトリは以下になります。
https://prometheus-community.github.io/helm-charts

Master上でPromtheusOperatorのリポジトリを導入します。

# helm repo add prometheus-community https://prometheus-community.github.io/helm-charts

リポジトリが導入されていることを確認します。

# helm repo list
prometheus-community    https://prometheus-community.github.io/helm-charts

導入できる一覧を確認します。

# helm search repo prometheus-community
NAME                                                    CHART VERSION   APP VERSION     DESCRIPTION                                       
prometheus-community/alertmanager                       0.3.0           v0.21.0         The Alertmanager handles alerts sent by client ...
prometheus-community/kube-prometheus-stack              12.10.6         0.44.0          kube-prometheus-stack collects Kubernetes manif...
prometheus-community/prometheus                         13.0.2          2.22.1          Prometheus is a monitoring system and time seri...
prometheus-community/prometheus-adapter                 2.10.1          v0.8.2          A Helm chart for k8s prometheus adapter           
prometheus-community/prometheus-blackbox-exporter       4.10.1          0.18.0          Prometheus Blackbox Exporter                      
prometheus-community/prometheus-cloudwatch-expo...      0.12.1          0.8.0           A Helm chart for prometheus cloudwatch-exporter   
prometheus-community/prometheus-consul-exporter         0.4.0           0.4.0           A Helm chart for the Prometheus Consul Exporter   
prometheus-community/prometheus-couchdb-exporter        0.2.0           1.0             A Helm chart to export the metrics from couchdb...
prometheus-community/prometheus-druid-exporter          0.9.0           v0.8.0          Druid exporter to monitor druid metrics with Pr...
prometheus-community/prometheus-elasticsearch-e...      4.0.1           1.1.0           Elasticsearch stats exporter for Prometheus       
prometheus-community/prometheus-kafka-exporter          0.2.0           v1.2.0          A Helm chart to export the metrics from Kafka i...
prometheus-community/prometheus-mongodb-exporter        2.8.1           v0.10.0         A Prometheus exporter for MongoDB metrics         
prometheus-community/prometheus-mysql-exporter          1.0.1           v0.12.1         A Helm chart for prometheus mysql exporter with...
prometheus-community/prometheus-nats-exporter           2.5.1           0.6.2           A Helm chart for prometheus-nats-exporter         
prometheus-community/prometheus-node-exporter           1.12.0          1.0.1           A Helm chart for prometheus node-exporter         
prometheus-community/prometheus-operator                9.3.2           0.38.1          DEPRECATED - This chart will be renamed. See ht...
prometheus-community/prometheus-postgres-exporter       1.6.0           0.8.0           A Helm chart for prometheus postgres-exporter     
prometheus-community/prometheus-pushgateway             1.5.1           1.3.0           A Helm chart for prometheus pushgateway           
prometheus-community/prometheus-rabbitmq-exporter       0.5.6           v0.29.0         Rabbitmq metrics exporter for prometheus          
prometheus-community/prometheus-redis-exporter          4.0.0           1.11.1          Prometheus exporter for Redis metrics             
prometheus-community/prometheus-snmp-exporter           0.1.1           0.19.0          Prometheus SNMP Exporter                          
prometheus-community/prometheus-stackdriver-exp...      1.6.0           0.6.0           Stackdriver exporter for Prometheus               
prometheus-community/prometheus-statsd-exporter         0.1.0           0.18.0          A Helm chart for prometheus stats-exporter        
prometheus-community/prometheus-to-sd                   0.3.1           0.5.2           Scrape metrics stored in prometheus format and ...

リポジトリをアップデートします。

# helm repo update

PrometheusOperatorを導入するネームスペースを作成します。

# kubectl create ns monitoring

PrometheusOperatorを導入します。

# helm install prometheus -n monitoring prometheus-community/kube-prometheus-stack

PrometheusOperatorのPodが正常に動いていることを確認します。

# kubectl get pod -n monitoring
NAME                                                     READY   STATUS    RESTARTS   AGE
alertmanager-prometheus-kube-prometheus-alertmanager-0   2/2     Running   0          2m8s
prometheus-grafana-fb545bb55-rkz28                       2/2     Running   0          2m34s
prometheus-kube-prometheus-operator-5f6774b747-nrjm4     1/1     Running   0          2m34s
prometheus-kube-state-metrics-95d956569-26jj2            1/1     Running   0          2m34s
prometheus-prometheus-kube-prometheus-prometheus-0       2/2     Running   1          2m7s
prometheus-prometheus-node-exporter-72bsq                1/1     Running   0          2m34s
prometheus-prometheus-node-exporter-78k2b                1/1     Running   0          2m34s
prometheus-prometheus-node-exporter-7mb5t                1/1     Running   0          2m34s
prometheus-prometheus-node-exporter-88jgv                1/1     Running   0          2m34s
prometheus-prometheus-node-exporter-fvsg7                1/1     Running   0          2m34s
prometheus-prometheus-node-exporter-wx29m                1/1     Running   0          2m34s

導入できていることを確認できました。
あとは今のままだとGrafanaとPrometheusのUI画面を見ることができないので、
本環境ではMetalLBを導入しているので、MetalLB経由で見れるようにします。

# kubectl get svc -n monitoring prometheus-grafana -o yaml >> prom-grafana.yaml
# kubectl get svc -n prometheus-kube-prometheus-prometheus -o yaml >> prom-prometheus.yaml

上記コマンドで設定ファイルを抽出しているので、spec:の欄のところにを追加して下さい。
type: LoadBalancer

最後に以下コマンドで反映させます。
# kubectl apply -f prom-grafana.yaml
# kubectl apply -f prom-prometheus.yaml

※もしくはkubernetes Dashboardを導入しているのであればDashboardのサービス画面から、
 prometheus-grafana/prometheus-kube-prometheus-prometheusの両方を、
 編集で書き換えて下さい。

EXTERNAL-IPが付与されて画面が見えることを確認します。
補足としてGrafanaのログインIDはadmin、パスワードはprom-operatorとなっています。

# kubectl get svc -n monitoring
NAME                                      TYPE           CLUSTER-IP       EXTERNAL-IP    PORT(S)                      AGE
alertmanager-operated                     ClusterIP      None             <none>         9093/TCP,9094/TCP,9094/UDP   16m
prometheus-grafana                        LoadBalancer   10.99.149.197    10.16.30.114   80:31866/TCP                 16m
prometheus-kube-prometheus-alertmanager   ClusterIP      10.110.128.204   <none>         9093/TCP                     16m
prometheus-kube-prometheus-operator       ClusterIP      10.99.255.48     <none>         443/TCP                      16m
prometheus-kube-prometheus-prometheus     LoadBalancer   10.96.204.56     10.16.30.115   9090:32197/TCP               16m
prometheus-kube-state-metrics             ClusterIP      10.109.149.190   <none>         8080/TCP                     16m
prometheus-operated                       ClusterIP      None             <none>         9090/TCP                     16m
prometheus-prometheus-node-exporter       ClusterIP      10.109.191.3     <none>         9100/TCP                     16m

最後に

RaspberryPiでやったこととほとんど同じになりますが、やはりARMとは違い簡単に導入できますね。
そもそもRaspberryPiでやろうとしていることが多少無謀なのかもしれないが自宅で使う分には良い勉強にもなっているし、
色々なトラブルに巻き込まれていきたいと思います。