- 1. 概述
- 1.1. cAdvisor
- 1.2. Heapster
- 1.3. InfluxDB
- 1.4. Grafana
- 1.5. 总体架构图
- 2. 部署与使用
- 2.1. cAdvisor
- 2.2. Service
- 2.2.1. heapster-service
- 2.2.2. influxdb-service
- 2.2.3. grafana-service
- 2.2.4. 创建service
- 2.3. ReplicationController
- 2.3.1. influxdb-grafana-controller
- 2.3.2. heapster-controller
- 2.3.3. 创建ReplicationController
- 3. 查看界面及数据
- 3.1. InfluxDB
- 3.2. Grafana
- 4. 容器化部署
- 4.1. 拉取镜像
- 4.2. 运行容器
- 4.2.1. influxdb
- 4.2.2. cadvisor
- 4.2.3. grafana
- 4.2.4. heapster
- 4.3. 访问
title: “[Kubernetes] Kubernetes集群监控”
catalog: true
date: 2017-08-13 10:50:57
type: “categories”
subtitle:
header-img:
tags:
- Kubernetes
catagories: - Kubernetes
1. 概述
1.1. cAdvisor
cAdvisor对Node机器上的资源及容器进行实时监控和性能数据采集,包括CPU使用情况、内存使用情况、网络吞吐量及文件系统使用情况,cAdvisor集成在Kubelet中,当kubelet启动时会自动启动cAdvisor,即一个cAdvisor仅对一台Node机器进行监控。kubelet的启动参数—cadvisor-port可以定义cAdvisor对外提供服务的端口,默认为4194。可以通过浏览器Node_IP:port访问。项目主页:http://github.com/google/cadvisor。
1.2. Heapster
是对集群中的各个Node、Pod的资源使用数据进行采集,通过访问每个Node上Kubelet的API,再通过Kubelet调用cAdvisor的API来采集该节点上所有容器的性能数据。由Heapster进行数据汇聚,保存到后端存储系统中,例如InfluxDB,Google Cloud Logging等。项目主页为:https://github.com/kubernetes/heapster。
1.3. InfluxDB
是分布式时序数据库(每条记录带有时间戳属性),主要用于实时数据采集、事件跟踪记录、存储时间图表、原始数据等。提供REST API用于数据的存储和查询。项目主页为http://InfluxDB.com。
1.4. Grafana
通过Dashboard将InfluxDB的时序数据展现成图表形式,便于查看集群运行状态。项目主页为http://Grafana.org。
1.5. 总体架构图

其中当前Kubernetes中,Heapster、InfluxDB、Grafana均以Pod的形式启动和运行。Heapster与Master需配置安全连接。
2. 部署与使用
2.1. cAdvisor
kubelet的启动参数—cadvisor-port可以定义cAdvisor对外提供服务的端口,默认为4194。可以通过浏览器Node_IP:port访问。也提供了REST API供客户端远程调用,API返回的格式为JSON,可以采用URL访问:http://`hostname`:`port`/api/`version`/`request`/
例如:http://14.152.49.100:4194/api/v1.3/machine 获取主机信息。
2.2. Service
2.2.1. heapster-service
heapster-service.yaml
apiVersion:v1kind:Servicemetadata:label:kubenetes.io/cluster-service:"true"kubernetes.io/name:Heapstername:heapsternamespace:kube-systemspec:ports:- port:80targetPort:8082selector:k8s-app:heapster
2.2.2. influxdb-service
influxdb-service.yaml
apiVersion:v1kind:Servicemetadata:label:nullname:monitoring-InfluxDBnamespace:kube-systemspec:type:Nodeportports:- name:httpport:80targetPort:8083- name:apiport:8086targetPort:8086Nodeport:8086selector:name:influxGrafana
2.2.3. grafana-service
grafana-service.yaml
apiVersion:v1kind:Servicemetadata:label:kubenetes.io/cluster-service:"true"kubernetes.io/name:monitoring-Grafananame:monitoring-Grafananamespace:kube-systemspec:type:Nodeportports:port:80targetPort:8080Nodeport:8085selector:name:influxGrafana
使用type=NodePort将InfluxDB和Grafana暴露在Node的端口上,以便通过浏览器进行访问。
2.2.4. 创建service
kubectl create -f heapster-service.yamlkubectl create -f InfluxDB-service.yamlkubectl create -f Grafana-service.yaml
2.3. ReplicationController
2.3.1. influxdb-grafana-controller
influxdb-grafana-controller-v3.yaml
apiVersion:v1kind:ReplicationControllermetadata:name:monitoring-influxdb-grafana-v3namespace:kube-systemlabels:k8s-app:influxGrafanaversion:v3kubernetes.io/cluster-service:"truespec:replicas:1selector:k8s-app:influxGrafanaversion:v3template:metadata:labels:k8s-app:influxGrafanaversion:v3kubernetes.io/cluster-service:"truespec:containers:- image:gcr.io/google_containers/heapster_influxdb:v0.5name:influxdbresources:limits:cpu:100mmemory:500Mirequests:cpu:100mmemory:500Miports:- containerPort:8083- containerPort:8086volumeMounts:-name:influxdb-persistent-storagemountPath:/data- image:grc.io/google_containers/heapster_grafana:v2.6.0-2name:grafanaresources:limits:cpu:100mmemory:100Mirequests:cpu:100mmemory:100Mienv:- name:INFLUXDB_SERVICE_URLvalue:http://monitoring-influxdb:8086- name:GF_AUTH_BASIC_ENABLEDvalue:"false"- name:GF_AUTH_ANONYMOUS_ENABLEDvalue:"true"- name:GF_AUTH_ANONYMOUS_ORG_ROLEvalue:Admin- name:GF_SERVER_ROOT_URLvalue:/api/v1/proxy/namespace/kube-system/services/monitoring-grafana/volumeMounts:- name:grafana-persistent-storagemountPath:/varvolumes:- name:influxdb-persistent-storageemptyDir{}- name:grafana-persistent-storageemptyDir{}
2.3.2. heapster-controller
heapster-controller.yaml
apiVersion:v1kind:ReplicationControllermetadata:labels:k8s-app:heapstername:heapsterversion:v6name:heapsternamespace:kube-systemspec:replicas:1selector:name:heapsterk8s-app:heapsterversion:v6template:metadata:labels:k8s-app:heapsterversion:v6spec:containers:- image:gcr.io/google_containers/heapster:v0.17.0name:heapstercommand:- /heapster- --source=kubernetes:http://192.168.1.128:8080?inClusterConfig=flase&kubeletHttps=true&useServiceAccount=true&auth=- --sink=InfluxDB:http://monitoring-InfluxDB:8086
Heapster设置启动参数说明:
1、–source
配置监控来源,本例中表示从k8s-Master获取各个Node的信息。在URL的参数部分,修改kubeletHttps、inClusterConfig、useServiceAccount的值。
2、–sink
配置后端的存储系统,本例中使用InfluxDB。URL中主机名的地址是InfluxDB的Service名字,需要DNS服务正常工作,如果没有配置DNS服务可使用Service的ClusterIP地址。
2.3.3. 创建ReplicationController
kubelet create -f InfluxDB-Grafana-controller.yamlkubelet create -f heapster-controller.yaml
3. 查看界面及数据
3.1. InfluxDB
访问任意一台Node机器的30083端口。
3.2. Grafana
访问任意一台Node机器的30080端口。
4. 容器化部署
4.1. 拉取镜像
docker pull influxdb:latestdocker pull cadvisor:latestdocker pull grafana:latestdocker pull heapster:latest
4.2. 运行容器
4.2.1. influxdb
#influxdbdocker run -d -p 8083:8083 -p 8086:8086 --expose 8090 --expose 8099 --volume=/opt/data/influxdb:/data --name influxsrv influxdb:latest
4.2.2. cadvisor
#cadvisordocker run --volume=/:/rootfs:ro --volume=/var/run:/var/run:rw --volume=/sys:/sys:ro --volume=/var/lib/docker/:/var/lib/docker:ro --publish=8080:8080 --detach=true --link influxsrv:influxsrv --name=cadvisor cadvisor:latest -storage_driver=influxdb -storage_driver_db=cadvisor -storage_driver_host=influxsrv:8086
4.2.3. grafana
#grafanadocker run -d -p 3000:3000 -e INFLUXDB_HOST=influxsrv -e INFLUXDB_PORT=8086 -e INFLUXDB_NAME=cadvisor -e INFLUXDB_USER=root -e INFLUXDB_PASS=root --link influxsrv:influxsrv --name grafana grafana:latest
4.2.4. heapster
docker run -d -p 8082:8082 --net=host heapster:canary --source=kubernetes:http://`k8s-server-ip`:8080?inClusterConfig=false/&useServiceAccount=false --sink=influxdb:http://`influxdb-ip`:8086
4.3. 访问
在浏览器输入IP:PORT
