電気ひつじ牧場

技術メモと日常のあれこれ

Deploy Prometheus to minikube

Prometheusとは

オープンソースの監視,アラートツール.CNCFプロジェクトに参加している.

prometheus.io

インストール

helmを使って自宅minikubeにインストールする.helm installで直接k8sクラスタapplyしても良いが,デフォルトではClusterIP Serviceしか作成されないため,クラスタ内部からしかアクセスできない.そのため,helm templateでテンプレートを一回書き出してから,LoadBalancer Serviceを作成する.

$ helm template --release-name promtest stable/prometheus > prometheus.yaml

prometheus.yamlに以下を追記する.prometheus serverに対してLoadBalancerからフォワードを行っている.

---
apiVersion: v1
kind: Service
metadata:
  name: lb-prom
spec:
  type: LoadBalancer
  selector:
    component: "server"
    app: prometheus
    release: promtest
  ports:
  - name: "prom-port"
    port: 9090
    protocol: "TCP"
    targetPort: 9090

起動

minikube tunnelを使ってホストマシンからアクセスできるようにする.

$ minikube tunnel
$ kubectl apply -f prometheus.yaml
$ kubectl get svc
NAME                                TYPE           CLUSTER-IP       EXTERNAL-IP      PORT(S)          AGE
lb-prom                             LoadBalancer   10.110.216.125   10.110.216.125   9090:32272/TCP   43m
promtest-kube-state-metrics         ClusterIP      10.107.10.161    <none>           8080/TCP         43m
promtest-prometheus-alertmanager    ClusterIP      10.97.171.3      <none>           80/TCP           43m
promtest-prometheus-node-exporter   ClusterIP      None             <none>           9100/TCP         43m
promtest-prometheus-pushgateway     ClusterIP      10.103.95.154    <none>           9091/TCP         43m
promtest-prometheus-server          ClusterIP      10.110.209.233   <none>           80/TCP           43m

作成したlb-promEXTERNAL-IPに接続できるようになっている.

$ curl -L 10.110.216.125:9090
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <meta name="robots" content="noindex,nofollow">
        <title>Prometheus Time Series Collection and Processing Server</title>
        ...