Prometheusをhelm経由でインストール

Operatorをアンインストール

以下のコマンドを実行し,OperatorでインストールしたPrometheusのアンインストール

cd kube-prometheus/
kubectl delete -f  manifests/
kubectl delete -f  manifests/setup

HelmでPrometheusをインストール

以下のコマンドを実行し,リポジトリを追加

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

以下のコマンドを実行し,Prometheusをインストール

helm upgrade --install prometheus prometheus-community/kube-prometheus-stack \
  --create-namespace \
  --namespace prometheus \
  --set prometheus.prometheusSpec.podMonitorSelectorNilUsesHelmValues=false \
  --set prometheus.prometheusSpec.serviceMonitorSelectorNilUsesHelmValues=false

helm upgrade prometheus prometheus-community/kube-prometheus-stack --namespace prometheus --set prometheus.prometheusSpec.podMonitorSelectorNilUsesHelmValues=false --set prometheus.prometheusSpec.serviceMonitorSelectorNilUsesHelmValues=false

上記の実行結果の例:

Release "prometheus" does not exist. Installing it now.
NAME: prometheus
LAST DEPLOYED: Wed Mar 16 23:21:14 2022
NAMESPACE: prometheus
STATUS: deployed
REVISION: 1
NOTES:
kube-prometheus-stack has been installed. Check its status by running:
  kubectl --namespace prometheus get pods -l "release=prometheus"

Visit https://github.com/prometheus-operator/kube-prometheus for instructions on how to create & configure Alertmanager and Prometheus instances using the Operator.

以下のコマンドを実行し,helmでの設定値を確認

helm get values prometheus --namespace prometheus

コマンドの結果例:

USER-SUPPLIED VALUES:
prometheus:
  prometheusSpec:
    podMonitorSelectorNilUsesHelmValues: false
    serviceMonitorSelectorNilUsesHelmValues: false

Nginx Ingressの設定

以下のコマンドを実行し,Nginx Ingressの設定を更新する.

helm install ingress-nginx ingress-nginx/ingress-nginx --create-namespace --namespace ingress-nginx --set controller.metrics.enabled=true --set-string controller.podAnnotations."prometheus\.io/scrape"="true" --set-string controller.podAnnotations."prometheus\.io/port"="10254" --set controller.metrics.serviceMonitor.enabled=true --set controller.metrics.serviceMonitor.additionalLabels.release="prometheus"

helm upgrade ingress-nginx ingress-nginx \
  --repo https://kubernetes.github.io/ingress-nginx \
  --namespace ingress-nginx \
  --set controller.metrics.enabled=true \
  --set-string controller.podAnnotations."prometheus\.io/scrape"="true" \
  --set-string controller.podAnnotations."prometheus\.io/port"="10254" \
  --set controller.metrics.serviceMonitor.enabled=true \
  --set controller.metrics.serviceMonitor.additionalLabels.release="prometheus"

Nginx Ingressの設定値を確かめる.

helm get values ingress-nginx --namespace ingress-nginx

実行結果の例:

USER-SUPPLIED VALUES:
controller:
  metrics:
    enabled: true
    serviceMonitor:
      additionalLabels:
        release: prometheus
      enabled: true
  podAnnotations:
    prometheus.io/port: "10254"
    prometheus.io/scrape: "true"

PrometheusとGrafanaへのアクセス

以下のコマンドを実行し,Prometheusへポート転送でアクセスする.

kubectl port-forward svc/prometheus-kube-prometheus-prometheus -n prometheus 9090:9090

Webブラウザで http://localhost:9090/ へアクセスする.

Graphを選んで nginx と入力する.候補が表示されればよい.

Serviceを公開して,Grafanaへアクセスする.以下のコマンドを実行する.

kubectl patch service prometheus-grafana -p '{"spec":{"type":"NodePort"}}' -n prometheus

NodePortのポート番号を確かめる.

kubectl get svc prometheus-grafana -n prometheus

コマンド結果の例:

NAME                 TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
prometheus-grafana   NodePort   10.43.248.41   <none>        80:31918/TCP   86m

ポート(PORT)にかかれている:の右側( 80:xxx )をメモする.ここでは xxx が31918に対応する.

Webブラウザで http://localhost:31918/ へアクセスする.

ユーザ名とパスワードはそれぞれ以下を入力する.

ユーザ名:admin パスワード:prom-operator

Grafanaのダッシュボードを作成する.以下のURLを開いて表示された内容をGrafanaのDashboard -> Importから追加する.

https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/grafana/dashboards/nginx.json

以下のダッシュボードが追加されればよい.ただし,一部が表示されない状態になるので,以降の手順を行う.

サンプルマニフェストの作成

Ingressの例

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: example
  namespace: default
spec:
  ingressClassName: nginx
  rules:
    - host: <サーバのIPアドレスまたはホスト名>
      http:
        paths:
          - pathType: Prefix
            backend:
              service:
                name: get-my-info
                port:
                  number: 4000
            path: /

Deploymentの例

apiVersion: apps/v1
kind: Deployment
metadata:
  name: get-my-info
  labels:
    app: nginxdemo
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginxdemo
  template:
    metadata:
      labels:
        app: nginxdemo
    spec:
      containers:
        - name: info-app
          image: nginxdemos/hello
          ports:
          - containerPort: 80

Serviceの例

apiVersion: v1
kind: Service
metadata:
  name: get-my-info
spec:
  type: NodePort
  selector:
    app: nginxdemo
  ports:
    - name: "http-port"
      protocol: "TCP"
      port: 4000
      targetPort: 80

それぞれをkubectlで適用する.

kubectl apply -f xxx

WebブラウザからK8sクラスタへアクセスしてみる.

http://<サーバのIPアドレスまたはホスト名>