Kubernetes监控之Heapster介绍

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
可观测可视化 Grafana 版,10个用户账号 1个月
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 什么是Heapster? Heapster是容器集群监控和性能分析工具,天然的支持Kubernetes和CoreOS。 Kubernetes有个出名的监控agent---cAdvisor。在每个kubernetes Node上都会运行cAdvisor,它会收集本机以及容器的监控数据(cpu,memory,filesystem,network,uptime)。

什么是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/cad...

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

框架图:

8d1b1f050fbeac5d50a4436cbb208aa7e6b64839

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

Heapster使用

这里主要介绍Heapster的API使用,及可获取的Metrics。
参考资料:
API文档: https://github.com/kubernetes...
Metrics: https://github.com/kubernetes...

API文档及可用Metrics在官方文档中都介绍的比较齐全。下面用几条测试命令来解释API使用:

# 获取cluster支持的metrics # curl -L http://<heapster-IP>:8082/api/v1/model/metrics # 列出Nodes支持的metrics # curl -L http://<heapster-IP>:8082/api/v1/model/nodes/metrics # 查看对应Pod的cpu使用率 # curl -L http://<heapster-IP>:8082/api/v1/model/namespaces/<namespace-name>/pods/<pod-name>/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://<InfluxDB-IP>: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://<K8S-IP>:8080?inClusterConfig=false\&useServiceAccount=false --sink=influxdb:http://<InfluxDB-IP>: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)。可以参考Here

本文转自SegmentFault-Kubernetes监控之Heapster介绍

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
3月前
|
Kubernetes 监控 Cloud Native
"解锁K8s新姿势!Cobra+Client-go强强联手,打造你的专属K8s监控神器,让资源优化与性能监控尽在掌握!"
【8月更文挑战第14天】在云原生领域,Kubernetes以出色的扩展性和定制化能力引领潮流。面对独特需求,自定义插件成为必要。本文通过Cobra与Client-go两大利器,打造一款监测特定标签Pods资源使用的K8s插件。Cobra简化CLI开发,Client-go则负责与K8s API交互。从初始化项目到实现查询逻辑,一步步引导你构建个性化工具,开启K8s集群智能化管理之旅。
53 2
|
3月前
|
Prometheus Kubernetes 监控
Kubernetes(K8S) 监控 Prometheus + Grafana
Kubernetes(K8S) 监控 Prometheus + Grafana
261 2
|
3月前
|
人工智能 运维 Kubernetes
智能化运维:KoPylot为k8S带来AI监控诊断
智能化运维:KoPylot为k8S带来AI监控诊断
|
2月前
|
运维 Kubernetes 监控
Loki+Promtail+Grafana监控K8s日志
综上,Loki+Promtail+Grafana 监控组合对于在 K8s 环境中优化日志管理至关重要,它不仅提供了强大且易于扩展的日志收集与汇总工具,还有可视化这些日志的能力。通过有效地使用这套工具,可以显著地提高对应用的运维监控能力和故障诊断效率。
305 0
|
3月前
|
Prometheus 监控 Kubernetes
在k8S中,状态码监控是怎么做的?
在k8S中,状态码监控是怎么做的?
|
3月前
|
Prometheus 监控 Kubernetes
在k8S中,blackbox主要是监控什么的?
在k8S中,blackbox主要是监控什么的?
|
3月前
|
Prometheus Kubernetes 监控
在k8S中,etcd是怎么监控的?
在k8S中,etcd是怎么监控的?
|
3月前
|
数据采集 监控 Kubernetes
在k8S中,kubelet监控Worker节点资源是使用什么组件来实现的?
在k8S中,kubelet监控Worker节点资源是使用什么组件来实现的?
|
5月前
|
Prometheus 监控 Kubernetes
一篇文章讲明白Kubernetes(k8s)部署Promehteus监控
一篇文章讲明白Kubernetes(k8s)部署Promehteus监控
234 0