おうちk8sにprometheusを設けてみる(案の定k8sが上手くいかない #10)

スポンサーリンク
個人開発
スポンサーリンク

はじめに

今回はおうちk8sにprometheusを入れて、grafanaでメトリクスの値を確認したいと思います。

実装

prometheusのhelmをリポジトリに追加

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

インストール

$ helm install prometheus prometheus-community/kube-prometheus-stack --namespace monitoring

確認

$ kubectl get pod -n monitoring
NAME                                                     READY   STATUS    RESTARTS      AGE
alertmanager-prometheus-kube-prometheus-alertmanager-0   2/2     Running   0             25m
prometheus-grafana-57888d6d7f-6trrh                      3/3     Running   1 (71m ago)   75m
prometheus-kube-prometheus-operator-69b78696c4-4z2fb     1/1     Running   0             54m
prometheus-kube-state-metrics-d85c885bd-hb4r6            1/1     Running   3 (73m ago)   75m
prometheus-prometheus-kube-prometheus-prometheus-0       2/2     Running   0             25m
prometheus-prometheus-node-exporter-7c7dp                1/1     Running   0             75m
prometheus-prometheus-node-exporter-pksgn                1/1     Running   0             75m
prometheus-prometheus-node-exporter-rs788                1/1     Running   0             75m

namespaceを新たに追加

$ kubectl create ns monitoring

prometheus-community/kube-prometheus-stackの設定をvalus.yamlに出力

$ helm show values prometheus-community/kube-prometheus-stack > values.yaml

出力したvalues.yamlの以下のハイライトの部分を変更します。

・・・【略】・・・
grafana:
  enabled: true
  namespaceOverride: ""

  forceDeployDatasources: false
  forceDeployDashboards: false
  defaultDashboardsEnabled: true
  defaultDashboardsTimezone: utc
  defaultDashboardsEditable: true
  adminPassword: prom-operator

  rbac:
    pspEnabled: false

  ingress:
    enabled: true
    annotations: {}
    kubernetes.io/ingress.class: nginx
    labels: {}

    ## Hostnames.
    ## Must be provided if Ingress is enable.
    hosts:
      - grafana.test.com
    hosts: []
    path: /
    ## TLS configuration for grafana Ingress
    tls: []
    # - secretName: grafana-general-tls
    #   hosts:
    #   - grafana.example.com
・・・【略】・・・

変更した設定を更新します。

$ helm upgrade -i prometheus prometheus-community/kube-prometheus-stack \
    --namespace monitoring \
    -f values.yaml \
    --wait

grafanaで確認

まだアドレスが割り当てられていない。

$ kubectl get ingress -n monitoring
NAME                 CLASS    HOSTS   ADDRESS   PORTS   AGE
prometheus-grafana   <none>   *                 80      33m

そしてCLASS が <none> になっていて、Ingressリソースに対応するIngress Controllerが認識できない。

以下のようにnginxのIngressクラスを割り当てます。

$ kubectl annotate ingress prometheus-grafana -n monitoring kubernetes.io/ingress.class=nginx
ingress.networking.k8s.io/prometheus-grafana annotated

アドレスの割り当て

$ cat <<EOF | kubectl apply -f -
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
  name: ingress-address-pool
  namespace: metallb-system
spec:
  addresses:
  - 192.168.3.100-192.168.3.200
---
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
  name: ingress-l2-advertisement
  namespace: metallb-system
spec:
  ipAddressPools:
  - ingress-address-pool
EOF

$ kubectl get ingress -n monitoring
NAME                 CLASS    HOSTS   ADDRESS         PORTS   AGE
prometheus-grafana   <none>   *       192.168.3.100   80      13d

これでアクセスできるようになったので、アクセスする。

http://192.168.3.100/

でブラウザでアクセスできる。

grafanaのパスワードは以下で求められる

$ kubectl get secret prometheus-grafana -n monitoring -o jsonpath='{.data.admin-password}' | base64 --decode; echo

grafanaのダッシュボードに一覧があるので、以下のようなダッシュボードが見ることができる。

その他、気になること

pathの設定について

上記のvalues.yamlよりingressは以下のような設定になる。

  ingress:
    enabled: true
    annotations: {}
    kubernetes.io/ingress.class: nginx
    labels: {}

    ## Hostnames.
    ## Must be provided if Ingress is enable.
    hosts:
      - grafana.test.com
    hosts: []
    path: /
    ## TLS configuration for grafana Ingress
    tls: []
    # - secretName: grafana-general-tls
    #   hosts:
    #   - grafana.example.com

でpathのところは

    path: /grafana

のようにはできない。

アクセスするとエラーになる。(http://192.168.3.100/loginにリダイレクトされるから)

一つの外部ipに対して、

http://192.168.3.100/grafana/

とか、

http://192.168.3.100/wordpress/

で分けたいと思っているけど、できない。

タイトルとURLをコピーしました