什么是Heapster?

Heapster是容器集群监控和性能分析工具,天然的支持Kubernetes和CoreOS,Kubernetes有个出名的监控agent—cAdvisor。在每个kubernetes Node上都会运行cAdvisor,它会收集本机以及容器的监控数据(cpu,memory,filesystem,network,uptime),在较新的版本中,K8S已经将cAdvisor功能集成到kubelet组件中。每个Node节点可以直接进行web访问。

cAdvisor web界面访问: http://< Node-IP >:4194

cAdvisor也提供Restful API: https://github.com/google/cadv … pi.md

Heapster是一个收集者,将每个Node上的cAdvisor的数据进行汇总,然后导到第三方工具(如InfluxDB)。

框架图

Heapster首先从K8S Master获取集群中所有Node的信息,然后通过这些Node上的kubelet获取有用数据,而kubelet本身的数据则是从cAdvisor得到。所有获取到的数据都被推到Heapster配置的后端存储中,并还支持数据的可视化。现在后端存储 + 可视化的方法,如InfluxDB + grafana。

Heapster使用

这里主要介绍Heapster的API使用,及可获取的Metrics;API文档及可用Metrics在官方文档中都介绍的比较齐全。下面用几条测试命令来解释API使用,获取支持的metrics

curl -L http://:8082/api/v1/model/metrics

列出所有的Nodes支持的metrics

curl -L http://:8082/api/v1/model/nodes/metrics

查看对应Pod的cpu使用率

curl -L http://:8082/api/v1/model/namespaces//pods//metrics/cpu-usage
Heapster系统部署

我们采用Heapster以InfluxDB作为数据存储后端,再配合Grafana的前端进行数据可视化的系统监控方案,进行部署。

镜像制作:
Heapster的版本:v0.19.0 没有采用最新的Heapster版本,是因为我们使用的Kubernets版本为较旧的v1.0.3,较新的Heapster版本不兼容该K8S版本。 Heapster镜像:
进入heapster-0.19.0//deploy/docker,使用build.sh进行镜像制作。 该脚本会依赖go环境进行heapster源码编译,所以需要提前安装go环境(go和godep的安装)。 InfluxDB和Grafana镜像:
这两个镜像的Dockerfile分别在根目录下的对应文件中,只需查看Makefile进行对应的命令编译制作镜像即可。Dockerfile会依赖一些基础镜像,最好提前下载好。
容器的运行

Heapster容器的运行可以依赖Kubernetes进行部署,也可以单独使用docker命令进行部署。

Kubernetes部署

直接依赖heapster-0.19.0/deploy/kube-config/influxdb/目录下的yaml文件,使用kubectl create -f heapster-0.19.0/deploy/kube-config/influxdb/命令进行部署。

我们没有采用该方式,是考虑到如果K8S和监控系统相互依赖,会导致K8S异常之后,存在监控系统无法使用的隐患。

但是直接使用单独的容器进行部署,也需要考虑到监控容器异常退出了,谁来维护重启?

需要进行权衡?

还需要注意一点:Heapster会使用内存进行数据缓存,容易撑爆内存,导致容器OOM

Docker命令部署

使用docker命令进行部署的话,需要传入各种参数,该参数可以参考kubernetes部署使用到的yaml文件。

具体命令如下:

InfluxDB

docker run -p 8083:8083 -p 8086:8086 --net=host -v /data heapster_influxdb:canary
注:data是数据存储目录,需要考虑数据可持久化,并且能保证容器重启不影响数据。

Grafana
docker run -p 3000:3000 --net=host -e INFLUXDB_SERVICE_URL=http://:8086 -e GF_AUTH_BASIC_ENABLED="false" -e GF_AUTH_ANONYMOUS_ENABLED="true" -e GF_AUTH_ANONYMOUS_ORG_ROLE="Admin" -e GF_SERVER_ROOT_URL=/ -v /var heapster_grafana:canary
Heapster
docker run -it -p 8082:8082 --net=host heapster:canary --source=kubernetes:http://:8080?inClusterConfig=false\&useServiceAccount=false --sink=influxdb:http://:8086

Heapster命令参考相对较为重要,可以参考官方文档,具体如下:

–source: 指定数据获取源。这里我们指定kube-apiserver即可。
后缀参数:
inClusterConfig:
kubeletPort: 指定kubelet的使用端口,默认10255
kubeletHttps: 是否使用https去连接kubelets(默认:false)
apiVersion: 指定K8S的apiversion
insecure: 是否使用安全证书(默认:false)
auth: 安全认证
useServiceAccount: 是否使用K8S的安全令牌 –sink: 指定后端数据存储。这里指定influxdb数据库。
后缀参数:
user: InfluxDB用户
pw: InfluxDB密码
db: 数据库名
secure: 安全连接到InfluxDB(默认:false)
withfields: 使用InfluxDB fields(默认:false)。

介绍Kubernetes监控Heapster的更多相关文章

  1. kubernetes监控-Heapster+InfluxDB+Grafana(十五)

    cAdvisor+InfluxDB+Grafana cAdvisor:是谷歌开源的一个容器监控工具,采集主机上容器相关的性能指标数据.比如CPU.内存.网络.文件系统等. Heapster是谷歌开源的 ...

  2. Kubernetes监控:部署Heapster、InfluxDB和Grafana

    本节内容: Kubernetes 监控方案 Heapster.InfluxDB和Grafana介绍 安装配置Heapster.InfluxDB和Grafana 访问 grafana 访问 influx ...

  3. Kubernetes 监控

    1. Weave Scope Weave Scope 容器地图 创建 Kubernetes 集群并部署容器化应用只是第一步.一旦集群运行起来,我们需要确保一起正常,所有必要组件就位并各司其职,有足够的 ...

  4. kubernetes监控(12)

    一.Weave Scope 1. weave scope 容器地图 创建 Kubernetes 集群并部署容器化应用只是第一步.一旦集群运行起来,我们需要确保一起正常,所有必要组件就位并各司其职,有足 ...

  5. 云原生应用 Kubernetes 监控与弹性实践

    前言 云原生应用的设计理念已经被越来越多的开发者接受与认可,而Kubernetes做为云原生的标准接口实现,已经成为了整个stack的中心,云服务的能力可以通过Cloud Provider.CRD C ...

  6. kubernetes 监控(14)

    一.Weave Scope 容器地图 创建 Kubernetes 集群并部署容器化应用只是第一步.一旦集群运行起来,我们需要确保一切正常,所有必要组件就位并各司其职,有足够的资源满足应用的需求.Kub ...

  7. Kubernetes监控实践

    一.Kubernetes介绍 Kubernetes(K8s)是一个开源平台,能够有效简化应用管理.应用部署和应用扩展环节的手动操作流程,让用户更加灵活地部署管理云端应用. 作为可扩展的容错平台,K8s ...

  8. 【译】Kubernetes监控实践(2):可行监控方案之Prometheus和Sensu

    本文介绍两个可行的K8s监控方案:Prometheus和Sensu.两个方案都能全面提供系统级的监控数据,帮助开发人员跟踪K8s关键组件的性能.定位故障.接收预警. 拓展阅读:Kubernetes监控 ...

  9. Kubernetes 监控方案之 Prometheus Operator(十九)

    目录 一.Prometheus 介绍 1.1.Prometheus 架构 1.2.Prometheus Operator 架构 二.Helm 安装部署 2.1.Helm 客户端安装 2.2.Tille ...

随机推荐

  1. 30、进程的基础理论,并发(multiprocessing模块)

    我们之前基于tcp所做的通信都只能一个一个链接只有关闭当前链接时才能去链接下一个通信,这显然与现实情况不合.今天我们将来学一个新的概念进程,来做一个python多进程的并发编程.还会贴一个用json序 ...

  2. HTML5_音视频标签 <audio> 和 <video>

    HTML5_音视频标签 <audio> 和 <video> audio 和 video 都是 inline行内元素 如果浏览器支持,则不显示标签文本 IE8 不支持 audio ...

  3. Node.js_express_浏览器存储技术 Cookie(服务器将少量数据交于浏览器存储管理)

    浏览器存储技术 Cookie 服务器将少量数据交于浏览器存储管理 解决 http 无状态协议的问题(无法区分多次请求是否发送自同一客户端) 一个网页一般最多 20个的 cookie,每个 cookie ...

  4. priority_queue和sort应用

    #include"iostream" #include"String" #include"stdio.h" #include "s ...

  5. scrapy模拟登录

    对于scrapy来说,也是有两个方法模拟登陆: 直接携带cookie 找到发送post请求的url地址,带上信息,发送请求 scrapy模拟登陆之携带cookie 应用场景: cookie过期时间很长 ...

  6. Android多种样式的进度条

    原创 2016年04月26日 16:46:35 标签: android / clip / 进度条 / 8473 编辑 删除 ---- The mark of the immature man is t ...

  7. SPFA找最大比例环

    SPFA找最大比例环 ans=Σ点权/Σ边权 所以 可以变式为 Σ边权*ans-Σ点权=0 要找出最大的ans 可以二分 边权值变为 目的地点权-ans*边权 检查是否有负环 有则可以更优 #incl ...

  8. DevPress GridControl的使用

      XtraGrid使用方法 XtraGrid的关键类就是:GridControl和GridView.GridControl本身不显示数据,数据都是显示在GridView/CardView/XXXXV ...

  9. eclipse maven工程打包失败

    报错如下: Maven install失败 Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:comp ...

  10. js canvas游戏初级demo-上下左右移动

    大概流程就是监听状态变化擦除画布重绘 由于js监听时间变化的函数addEventListener只能达到每秒触发20次左右,也就是每秒20帧,看起来有点卡卡的 所以用定时器搞到每秒30帧 按上下左右键 ...