LoginSignup
3
5

More than 5 years have passed since last update.

Grafana + Heapster + InfluxDB で Kubernetes のリソース監視をする

Last updated at Posted at 2017-03-08

Qiita 初投稿なので手探りしつつ執筆...

最近 Kubernetes と戯れてるのだけど,k8s のリソース監視鉄板ってなんじゃらほいって調べたら addon として Grafana + Heapster + InfluxDB を使うことが出来るらしい.addon なら簡単っしょ,と思って導入しようとしたけど思いっきり時間がかかってしまったので記事にしてみるなぞ.

何も考えずに kubectl create -f してみる

addon ということで,公式に Deployment と Service を用意してくれてます.
kubernetes/heapster
こいつを clone してきておもむろに,
kubectl create -f heapster/deploy/kube-config/influxdb/
...多分起動しません.

ServiceAccount の設定

/var/log/message を見てみると,ServiceAccount に対して token が存在しないとかいうメッセージが出てます.

no API token found for service account default/default, retry after the token is automatically created and added to the service account

面倒くさがって k8s インストール時にすっ飛ばした ServiceAccount 関連設定の模様.色々調べた結果,下記サイトを参考にして設定しました.

kubernetesの認証とアクセス制御を動かしてみる

ちゃんとした証明書で TLS 設定をしていると自動的にその鍵を使って ServiceAccount の token を払い出してくれるみたいですが,オレオレ証明書の場合は明示的にオプション指定する必要があるみたい.

無事設定が終わると,create -f で一応 Pod が起動するようになるはずです.内部的には,自動的に "default" という ServiceAccount を使うように構成を修正してデプロイしてくれる模様.

InfluxDB - Heapster - Grafana 接続設定

ただ,この状態では Heapster のログをみると kube-apiserver にも InfluxDB にも接続てきていないはず (kube-dns が設定されているとこの時点でつながるようになるかも).

まず,InfluxDB を ClusterIP でつながるようにします.IP アドレスは環境に合わせて ClusterIP のレンジの中から適当に割り当て.

influxdb-service.yaml
spec:
  clusterIP: 192.168.254.1

続いて Heapster の接続先を設定.

heapster-deployment.yaml
command:
        - /heapster
        - --source=kubernetes:https://192.168.0.1?useServiceAccount=true&insecure=true
        - --sink=influxdb:http://192.168.254.1:8086

ポイントは,

  • 192.168.0.1 は kube-apiserver の clusterIP.kubectl get services --all-namespace とかすると一番上に出てくる (おそらくレンジの先頭の IP アドレス)
  • 先程 ServiceAccount の設定をしているので,userServiceAccount=true.加えてオレオレ証明書なので,insecure=true
  • InfluxDB は先程設定した clusterIP + ポート番号 (default: 8086)

最後に Grafana の接続先を設定.

grafana-deployment.yaml
env:
        - name: INFLUXDB_HOST
          value: 192.168.254.1

加えて,addon として proxy 経由でのアクセスをしたいので,以下を書き換え.

 - name: GF_SERVER_ROOT_URL
          # If you're only using the API Server proxy, set this value instead:
          value: /api/v1/proxy/namespaces/kube-system/services/monitoring-grafana/ # コメントアウト解除
          # value: / # コメントアウト

起動 & grafana にアクセスしてみる

先程のゴミが残ってる場合は,
kubectl delete -f heapster/deploy/kube-config/influxdb/
してから,
kubectl create -f heapster/deploy/kube-config/influxdb/

正しく起動すると,
http://<kube-apiserver address+port>/api/v1/proxy/namespaces/kube-system/services/monitoring-grafana/
でアクセス可能なはずです.

Home をクリックすると,ClusterPods があって,Cluster は k8s ホストマシン群のリソース状況を,Pods はそのまま Pods のリソース状況を確認出来ます.

Pods クリック後,(選択肢には出ないですが) 既に配備済みの namespace & pods があるのであれば,手動で入力することで対象 namespace の pods 群のリソースが見られます (地味に「配備してあるのに選択肢に出ない...」と困惑した).

grafana.JPG

近いうちに kube-dns 設定とか,prometheus でのリソース監視とかもやってみようかな.

3
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5