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 関連設定の模様.色々調べた結果,下記サイトを参考にして設定しました.
ちゃんとした証明書で TLS 設定をしていると自動的にその鍵を使って ServiceAccount の token を払い出してくれるみたいですが,オレオレ証明書の場合は明示的にオプション指定する必要があるみたい.
無事設定が終わると,create -f
で一応 Pod が起動するようになるはずです.内部的には,自動的に "default" という ServiceAccount を使うように構成を修正してデプロイしてくれる模様.
InfluxDB - Heapster - Grafana 接続設定
ただ,この状態では Heapster のログをみると kube-apiserver にも InfluxDB にも接続てきていないはず (kube-dns が設定されているとこの時点でつながるようになるかも).
まず,InfluxDB を ClusterIP でつながるようにします.IP アドレスは環境に合わせて ClusterIP のレンジの中から適当に割り当て.
spec:
clusterIP: 192.168.254.1
続いて Heapster の接続先を設定.
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 の接続先を設定.
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
をクリックすると,Cluster
と Pods
があって,Cluster は k8s ホストマシン群のリソース状況を,Pods はそのまま Pods のリソース状況を確認出来ます.
Pods クリック後,(選択肢には出ないですが) 既に配備済みの namespace & pods があるのであれば,手動で入力することで対象 namespace の pods 群のリソースが見られます (地味に「配備してあるのに選択肢に出ない...」と困惑した).
近いうちに kube-dns 設定とか,prometheus でのリソース監視とかもやってみようかな.