简单、有效、全面的Kubernetes监控方案

本文涉及的产品
对象存储 OSS,20GB 3个月
文件存储 NAS,50GB 3个月
阿里云盘企业版 CDE,企业版用户数5人 500GB空间
简介: 近年来,Kubernetes作为众多公司云原生改造的首选容器化编排平台,越来越多的开发和运维工作都围绕Kubernetes展开,保证Kubernetes的稳定性和可用性是最基础的需求,而这其中最核心的就是如何有效地监控Kubernetes集群,保证整个集群的一个良好的可观察性。本期将为大家介绍Kubernetes的监控方案。

前言

近年来,Kubernetes作为众多公司云原生改造的首选容器化编排平台,越来越多的开发和运维工作都围绕Kubernetes展开,保证Kubernetes的稳定性和可用性是最基础的需求,而这其中最核心的就是如何有效地监控Kubernetes集群,保证整个集群的一个良好的可观察性。本期将为大家介绍Kubernetes的监控方案。

监控方案目标

目前存在多套的Kubernetes监控方案,但实际实施起来可能会遇到很多问题,例如方案部署难、监控指标不准、没有合适的大盘、不知道哪些指标需要哪些不需要、数据太多很卡等等。其实这些问题的本质上还是因为Kubernetes的架构相对标准的虚拟机/物理机的方式要复杂很多,而面对复杂系统,就需要我们去做非常多的工作,例如:

  1. 明确监控目标:K8s内部的各类系统组件:APIServer、ETCD、Scheduler、Controller Manager、Kubelet等;K8s底层,例如虚拟机、物理机的监控;K8s之上的业务/出口等
  2. 相关监控数据采集:例如部署kube-state-metrics采集K8s内资源对象的数据;通过kubelet暴露的prometheus端口拉取运行的Pod、容器指标;通过service端口采集APIServer、ETCD、Scheduler等组件的指标
  3. 后端建设:搭建数据存储、可视化、告警等后端服务
  4. 内容建设:配置监控大盘、问题排查经验、每个组件监控的黄金指标、告警模板等
  5. 方案稳定性建设:包括数据采集、存储、可视化、告警等服务的质量监控和维护

SLS全栈监控方案

SLS作为阿里可观测性数据引擎,具备可观测数据日志、指标、分布式链路追踪、事件等的一站式采集和存储。为了便于用户快速接入和监控业务系统,SLS提供了全栈监控的APP,将各类监控数据汇总到一个实例中进行统一的管理和监控。全栈监控基于SLS的监控数据采集、存储、分析、可视化、告警、AIOps等能力构建,详细功能如下:

  • 实时监控各类系统,包括主机监控、Kubernetes监控、数据库监控、中间件监控等。
  • 支持ECS、K8s一键安装,支持图形化的监控配置管理,无需登录主机配置采集监控项。
  • 运维老司机多年经验的报表总结,包括资源总览、水位监控、热点分析、详细指标等数十个报表。
  • 支持自定义的分析,支持包括PromQL、SQL92等多种分析语法。
  • 支持对接AIOps指标巡检,利用机器学习技术自动发现异常指标。
  • 支持自定义告警配置,告警通知直接对接消息中心、短信、邮件、语音(电话)、钉钉,并支持对接自定义WebHook。

Kubernetes监控最佳实践

SLS全栈监控已经内置了对于Kubernetes监控的支持,并且解决了非常多的Kubernetes监控的痛点需求,例如:

  1. 部署简单,只需要一条命令就可以部署完整的Kubernetes监控方案
  2. 使用简单,内置了多种Kubernetes以及上下游相关的监控报表,开箱即用
  3. 运维简单,所有的监控数据、报表、告警等后端都是云化,只需要按量付费即可,无需去运维监控的实例
  4. 覆盖面全,监控范围包括Kubernetes中的各种内置组件,也包括相关联的主机、中间件、数据库等监控

部署

SLS全栈监控的Kubernetes部署方式相对比较简单,只需要按照接入页面中的提示,安装AliyunLogConfig自定义资源和监控组件,两个安装步骤只需要执行两个命令即可。

使用

Kubernetes监控部署完毕后就会自动部署采集Agent并采集监控数据到云端,默认采集的监控数据有:

  1. Kubernetes系统的元数据信息,例如节点、Pod、Deployment等配置信息
  2. Kubernetes系统组件的监控数据,包括APIServer、ETCD、Kubelet等
  3. Kubernetes上运行的Deployment、StatefullSet、DaemonSet、Pod、容器指标信息
  4. 节点的基础指标,例如节点CPU、内存、网络、磁盘IO等

数据采集到云端后,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使用率等。

1-集群级监控实践

在K8s迭代了数十个版本后,集群本身的稳定性一般不需要关心,绝大部分情况下,都是使用的不合理影响了集群的稳定性。通常情况下,集群级别监控只需要关注集群中运行的应用数量变化以及相关的水位变化。这里最常见的是使用《资源总览》、《水位监控》和《运行时监控》。其中

  1. 资源总览中能够查看每个资源的总数以及和前一天相比的变化情况,用来监控是否有一些快速变化的资源出现
  2. 水位监控中主要显示集群中能够申请的Pod、CPU、内存资源以及当前的申请率信息,防止到达水位上限
  3. 运行时监控中主要显示集群中的Deployment、StatefullSet、Pod、Container的变化情况

2-系统组件监控实践

同样,K8s的系统组件监控,通常只需要关心其中使用部分的不合理即可,因此只需要查看其中APIServer和ETCD的部分,防止有非常多的额外资源和访问导致APIServer或ETCD请求过慢。

3-应用基础指标监控

全栈监控默认提供了Node、Pod、Deployment、DaemonSet、StatefullSet的基础指标监控,所有这些资源都包括列表的Overview指标以及详情的Detail指标,而且各个相关联的资源还支持跳转关系,例如:所有的列表支持跳转到详情的Detail指标、Node中支持关联运行的Pod指标、Deployment/DaemonSet/StatefullSet支持跳转关联Pod。

4-热点监控

热点监控主要辅助我们快速找到“离群”的机器,防止因为部分机器成为热点,导致该机器上应用响应变慢,以至于影响整个集群的性能。在找到热点机器后,还可以通过改机器的IP,跳转到对应Node的详细指标中,查看热点具体是由该节点上哪个Pod引起。

小结

本文主要关注在Kubernetes的监控方案上(如何接入可参考《全栈监控说明》),从监控的问题发现到定位其实还有很多的工作需要做,还需要更多的可观测性数据来支撑,后续我们会介绍,如何利用多种可观测数据来协助排查和定位Kubernetes中的各类问题,敬请期待。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
3月前
|
Kubernetes Cloud Native 网络协议
Kubernetes 高可用性与灾难恢复方案
【8月更文第29天】随着业务的不断增长,保持应用程序的高可用性和灾难恢复能力变得越来越重要。Kubernetes 作为现代云原生应用的主要平台,提供了丰富的工具和方法来保证应用的高可用性以及快速恢复的能力。本文将详细介绍如何利用 Kubernetes 的功能来构建高可用性的系统,并实施有效的灾难恢复策略。
215 1
|
2月前
|
Kubernetes API Docker
跟着iLogtail学习容器运行时与K8s下日志采集方案
iLogtail 作为开源可观测数据采集器,对 Kubernetes 环境下日志采集有着非常好的支持,本文跟随 iLogtail 的脚步,了解容器运行时与 K8s 下日志数据采集原理。
|
1月前
|
Kubernetes 监控 测试技术
k8s学习--OpenKruise详细解释以及原地升级及全链路灰度发布方案
k8s学习--OpenKruise详细解释以及原地升级及全链路灰度发布方案
|
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
248 2
|
2月前
|
运维 Kubernetes 监控
Loki+Promtail+Grafana监控K8s日志
综上,Loki+Promtail+Grafana 监控组合对于在 K8s 环境中优化日志管理至关重要,它不仅提供了强大且易于扩展的日志收集与汇总工具,还有可视化这些日志的能力。通过有效地使用这套工具,可以显著地提高对应用的运维监控能力和故障诊断效率。
288 0
|
3月前
|
人工智能 运维 Kubernetes
智能化运维:KoPylot为k8S带来AI监控诊断
智能化运维:KoPylot为k8S带来AI监控诊断
|
3月前
|
Kubernetes 文件存储 容器
【Azure K8S | AKS】在中国区AKS上遇见ImagePullBackOff时的替代方案
【Azure K8S | AKS】在中国区AKS上遇见ImagePullBackOff时的替代方案
|
3月前
|
存储 Prometheus Kubernetes
在K8S中,如何收集K8S日志?有哪些方案?
在K8S中,如何收集K8S日志?有哪些方案?
|
3月前
|
Prometheus 监控 Kubernetes
在k8S中,状态码监控是怎么做的?
在k8S中,状态码监控是怎么做的?