(11/14 追記) 記事作成時よくわかってなかったけど、本記事では「Helmを使ってPrometheus Operatorをデプロイ、デプロイされたPrometheus OperatorがPrometheusやGrafanaをデプロイしている」という構成でした。
これを踏まえてタイトル含め少し加筆修正。
非Operator構成の場合は下記参照。
Prometheus Operatorを使ったデプロイはマニフェストファイル使って簡単にできるけど、Helmチャート版もあるので試してみた。
環境
Helmはちょっと古い…
(現在の最新は3.3.4。な阪)
[zaki@cloud-dev ~]$ helm version --short v3.2.4+g0ad800e
クラスターはkindを使って作ったばかりでまっさらなものを用意。
[zaki@cloud-dev ~]$ kubectl version --short Client Version: v1.19.2 Server Version: v1.18.2 [zaki@cloud-dev ~]$ helm ls -A NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
リポジトリ追加
$ helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
before
[zaki@cloud-dev ~]$ helm repo list NAME URL stable https://kubernetes-charts.storage.googleapis.com/
追加
[zaki@cloud-dev ~]$ helm repo add prometheus-community https://prometheus-community.github.io/helm-charts "prometheus-community" has been added to your repositories [zaki@cloud-dev ~]$ helm repo list NAME URL stable https://kubernetes-charts.storage.googleapis.com/ prometheus-community https://prometheus-community.github.io/helm-charts
チャートを検索
[zaki@cloud-dev ~]$ helm search repo prometheus-community NAME CHART VERSION APP VERSION DESCRIPTION prometheus-community/alertmanager 0.1.1 v0.21.0 The Alertmanager handles alerts sent by client ... prometheus-community/kube-prometheus-stack 10.1.0 0.42.1 kube-prometheus-stack collects Kubernetes manif... prometheus-community/prometheus 11.16.2 2.21.0 Prometheus is a monitoring system and time seri... prometheus-community/prometheus-adapter 2.7.0 v0.7.0 A Helm chart for k8s prometheus adapter prometheus-community/prometheus-blackbox-exporter 4.7.0 0.17.0 Prometheus Blackbox Exporter prometheus-community/prometheus-cloudwatch-expo... 0.9.0 0.8.0 A Helm chart for prometheus cloudwatch-exporter prometheus-community/prometheus-consul-exporter 0.2.0 0.4.0 A Helm chart for the Prometheus Consul Exporter prometheus-community/prometheus-couchdb-exporter 0.1.2 1.0 A Helm chart to export the metrics from couchdb... prometheus-community/prometheus-druid-exporter 0.8.0 v0.8.0 Druid exporter to monitor druid metrics with Pr... prometheus-community/prometheus-mongodb-exporter 2.8.1 v0.10.0 A Prometheus exporter for MongoDB metrics prometheus-community/prometheus-mysql-exporter 1.0.0 v0.12.1 A Helm chart for prometheus mysql exporter with... prometheus-community/prometheus-nats-exporter 2.5.1 0.6.2 A Helm chart for prometheus-nats-exporter prometheus-community/prometheus-node-exporter 1.11.2 1.0.1 A Helm chart for prometheus node-exporter prometheus-community/prometheus-operator 9.3.2 0.38.1 DEPRECATED - This chart will be renamed. See ht... prometheus-community/prometheus-postgres-exporter 1.3.3 0.8.0 A Helm chart for prometheus postgres-exporter prometheus-community/prometheus-pushgateway 1.4.2 1.2.0 A Helm chart for prometheus pushgateway prometheus-community/prometheus-rabbitmq-exporter 0.5.6 v0.29.0 Rabbitmq metrics exporter for prometheus prometheus-community/prometheus-redis-exporter 3.6.0 1.11.1 Prometheus exporter for Redis metrics prometheus-community/prometheus-snmp-exporter 0.0.6 0.14.0 Prometheus SNMP Exporter prometheus-community/prometheus-to-sd 0.3.1 0.5.2 Scrape metrics stored in prometheus format and ...
なるほど、色々ありますね。
で、ここからどれをインストールすればいいかは特に載ってないけど、prometheus-community/prometheus-operator
ってあるからこれを入れれば楽なんだろ?と思ったんだけど、descriptionのとこ見たら思いっきり"DEPRECATED"と書いてあるのでスルー。
名前の感じからすると、prometheus-community/kube-prometheus-stack
が良い感じに入りそう。
(11/14追記。このチャートをインストールすると、Prometheus Operatorがデプロイされる。prometheus-community/prometheus
はPrometheus単体(依存でnode exporterなども入る)がインストールされる)
kube-prometheus-stack
Installs the kube-prometheus stack, a collection of Kubernetes manifests, Grafana dashboards, and Prometheus rules combined with documentation and scripts to provide easy to operate end-to-end Kubernetes cluster monitoring with Prometheus using the Prometheus Operator.
うん、オールインワンで入るって感じ。
というかこれの前身がprometheus-operator
とのこと。
リポジトリ追加
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm repo add stable https://kubernetes-charts.storage.googleapis.com/
ドキュメントにはこの通り記載はあるけど、どちらもすでに実行済みなので省略。(stable
はHelmインストール時のチュートリアルで100人中120人くらいはやってるはず)
helm repo update
あとはリポジトリをアップデートしておく。
[zaki@cloud-dev ~]$ helm repo update Hang tight while we grab the latest from your chart repositories... ...Successfully got an update from the "prometheus-community" chart repository ...Successfully got an update from the "stable" chart repository Update Complete. ⎈ Happy Helming!⎈
チャートのインストール
ドキュメントには特にネームスペースの指定はないが、Operatorを使ったインストール時の構成に倣ってmonitoring
ネームスペースを作ってそこにデプロイしてみる。
[zaki@cloud-dev ~]$ kubectl create ns monitoring namespace/monitoring created
[zaki@cloud-dev ~]$ helm install prometheus-stack prometheus-community/kube-prometheus-stack -n monitoring manifest_sorter.go:192: info: skipping unknown hook: "crd-install" manifest_sorter.go:192: info: skipping unknown hook: "crd-install" manifest_sorter.go:192: info: skipping unknown hook: "crd-install" manifest_sorter.go:192: info: skipping unknown hook: "crd-install" manifest_sorter.go:192: info: skipping unknown hook: "crd-install" manifest_sorter.go:192: info: skipping unknown hook: "crd-install" manifest_sorter.go:192: info: skipping unknown hook: "crd-install"
こんな感じでインストールが始まる。(そこそこ時間かかった)
別ターミナルでpodの状態を見るとこんな感じ。
[zaki@cloud-dev prometheus]$ kc get pod -n monitoring NAME READY STATUS RESTARTS AGE alertmanager-prometheus-stack-kube-prom-alertmanager-0 0/2 ContainerCreating 0 70s prometheus-prometheus-stack-kube-prom-prometheus-0 0/3 ContainerCreating 0 65s prometheus-stack-grafana-67d44fddcd-l5cvz 0/2 PodInitializing 0 88s prometheus-stack-kube-prom-admission-patch-vbnb4 0/1 Completed 0 83s prometheus-stack-kube-prom-operator-88b8c6745-8ntq8 2/2 Running 0 88s prometheus-stack-kube-state-metrics-bbdb95c45-vmh2s 1/1 Running 0 88s prometheus-stack-prometheus-node-exporter-6rw25 1/1 Running 0 88s prometheus-stack-prometheus-node-exporter-7jkb6 1/1 Running 0 88s prometheus-stack-prometheus-node-exporter-nlgf2 1/1 Running 0 88s
もうしばらく待つと完了。
("skipping unknown hook"と出てるのは、、、なんだろう?)
[zaki@cloud-dev ~]$ helm install prometheus-stack prometheus-community/kube-prometheus-stack -n monitoring manifest_sorter.go:192: info: skipping unknown hook: "crd-install" manifest_sorter.go:192: info: skipping unknown hook: "crd-install" manifest_sorter.go:192: info: skipping unknown hook: "crd-install" manifest_sorter.go:192: info: skipping unknown hook: "crd-install" manifest_sorter.go:192: info: skipping unknown hook: "crd-install" manifest_sorter.go:192: info: skipping unknown hook: "crd-install" manifest_sorter.go:192: info: skipping unknown hook: "crd-install" NAME: prometheus-stack LAST DEPLOYED: Thu Oct 15 23:36:19 2020 NAMESPACE: monitoring STATUS: deployed REVISION: 1 NOTES: kube-prometheus-stack has been installed. Check its status by running: kubectl --namespace monitoring get pods -l "release=prometheus-stack" Visit https://github.com/prometheus-operator/kube-prometheus for instructions on how to create & configure Alertmanager and Prometheus instances using the Operator.
[zaki@cloud-dev ~]$ helm ls -n monitoring NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION prometheus-stack monitoring 1 2020-10-15 23:36:19.899109278 +0900 JST deployed kube-prometheus-stack-10.1.0 0.42.1 [zaki@cloud-dev ~]$ kc get pod,svc -n monitoring NAME READY STATUS RESTARTS AGE pod/alertmanager-prometheus-stack-kube-prom-alertmanager-0 2/2 Running 0 3m46s pod/prometheus-prometheus-stack-kube-prom-prometheus-0 3/3 Running 1 3m41s pod/prometheus-stack-grafana-67d44fddcd-l5cvz 2/2 Running 0 4m4s pod/prometheus-stack-kube-prom-operator-88b8c6745-8ntq8 2/2 Running 0 4m4s pod/prometheus-stack-kube-state-metrics-bbdb95c45-vmh2s 1/1 Running 0 4m4s pod/prometheus-stack-prometheus-node-exporter-6rw25 1/1 Running 0 4m4s pod/prometheus-stack-prometheus-node-exporter-7jkb6 1/1 Running 0 4m4s pod/prometheus-stack-prometheus-node-exporter-nlgf2 1/1 Running 0 4m4s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/alertmanager-operated ClusterIP None <none> 9093/TCP,9094/TCP,9094/UDP 3m48s service/prometheus-operated ClusterIP None <none> 9090/TCP 3m41s service/prometheus-stack-grafana ClusterIP 10.109.142.166 <none> 80/TCP 4m4s service/prometheus-stack-kube-prom-alertmanager ClusterIP 10.108.73.186 <none> 9093/TCP 4m5s service/prometheus-stack-kube-prom-operator ClusterIP 10.96.43.230 <none> 8080/TCP,443/TCP 4m4s service/prometheus-stack-kube-prom-prometheus ClusterIP 10.97.2.124 <none> 9090/TCP 4m5s service/prometheus-stack-kube-state-metrics ClusterIP 10.99.165.64 <none> 8080/TCP 4m5s service/prometheus-stack-prometheus-node-exporter ClusterIP 10.100.97.230 <none> 9100/TCP 4m4s
デプロイが完了した。
webアクセス
Serviceの名前とポート番号から判断して、Prometheusのwebダッシュボードにアクセスするのはservice/prometheus-stack-kube-prom-prometheus
ぽいので、今回はNodePortに設定してアクセスしてみる。
[zaki@cloud-dev ~]$ kubectl patch svc -n monitoring prometheus-stack-kube-prom-prometheus -p '{"spec": {"type": "NodePort"}}' service/prometheus-stack-kube-prom-prometheus patched [zaki@cloud-dev ~]$ kc get svc -n monitoring prometheus-stack-kube-prom-prometheus NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE prometheus-stack-kube-prom-prometheus NodePort 10.105.115.194 <none> 9090:32563/TCP 8m20s
[zaki@cloud-dev ~]$ kc get node -o wide NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME helm-cluster-control-plane Ready master 80m v1.18.2 172.20.0.10 <none> Ubuntu 19.10 3.10.0-1127.19.1.el7.x86_64 containerd://1.3.3-14-g449e9269 helm-cluster-worker Ready <none> 79m v1.18.2 172.20.0.8 <none> Ubuntu 19.10 3.10.0-1127.19.1.el7.x86_64 containerd://1.3.3-14-g449e9269 helm-cluster-worker2 Ready <none> 79m v1.18.2 172.20.0.9 <none> Ubuntu 19.10 3.10.0-1127.19.1.el7.x86_64 containerd://1.3.3-14-g449e9269 [zaki@cloud-dev ~]$ curl 172.20.0.8:32563 <a href="/graph">Found</a>.
こんな感じ。
ブラウザでアクセスしてTargetsを確認するとこの通り。(***-stack-kube-***
と見えてる)
node_load1
のグラフを出すとこんな感じ。
Grafana
Prometheus本体と同じ要領でprometheus-stack-grafana
というServiceがあるので、これもNodePortでアクセスできるようにする。
[zaki@cloud-dev ~]$ kubectl patch svc -n monitoring prometheus-stack-grafana -p '{"spec": {"type": "NodePort"}}' service/prometheus-stack-grafana patched [zaki@cloud-dev ~]$ kc get svc -n monitoring prometheus-stack-grafana NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE prometheus-stack-grafana NodePort 10.104.100.245 <none> 80:31929/TCP 18m
Operatorでインストールした時と同じく、username: admin
/ password: admin
で初期ログインできると思いきや、Invalid username or passwordに!!
secretにパスワードが入ってるのでそこからチェックすると
[zaki@cloud-dev ~]$ kc get secret -n monitoring prometheus-stack-grafana -o jsonpath='{.data.admin-password}' | base64 -d; echo prom-operator [zaki@cloud-dev ~]$ kc get secret -n monitoring prometheus-stack-grafana -o jsonpath='{.data.admin-user}' | base64 -d; echo admin
という感じでログインできる。
どこでこれ定義しているかというと、ユーザー名については依存で入るGrafana本体のHelmチャートのvalues.yamlで、パスワードについてはkube-prometheus-stackのHelmチャートのvalues.yamlになっている。多分。
metrics server
この時点ではまだメトリクスサーバーとして認識されていない
[zaki@cloud-dev ~]$ kubectl describe apiservice v1beta1.metrics.k8s.io Error from server (NotFound): apiservices.apiregistration.k8s.io "v1beta1.metrics.k8s.io" not found
ので、top
も使えない
[zaki@cloud-dev ~]$ kc top node error: Metrics API not available
こちらはちょっと課題かな。
(残件?) unhealthyの項目
実はTargetsの一覧を見ると、一部のメトリクス取得に失敗しており、Healthyになっていない。
なんだろうな、これ。
未調査。(力尽きた)