(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【Kubernetes】Prometheusを利用してWorkerNodeのリソース情報を監視する

スポンサーリンク

はじめに

Prometheus(プロメテウス)はメトリクスの監視を行うモニタリングツールで、Kubernetesクラスタの監視においてもCNCFのプロジェクトとして採用されています。

本記事ではKubernetesクラスターのWorkerNodeのCPU情報をPrometheusを通じてグラフ化します。
尚、YAMLの展開にはパッケージマネージャのHelmを利用しました。

環境情報
$ kubectl get prometheus --all-namespaces
NAMESPACE    NAME                                    VERSION   REPLICAS   AGE
prometheus   prometheus-prometheus-oper-prometheus   v2.18.2   1          xx
$ kubectl get node
NAME             STATUS   ROLES    AGE   VERSION
xx   Ready    <none>   xx   v1.20.7+IKS

Prometheusのインストール

プロメテウス用の名前空間を作成し

$ kubectl create namespace prometheus

Helmリポジトリを追加した上で

$ helm repo add stable https://charts.helm.sh/stable
"stable" has been added to your repositories

以下で展開します。

$ helm install prometheus stable/prometheus-operator --namespace prometheus

作成されたPod群を見るとPrometheusだけでなくログ・データ可視化ツールのGrafanaも展開されています。

$ kubectl --namespace prometheus get pods -n prometheus
NAME                                                     READY   STATUS    RESTARTS   AGE
alertmanager-prometheus-prometheus-oper-alertmanager-0   2/2     Running   0          X
prometheus-grafana-7789c77d9d-4jwhn                      2/2     Running   0          X
prometheus-kube-state-metrics-95d956569-nkn9p            1/1     Running   0          X
prometheus-prometheus-node-exporter-txx8c                1/1     Running   0          X
prometheus-prometheus-oper-operator-6d9c4bdb9f-tzkdk     2/2     Running   0          X
prometheus-prometheus-prometheus-oper-prometheus-0       3/3     Running   1          X

Prometheusにブラウザからアクセスする

展開されているサービスの中にあるservice/prometheus-prometheus-oper-prometheusをブラウザからアクセスするために

$ kubectl --namespace prometheus get service -n prometheus
NAME                                      TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
alertmanager-operated                     ClusterIP   None             <none>        9093/TCP,9094/TCP,9094/UDP   X
prometheus-grafana                        ClusterIP   172.21.48.169    <none>        80/TCP                       X
prometheus-kube-state-metrics             ClusterIP   172.21.103.231   <none>        8080/TCP                     X
prometheus-operated                       ClusterIP   None             <none>        9090/TCP                     X
prometheus-prometheus-node-exporter       ClusterIP   172.21.96.134    <none>        9100/TCP                     X
prometheus-prometheus-oper-alertmanager   ClusterIP   172.21.171.143   <none>        9093/TCP                     X
prometheus-prometheus-oper-operator       ClusterIP   172.21.172.7     <none>        8080/TCP,443/TCP             X
prometheus-prometheus-oper-prometheus     ClusterIP   172.21.23.53     <none>        9090/TCP                     X

以下コマンドでポートフォワードを行います。

$ kubectl port-forward service/prometheus-prometheus-oper-prometheus 9090:9090 --address 0.0.0.0 -n prometheus
Forwarding from 0.0.0.0:9090 -> 9090

これによってブラウザから以下URLにアクセスをすればPrometheusのGUIが表示されます。

http://localhost:9090

リソースを確認する

ブラウザ上では以下の画面が表示されるので、Expressionという箇所にリソース名を指定してExecuteを実行します。
f:id:mtiit:20210603100013p:plain
同欄に文字列を入れると以下のように候補がでるので、そこから該当のものを選べます。

f:id:mtiit:20210603091343p:plain
予測候補が一覧として出る
今回は

cluster:node_cpu:sum_rate5m

を選択した状態でExecuteを行い、ノードの負荷を上げるような処理(レプリカ数が多いPodを展開)するとGraphにて以下のように確かにリソース情報が表示されていることが確認できました。

f:id:mtiit:20210603092548p:plain
Prometheusのグラフで確認できる

終わりに

本記事ではPrometheusをKubernetesクラスターに展開し、リソースの一部を抜き取る方法について解説しました。

今回はデフォルトの/etc/prometheus/prometheus.ymlが以下として配置されていましたが

global:
  scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
alerting:
  alertmanagers:
  - static_configs:
    - targets:
rule_files:
scrape_configs:
  - job_name: 'prometheus'
    static_configs:
    - targets: ['localhost:9090']

同ファイルを編集することでPrometheus自身のカスタマイズも可能です。

以上、ご参考になれば幸いです。