Kubernetes 1.11.3でHeapsterを動かす
Contents |
はじめに
1.11でDeprecatedになったHeapsterだが,metrics-serverはまだ発展途上な感じでDashboardに表示されなかったりと不便なのでとりあえずHeapsterを動かそうと思った. この記事を参考に動かそうとしたが,2018/10/28時点のMasterだと自分の環境では動かなかったので修正をメモ.
バージョン情報は以下の通り.
$ kubectl version
Client Version: version.Info{Major:"1", Minor:"11", GitVersion:"v1.11.3", GitCommit:"a4529464e4629c21224b3d52edfe0ea91b072862", GitTreeState:"clean", BuildDate:"2018-09-09T18:02:47Z", GoVersion:"go1.10.3", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"11", GitVersion:"v1.11.4", GitCommit:"bf9a868e8ea3d3a8fa53cbb22f566771b3f8068b", GitTreeState:"clean", BuildDate:"2018-10-25T19:06:30Z", GoVersion:"go1.10.3", Compiler:"gc", Platform:"linux/amd64"}
$ docker version
Client:
Version: 17.03.2-ce
API version: 1.27
Go version: go1.6.2
Git commit: f5ec1e2
Built: Thu Jul 5 23:07:48 2018
OS/Arch: linux/amd64
Server:
Version: 17.03.2-ce
API version: 1.27 (minimum version 1.12)
Go version: go1.6.2
Git commit: f5ec1e2
Built: Thu Jul 5 23:07:48 2018
OS/Arch: linux/amd64
Experimental: false
ちなみにmetrics-serverの導入はQiitaのこの記事が参考になった
Heapster
Clone
まずはHeapsterのレポジトリをCloneする
$ git clone https://github.com/kubernetes/heapster/
$ cd heapster
そして,はじめにであげた記事を参考にGrafanaのService TypeをNodePortにする. ついでに,Grafanaのコンテナバージョンが5.0.4だとDashboardがデフォルトでセットされていなかったので4.4.3に修正する.
diff --git a/deploy/kube-config/influxdb/grafana.yaml b/deploy/kube-config/influxdb/grafana.yaml
index 216bd9a..266f47a 100644
--- a/deploy/kube-config/influxdb/grafana.yaml
+++ b/deploy/kube-config/influxdb/grafana.yaml
@@ -13,7 +13,7 @@ spec:
spec:
containers:
- name: grafana
- image: k8s.gcr.io/heapster-grafana-amd64:v5.0.4
+ image: k8s.gcr.io/heapster-grafana-amd64:v4.4.3
ports:
- containerPort: 3000
protocol: TCP
@@ -64,7 +64,7 @@ spec:
# or through a public IP.
# type: LoadBalancer
# You could also use NodePort to expose the service at a randomly-generated port
- # type: NodePort
+ type: NodePort
ports:
- port: 80
targetPort: 3000
ここから, deploy/kube-config/rbac
, deploy/kube-config/influxdb
以下を kubectl apply
すればpodが起動するが,その時点でpodのログを確認すると以下のようにエラーが出ていた.
E1028 07:39:05.011439 1 manager.go:101] Error in scraping containers from Kubelet:XX.XX.XX.XX:10255: failed to get all container stats from Kubelet URL "http://XX.XX.XX.XX:10255/stats/container/": Post http://XX.XX.XX.XX:10255/stats/container/: dial tcp XX.XX.XX.XX:10255:
getsockopt: connection refused
Apply patch
エラーでググって見ると,このissueが見つかった
どうやらアクセスするポートが変わったのと,https対応をしなければいけないらしい.
というわけで以下のように deploy/kube-config/influxdb/heapster.yaml
と deploy/kube-config/rbac/heapster-rbac.yaml
を編集する
diff --git a/deploy/kube-config/influxdb/heapster.yaml b/deploy/kube-config/influxdb/heapster.yaml
index e820ca5..195061a 100644
--- a/deploy/kube-config/influxdb/heapster.yaml
+++ b/deploy/kube-config/influxdb/heapster.yaml
@@ -24,7 +24,7 @@ spec:
imagePullPolicy: IfNotPresent
command:
- /heapster
- - --source=kubernetes:https://kubernetes.default
+ - --source=kubernetes.summary_api:''?useServiceAccount=true&kubeletHttps=true&kubeletPort=10250&insecure=true
- --sink=influxdb:http://monitoring-influxdb.kube-system.svc:8086
---
apiVersion: v1
diff --git a/deploy/kube-config/rbac/heapster-rbac.yaml b/deploy/kube-config/rbac/heapster-rbac.yaml
index 6e63803..1f982fb 100644
--- a/deploy/kube-config/rbac/heapster-rbac.yaml
+++ b/deploy/kube-config/rbac/heapster-rbac.yaml
@@ -5,7 +5,7 @@ metadata:
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
- name: system:heapster
+ name: heapster
subjects:
- kind: ServiceAccount
name: heapster
さらに, deploy/kube-config/rbac/heapster-role.yaml
を作成する.
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: heapster
rules:
- apiGroups:
- ""
resources:
- pods
- nodes
- namespaces
verbs:
- get
- list
- watch
- apiGroups:
- extensions
resources:
- deployments
verbs:
- get
- list
- update
- watch
- apiGroups:
- ""
resources:
- nodes/stats
verbs:
- get
Create pods
最後に,これらをapplyする.
$ kubectl create -f ./deploy/kube-config/rbac/
clusterrolebinding.rbac.authorization.k8s.io/heapster created
clusterrole.rbac.authorization.k8s.io/heapster created
$ kubectl create -f ./deploy/kube-config/influxdb/
deployment.extensions/monitoring-grafana created
service/monitoring-grafana created
serviceaccount/heapster created
deployment.extensions/heapster created
service/heapster created
deployment.extensions/monitoring-influxdb created
service/monitoring-influxdb created
kubectl get all -n kube-system
でheapster, Grafana, InfluxDBが起動していることを確認する.
少し待ってkubectl top node
などで情報が取れることを確認する.
さいごに
Kubernetes, なんかうまく動かないなーと思ったら kubectl logs
を使ってログを見ると解決の糸口が見える事が多い.