在白盒监控层面关注:
- 基础设施层(Node):为整个集群和应用提供运行时资源,需要通过各节点的kubelet获取节点的基本状态,同时通过在节点上部署Node Exporter获取节点的资源使用情况;
- 容器基础设施(Container):为应用提供运行时环境,Kubelet内置了对cAdvisor的支持,用户可以直接通过Kubelet组件获取给节点上容器相关监控指标;
- 用户应用(Pod):Pod中会包含一组容器,它们一起工作,并且对外提供一个(或者一组)功能。如果用户部署的应用程序内置了对Prometheus的支持,那么我们还应该采集这些Pod暴露的监控指标;
- Kubernetes组件:获取并监控Kubernetes核心组件的运行状态,确保平台自身的稳定运行。
在黑盒监控层面关注:
- 内部服务负载均衡(Service):在集群内,通过Service在集群暴露应用功能,集群内应用和应用之间访问时提供内部的负载均衡。通过Balckbox Exporter探测Service的可用性,确保当Service不可用时能够快速得到告警通知;
- 外部访问入口(Ingress):通过Ingress提供集群外的访问入口,从而可以使外部客户端能够访问到部署在Kubernetes集群内的服务。因此也需要通过Blackbox Exporter对Ingress的可用性进行探测,确保外部用户能够正常访问集群内的功能;
k8s监控方案
cadvisor+heapster+influxdb+grafana
缺点:只能支持监控容器资源,无法支持业务监控,扩展性较差
cadvisor/exporter+prometheus+grafana
总体流程: 数据采集–>汇总–>处理–>存储–>展示
容器的监控
- prometheus使用cadvisor采集容器监控指标,cadvisor集成在k8s的 kubelet 中-通过prometheus进行存储,使用grafana进行展现
- node的监控 通过 node_pxporter 采集当前主机的资源-通过prometheus进程存储,使用grafana进行展现
- master的监控 通过 kube-state-metrics 插件从k8s中获取到apiserver的相关数据,通过prometheus进程存储-使用grafana进行展现
kubernetes监控指标
kubernetes自身的监控
- node的资源利用率
node节点上的cpu、内存、硬盘、链接 - node的数量
node数量与资源利用率、业务负载的比例情况、成本、资源扩展的评估
pod的数量 当负载到一定程度时,node与pod的数量,评估负载到哪个阶段,大约需要多少服务器,每个pod的资源占用率如何,进行整体评估 - 资源对象状态
k8s在运行过程中,会创建很多pod,控制器,任务,这些内容都是由k8s中的资源对象进行维护,需要进行对资源对象的监控,获取资源对象的状态 - pod监控
每个项目中pod的数量-正常的pod数量,有问题的pod数量
容器资源利用率-统计当前pod的资源利用率,统计pod中的容器资源利用率,cpu、网络、内存评估
应用程序-项目中的程序的自身情况,如并发,请求响应,项目用户数量,订单数等