近年来,Kubernetes作为众多公司云原生改造的首选容器化编排平台,越来越多的开发和运维工作都围绕Kubernetes展开,保证Kubernetes的稳定性和可用性是最基础的需求,而这其中最核心的就是如何有效地监控Kubernetes集群,保证整个集群的一个良好的可观察性。本期将为大家介绍Kubernetes的监控方案。
目前存在多套的Kubernetes监控方案,但实际实施起来可能会遇到很多问题,例如方案部署难、监控指标不准、没有合适的大盘、不知道哪些指标需要哪些不需要、数据太多很卡等等。其实这些问题的本质上还是因为Kubernetes的架构相对标准的虚拟机/物理机的方式要复杂很多,而面对复杂系统,就需要我们去做非常多的工作,例如:
SLS作为阿里可观测性数据引擎,具备可观测数据日志、指标、分布式链路追踪、事件等的一站式采集和存储。为了便于用户快速接入和监控业务系统,SLS提供了全栈监控的APP,将各类监控数据汇总到一个实例中进行统一的管理和监控。全栈监控基于SLS的监控数据采集、存储、分析、可视化、告警、AIOps等能力构建,详细功能如下:
SLS全栈监控已经内置了对于Kubernetes监控的支持,并且解决了非常多的Kubernetes监控的痛点需求,例如:
SLS全栈监控的Kubernetes部署方式相对比较简单,只需要按照接入页面中的提示,安装AliyunLogConfig自定义资源和监控组件,两个安装步骤只需要执行两个命令即可。
Kubernetes监控部署完毕后就会自动部署采集Agent并采集监控数据到云端,默认采集的监控数据有:
数据采集到云端后,SLS全栈监控会默认提供一系列的Dashboard模板,包括集群级、应用级(Deployment、StatefullSet、DaemonSet等)、Pod级各类指标,绝大部分场景的监控只需要使用内置的Dashboard大盘即可,内置大盘主要有:
仪表盘 |
说明 |
资源总览 |
用于实时可视化展示主机配置信息和指标信息的总体情况,包括CPU核数、磁盘总空间、CPU平均使用率、内存平均使用率等。 |
主机列表 |
用于实时可视化展示每台主机的配置信息和指标信息,包括CPU核数、内存、CPU使用率、内存使用率等。 |
热点分析 |
用于实时可视化热点机器的CPU、内存等资源使用情况,包括CPU热点指标分布、内存热点指标分布、Top CPU使用率、Top 内存使用率等。 |
单机指标-简 |
用于实时可视化展示主机的CPU、内存等资源的使用趋势,包括CPU使用率、磁盘空间使用率、内存使用率等。 |
单机指标-详 |
用于实时可视化展示主机的CPU、内存等资源处于不同状态的使用趋势,包括CPU(处于Total、System、User、IOWait状态的CPU使用趋势)、内存(处于Total、Availableused、Used状态的内存使用趋势)等。 |
资源总览 |
用于实时可视化展示Kubernetes中资源的使用情况,包括Pod、Host、Service、Deployment等。 |
水位监控 |
用于实时可视化展示Kubernetes中资源的水位情况,包括Pod运行数、CPU总数、文件系统使用量等。 |
运行时监控 |
用于实时可视化展示Kubernetes中处于运行状态的资源信息,包括Deployment运行数量、Daemonset运行数量等。 |
核心组件监控 |
用于实时可视化展示Kubernetes中核心组件的相关数据,包括ETCD对象数、ETCD请求QPS等。 |
Node列表 |
用于实时可视化展示Node的整体情况以及每个Node的配置信息和指标信息,包括Node总数、运行中的Pod总数等。 |
Node指标 |
用于实时可视化展示Node的指标信息,包括可申请Pod数量、CPU使用率等。 |
Pod列表 |
用于实时可视化展示Pod的整体情况以及每个Pod的配置信息和指标信息,包括可申请的Pod总数等。 |
Pod指标 |
用于实时可视化展示Pod的指标信息,包括Pod基本信息、容器基础信息等。 |
Deployment列表 |
用于实时可视化展示每个Deployment的配置信息和指标信息,包括Deployment所属命名空间、集群等。 |
Deployment指标 |
用于实时可视化展示Deployment的指标信息,包括CPU Limit使用率、内存Limit使用率等。 |
StatefulSet列表 |
用于实时可视化展示每个StatefulSet的配置信息和指标信息,包括StatefulSet所属命名空间、集群等。 |
StatefulSet指标 |
用于实时可视化展示StatefulSet的指标信息,包括CPU Limit使用率、内存Limit使用率等。 |
DaemonSet列表 |
用于实时可视化展示每个DaemonSet的配置信息和指标信息,包括DaemonSet所属命名空间、集群等。 |
DaemonSet指标 |
用于实时可视化展示DaemonSet的指标信息,包括CPU Limit使用率、内存Limit使用率等。 |
在K8s迭代了数十个版本后,集群本身的稳定性一般不需要关心,绝大部分情况下,都是使用的不合理影响了集群的稳定性。通常情况下,集群级别监控只需要关注集群中运行的应用数量变化以及相关的水位变化。这里最常见的是使用《资源总览》、《水位监控》和《运行时监控》。其中
同样,K8s的系统组件监控,通常只需要关心其中使用部分的不合理即可,因此只需要查看其中APIServer和ETCD的部分,防止有非常多的额外资源和访问导致APIServer或ETCD请求过慢。
全栈监控默认提供了Node、Pod、Deployment、DaemonSet、StatefullSet的基础指标监控,所有这些资源都包括列表的Overview指标以及详情的Detail指标,而且各个相关联的资源还支持跳转关系,例如:所有的列表支持跳转到详情的Detail指标、Node中支持关联运行的Pod指标、Deployment/DaemonSet/StatefullSet支持跳转关联Pod。
热点监控主要辅助我们快速找到“离群”的机器,防止因为部分机器成为热点,导致该机器上应用响应变慢,以至于影响整个集群的性能。在找到热点机器后,还可以通过改机器的IP,跳转到对应Node的详细指标中,查看热点具体是由该节点上哪个Pod引起。