Prometheus Operator のインストール

このページには、K3s 環境で Prometheus Operator (kube-prometheus) をインストールする方法について書いてありますが、詳しく調べていないところがあるので飽くまで作業ログです。

kube-prometheus #

kube-prometheus は Prometheus Operator を使って Kubernetes クラスターを監視するために必要なコンポーネントがスタックとして集合されています。

具体的には次のもので、Prometheus Operator 以外の Prometheus を使う上で必須といっても過言ではないコンポーネントがインストールされます。

  • The Prometheus Operator
  • Highly available Prometheus
  • Highly available Alertmanager
  • Prometheus node-exporter
  • Prometheus Adapter for Kubernetes Metrics APIs
  • kube-state-metrics
  • Grafana

kube-prometheus のインストール方法 #

kube-prometheus をインストールする方法として、kubectl と Helm でインストールする方法があります。

ここでは Helm でインストールする方法を説明します(kubectl でインストールを試みたものの、Prometheus と Alermmanager がうまく動かなかったので Helm に切り替えました)。

Helm で Prometheus Operator をインストールする場合は、 Prometheus Community が提供しているチャートを使います。

リポジトリーの取得 #

まずは Helm リポジトリーを取得します。

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

Namespace の作成 #

kube-prometheus のスタックをインストールするとかなりの数のリソースが作成されるため、kube-prometheus 用に Namespace リソースを作ります。 ここでは monitoring という名前にしています。

コマンドラインで Namespace を作る場合は次のコマンドを実行します。

$ kubectl create namespace monitoring

Namespace マニフェストを作る場合は次のようなファイルです。

---
apiVersion: "v1"
kind: "Namespace"
metadata: 
  name: "monitoring"

チャートのカスタマイズ #

kube-prometheus をインストールする前にチャートをカスタマイズします。 設定変更可能なオプションは次のコマンドで確認できます。

$ helm show values prometheus-community/kube-prometheus-stack

私は次のような values.yaml を作成しました。

  • Prometheus、Alertmanager、Grafana への外部アクセス用に LoadBalancer サービスを使用
  • Grafana の初期パスワードを変更
  • Grafana のデフォルトタイムゾーンの変更
  • K3s 用にモニタリングする項目を制限( こちらを参考にしています)
prometheus:
  service:
    type: LoadBalancer
alertmanager:
  service:
    type: LoadBalancer
grafana:
  # Admin user password
  adminPassword: "password"
  defaultDashboardsTimezone: Asia/Tokyo
  service:
    type: LoadBalancer
kubeApiServer:
  enabled: true
kubeControllerManager:
  enabled: false
kubeScheduler:
  enabled: false
kubeProxy:
  enabled: false
kubeEtcd:
  enabled: false

インストール #

values.yaml が作成できれば、kube-prometheus スタックをインストールします。

$ helm install -f values.yaml kube-prometheus-stack prometheus-community/kube-prometheus-stack --namespace monitoring

無事インストールできていれば Helm では次のように確認ができます。

$ helm list -n monitoring
NAME                    NAMESPACE       REVISION        UPDATED                                 STATUS          CHART                           APP VERSION
kube-prometheus-stack   monitoring      1               2022-05-09 02:23:51.026850649 +0900 JST deployed        kube-prometheus-stack-35.0.3    0.56.0

各種サービスへのアクセス #

先ほど Prometheus、Alertmanager、Grafana へは values.yaml でサービスタイプを LoadBalancer しました。 うまくインストールされていればそれぞれに対して仮想 IP アドレスが払い出されているはずです。 下記のコマンドでそれらの IP アドレスは確認できます。

$ kubectl get svc -n monitoring
NAME                                             TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)                      AGE
kube-prometheus-stack-kube-state-metrics         ClusterIP      10.43.100.70    <none>          8080/TCP                     12m
kube-prometheus-stack-grafana                    LoadBalancer   10.43.164.72    192.168.0.210   80:30910/TCP                 12m
kube-prometheus-stack-prometheus                 LoadBalancer   10.43.19.128    192.168.0.211   9090:31456/TCP               12m
kube-prometheus-stack-operator                   ClusterIP      10.43.74.34     <none>          443/TCP                      12m
kube-prometheus-stack-alertmanager               LoadBalancer   10.43.229.125   192.168.0.212   9093:30476/TCP               12m
kube-prometheus-stack-prometheus-node-exporter   ClusterIP      10.43.218.74    <none>          9100/TCP                     12m
alertmanager-operated                            ClusterIP      None            <none>          9093/TCP,9094/TCP,9094/UDP   12m
prometheus-operated                              ClusterIP      None            <none>          9090/TCP                     12m

アップグレード #

kube-prometheus スタックをアップグレードする際や、values.yaml を変更した場合は次のコマンドでアップグレードできます。

$ helm upgrade --install kube-prometheus-stack --values values.yaml prometheus-community/kube-prometheus-stack --namespace monitoring

アンインストール #

kube-prometheus スタックをアンインストールする場合は、インストール時に入力した名前と Namespace を指定してアンインストールします。

$ helm uninstall kube-prometheus-stack --namespace monitoring

以上です。