Kubernetes1.5 集成Heapster
Heapster是kubernetes集群监控工具。在1.2的时候,kubernetes的监控需要在node节点上运行cAdvisor作为agent收集本机和容器的资源数据,包括cpu、内存、网络、文件系统等。在新版的kubernetes中,cAdvisor被集成到kubelet中。通过netstat可以查看到kubelet新开了一个4194的端口,这就是cAdvisor监听的端口,现在我们然后可以通过http://<node-ip>:4194的方式访问到cAdvisor。Heapster就是通过每个node上的kubelet,也就是实际的cAdvisor上收集数据并汇总,保存到后端存储中。
Heapster支持多种后端存储,包括influxDB,Elasticsearch,Kafka等,在这篇文档里,我们使用influxDB作为后端存储来展示heapster的相关配置。需要说明的是,heapster依赖kubernetes dns配置。具体相关配置请参考另一篇博文《kubernetes 1.5配置dns》。
1、下载heapster
目前heapster的最新版本是1.2版本:
wget https://github.com/kubernetes/heapster/archive/v1.3.0-beta.1.tar.gz
tar xf vv1.3.0-beta.1.tar.gz
cd heapster-1.3.0/deploy/kube-config
cp -r influxdb /data/kubernetes/
上面的操作是下载heapster,然后将其中的influxdb目录复制到我们用于保存相关yaml文件的目录/data/kubernetes目录。其中influxdb目录中包含如下几个文件:
[root@server-116 influxdb]# ll -h total 20K -rw-r--r--. 1 root root 414 Mar 15 18:04 grafana-service.yaml -rw-r--r--. 1 root root 630 Mar 15 21:04 heapster-controller.yaml -rw-r--r--. 1 root root 249 Mar 15 18:04 heapster-service.yaml -rw-r--r--. 1 root root 1.5K Mar 15 18:17 influxdb-grafana-controller.yaml -rw-r--r--. 1 root root 259 Mar 15 18:04 influxdb-service.yaml
我们需要修改相应几个controller文件中的image镜像的地址,还是一样,通过使用阿里云镜像地址dev.aliyun.com, registry.cn-hangzhou.aliyuncs.com/google-containers/heapster-amd64:v1.3.0-beta.1,修改完成以后,直接执行操作如下:
kubectl create -f /data/kubernetes/influxdb
这个时候,我们通过kubectl get pods --all-namespaces命令可以看到两个pod都正常启动,但我们通过dashboard却看不到相应的监控图。通过kubectl logs 查看heapster的容器日志。看到如下报错:
E0315 11:58:16.155096 1 reflector.go:205] k8s.io/heapster/metrics/heapster.go:232: Failed to list *api.Pod: Get https://kubernetes.default/api/v1/pods?resourceVersion=0: x509: certificate is valid for server-116, not kubernetes.default E0315 11:58:16.168369 1 reflector.go:205] k8s.io/heapster/metrics/processors/namespace_based_enricher.go:84: Failed to list *api.Namespace: Get https://kubernetes.default/api/v1/namespaces?resourceVersion=0: x509: certificate is valid for server-116, not kubernetes.default
从报错可以看出,是无法连接https://kubernetes.default这个地址。我们知道kubernetes.default其实就是apiserver本身,只不过这里是使用了kubernetes的域名系统进行解析。报错是因为连接了apiserver的secure port,需要ssl认证,导致了校验异常。为了规避这种校验,我们可以使用一种取巧的办法,就是使用非insecure-port连接,即apiserver的8080端口。
我们找到heapster-controller.yaml文件,里面有关于其启动参数配置如下:
command: - /heapster - --source=kubernetes:https://kubernetes.default - --sink=influxdb:http://monitoring-influxdb:8086
对两个参数做下简单说明:
--source代表heapster的数据源,即从哪里获取数据,这里当然是从apiserver拿数据
--sink代表heapster获取到的数据存储到哪里,我们这里使用了influxdb,influxdb的地址在influxdb相关的yaml文件中有定义,可以自行查看。
我们要做的,就是修改--source的地址,改成如下配置:
--source=kubernetes:http://10.5.10.116:8080?inClusterConfig=false
其中10.5.10.116即apiserver地址,inClusterConfig=false代表不使用service accounts中的kube config信息。
这样配置以后,我们重新运行heapster,再等一会生成数据,就可以看到如下界面了: