このページには、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
以上です。