CentOS Stream 9
Sponsored Link

Kubernetes : Prometheus でモニタリングする2023/10/23

 

Prometheus をインストールして、Kubernetes クラスターの各種メトリクスをモニタリングできるようにします。

当例では以下のように 4 台のノードを使用して Kubernetes クラスターを構成しています。

+----------------------+   +----------------------+
|   [ mgr.srv.world ]  |   |   [ dlp.srv.world ]  |
|     Manager Node     |   |     Control Plane    |
+-----------+----------+   +-----------+----------+
        eth0|10.0.0.25             eth0|10.0.0.30
            |                          |
------------+--------------------------+-----------
            |                          |
        eth0|10.0.0.51             eth0|10.0.0.52
+-----------+----------+   +-----------+----------+
| [ node01.srv.world ] |   | [ node02.srv.world ] |
|     Worker Node#1    |   |     Worker Node#2    |
+----------------------+   +----------------------+

[1]
Prometheus が使用する外部ストレージが必要となります。
当例では、こちらの [1], [2], [3] の通り、NFS サーバー [nfs.srv.world:/home/nfsshare] ディレクトリを共有ディレクトリとして設定して、Prometheus が使用するボリュームを動的プロビジョニングできるよう NFS subdir external provisioner を設定して進めます。
[2] Helm で Prometheus チャートをインストールします。
# Prometheus の設定を書き出して自身の環境用に変更

[root@mgr ~]#
helm inspect values bitnami/kube-prometheus > prometheus.yaml

[root@mgr ~]#
vi prometheus.yaml
.....
.....
    21行目 : 使用する storageClass を指定
    storageClass: "nfs-client"
.....
.....
.....
    1058行目 : 使用する storageClass を指定
    storageClass: "nfs-client"
.....
.....
.....
    2036行目 : 使用する storageClass を指定
    storageClass: "nfs-client"

# Prometheus 用のネームスペース作成

[root@mgr ~]#
kubectl create namespace monitoring

namespace/monitoring created
[root@mgr ~]#
helm install prometheus --namespace monitoring -f prometheus.yaml bitnami/kube-prometheus

NAME: prometheus
LAST DEPLOYED: Mon Oct 23 10:33:45 2023
NAMESPACE: monitoring
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
CHART NAME: kube-prometheus
CHART VERSION: 8.21.6
APP VERSION: 0.68.0

** Please be patient while the chart is being deployed **

Watch the Prometheus Operator Deployment status using the command:

    kubectl get deploy -w --namespace monitoring -l app.kubernetes.io/name=kube-prometheus-operator,app.kubernetes.io/instance=prometheus

Watch the Prometheus StatefulSet status using the command:

    kubectl get sts -w --namespace monitoring -l app.kubernetes.io/name=kube-prometheus-prometheus,app.kubernetes.io/instance=prometheus

Prometheus can be accessed via port "9090" on the following DNS name from within your cluster:

    prometheus-kube-prometheus-prometheus.monitoring.svc.cluster.local

To access Prometheus from outside the cluster execute the following commands:

    echo "Prometheus URL: http://127.0.0.1:9090/"
    kubectl port-forward --namespace monitoring svc/prometheus-kube-prometheus-prometheus 9090:9090

Watch the Alertmanager StatefulSet status using the command:

    kubectl get sts -w --namespace monitoring -l app.kubernetes.io/name=kube-prometheus-alertmanager,app.kubernetes.io/instance=prometheus

Alertmanager can be accessed via port "9093" on the following DNS name from within your cluster:

    prometheus-kube-prometheus-alertmanager.monitoring.svc.cluster.local

To access Alertmanager from outside the cluster execute the following commands:

    echo "Alertmanager URL: http://127.0.0.1:9093/"
    kubectl port-forward --namespace monitoring svc/prometheus-kube-prometheus-alertmanager 9093:9093

[root@mgr ~]#
kubectl get pods -n monitoring

NAME                                                           READY   STATUS    RESTARTS   AGE
alertmanager-prometheus-kube-prometheus-alertmanager-0         2/2     Running   0          2m8s
prometheus-kube-prometheus-blackbox-exporter-586779659-72cst   1/1     Running   0          2m24s
prometheus-kube-prometheus-operator-74675d8559-dlzk8           1/1     Running   0          2m24s
prometheus-kube-state-metrics-7769f89694-ggdbz                 1/1     Running   0          2m24s
prometheus-node-exporter-9vgbw                                 1/1     Running   0          2m24s
prometheus-node-exporter-gdkjc                                 1/1     Running   0          2m24s
prometheus-prometheus-kube-prometheus-prometheus-0             2/2     Running   0          2m8s

# もしクラスター外からアクセスする場合はポートフォワード

[root@mgr ~]#
kubectl port-forward -n monitoring service/prometheus-kube-prometheus-prometheus --address 0.0.0.0 9090:9090 &

[3] Grafana もインストールする場合は、同様にインストール可能です。
# 設定を書き出して storageClassName を変更

[root@mgr ~]#
helm inspect values bitnami/grafana > grafana.yaml

[root@mgr ~]#
vi grafana.yaml
558行目 : 自身の [storageClass] を指定
persistence:
  enabled: true
  ## If defined, storageClassName: <storageClass>
  ## If set to "-", storageClassName: "", which disables dynamic provisioning
  ## If undefined (the default) or set to null, no storageClassName spec is
  ##   set, choosing the default provisioner.  (gp2 on AWS, standard on
  ##   GKE, AWS & OpenStack)
  ##
  storageClass: "nfs-client"

[root@mgr ~]#
helm install grafana --namespace monitoring -f grafana.yaml bitnami/grafana

NAME: grafana
LAST DEPLOYED: Mon Oct 23 10:38:58 2023
NAMESPACE: monitoring
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
CHART NAME: grafana
CHART VERSION: 9.3.2
APP VERSION: 10.1.5

** Please be patient while the chart is being deployed **

1. Get the application URL by running these commands:
    echo "Browse to http://127.0.0.1:8080"
    kubectl port-forward svc/grafana 8080:3000 &

2. Get the admin credentials:

    echo "User: admin"
    echo "Password: $(kubectl get secret grafana-admin --namespace monitoring -o jsonpath="{.data.GF_SECURITY_ADMIN_PASSWORD}" | base64 -d)"

[root@mgr ~]#
kubectl get pods -n monitoring

NAME                                                           READY   STATUS    RESTARTS   AGE
alertmanager-prometheus-kube-prometheus-alertmanager-0         2/2     Running   0          5m50s
grafana-6d54c5d759-gk9dn                                       1/1     Running   0          54s
prometheus-kube-prometheus-blackbox-exporter-586779659-72cst   1/1     Running   0          6m6s
prometheus-kube-prometheus-operator-74675d8559-dlzk8           1/1     Running   0          6m6s
prometheus-kube-state-metrics-7769f89694-ggdbz                 1/1     Running   0          6m6s
prometheus-node-exporter-9vgbw                                 1/1     Running   0          6m6s
prometheus-node-exporter-gdkjc                                 1/1     Running   0          6m6s
prometheus-prometheus-kube-prometheus-prometheus-0             2/2     Running   0          5m50s

# もしクラスター外からアクセスする場合はポートフォワード

[root@mgr ~]#
kubectl port-forward -n monitoring service/grafana --address 0.0.0.0 3000:3000 &

[4]
クラスタ―内ホストから Prometheus UI にアクセスする場合は Web ブラウザーを起動して、以下の URL にアクセスします。
⇒ http://prometheus-kube-prometheus-prometheus.monitoring.svc.cluster.local
ポートフォワーディングした場合は、ローカルネットワーク内の任意のコンピューターで Web ブラウザーを起動して、以下の URL にアクセスします。
⇒ http://(Manager ノードのホスト名 または IP アドレス):(設定したポート)/
以下のように Prometheus UI が表示されれば OK です。
[5]
クラスタ―内ホストから Grafana にアクセスする場合は Web ブラウザーを起動して、以下の URL にアクセスします。
⇒ http://grafana.monitoring.svc.cluster.local
ポートフォワーディングした場合は、ローカルネットワーク内の任意のコンピューターで Web ブラウザーを起動して、以下の URL にアクセスします。
⇒ http://(Manager ノードのホスト名 または IP アドレス):(設定したポート)/
以下のように Grafana が表示されれば OK です。
[admin] パスワードは以下のコマンドで確認します。
⇒ echo "Password: $(kubectl get secret grafana-admin --namespace monitoring -o jsonpath="{.data.GF_SECURITY_ADMIN_PASSWORD}" | base64 -d)"
関連コンテンツ