Heapster是Kubernetes集群监控工具。 在以前Kubernetes的Node上会运行cAdvisor作为agent收集本机和容器的资源数据(如:CPU,内存,网络,文件系统等等)。 在新版本的Kubernetes中,cAdvisor被集成到kubelet中。Heapster通过kubelet查看运行在集群中所有节点的资源使用情况。

下面在集群中的一个Node上查看kubelet监听端口:

1netstat -nltp | grep kubelet
2tcp        0      0 127.0.0.1:10248         0.0.0.0:*               LISTEN      2115/kubelet
3tcp6       0      0 :::10250                :::*                    LISTEN      2115/kubelet
4tcp6       0      0 :::10255                :::*                    LISTEN      2115/kubelet
5tcp6       0      0 :::4194                 :::*                    LISTEN      2115/kubelet

注意到4194端口就是cAdvisor,可以通过http://<NodeIp>:4194访问cAdvisor的Web界面。 cAdvisor同时提供了restful Api。Heapster会从每个Node的kubelet(实际上是kubelet集成的cAdvisor)上收集数据并汇总,保存到后端的存储中(如influxDB)。

Kubernetes Dashboard插件安装中安装heapster时,是以Pod的形式运行在Kubernetes中,后端存储采用的influxDB,可视化使用grafana。

heapster的RC定义如下:

 1apiVersion: v1
 2kind: ReplicationController
 3metadata:
 4  labels:
 5    k8s-app: heapster
 6    name: heapster
 7    version: v6
 8  name: heapster
 9  namespace: kube-system
10spec:
11  replicas: 1
12  selector:
13    k8s-app: heapster
14    version: v6
15  template:
16    metadata:
17      labels:
18        k8s-app: heapster
19        version: v6
20    spec:
21      containers:
22      - name: heapster
23        image: kubernetes/heapster:canary
24        imagePullPolicy: IfNotPresent
25        command:
26        - /heapster
27        - --source=kubernetes:https://kubernetes.default
28        - --sink=influxdb:http://monitoring-influxdb:8086

heapster-controller.yaml文件中容器的命令行参数cmd中,--source=kubernetes:https://kubernetes.default指明了heapster的数据源,这里使用的是域名 kubernetes.default,实际上就是kube-apiserver。

1kubectl get svc | grep kubernetes
2kubernetes   10.96.0.1        <none>        443/TCP        8d

因为Heapster的source参数使用的域名,所以要求Kubernetes的DNS服务可用。

参考