前言:本文主要介绍了 Kubernetes 的监控场景、监控选型,以及使用腾讯云 Prometheus 监控 Kubernetes 的完整路径。
谢莹莹
腾讯云可观测平台产品经理,硕士毕业于哈尔滨工业大学。目前主要负责腾讯云 Prometheus 监控服务和 Grafana 服务的产品工作,对 to B 商业化产品领域有着丰富的经验。
Kubernetes 简介
项目起源
Kubernetes 是谷歌开源的容器集群管理系统,是 Google 多年来大规模容器管理技术 Borg 的开源版本。Kubernetes 发展非常迅速,已经成为容器编排领域的领导者。
Kubernetes 主要功能包括:
Prometheus 项目与 Kubernetes 项目一样,也来自于 Google 的 Borg 体系,它的原型系统 BorgMon 是一个几乎与 Borg 同时诞生的内部监控系统。Prometheus 项目发展至今,已经全面接管了 Kubernetes 项目的整套监控体系。
核心组件
Kubernetes 主要由以下核心组件组成:
基本概念
Container(容器)是一种便携式、轻量级的操作系统级虚拟化技术。它使用 namespace 隔离不同的软件运行环境,并通过镜像自包含软件的运行环境,从而使得容器可以很方便的在任何地方运行。
Kubernetes 使用 Pod 来管理容器,每个 Pod 可以包含一个或多个紧密关联的容器。Pod 是一组紧密关联的容器集合,它们共享 IPC 和 Network namespace,是 Kubernetes 调度的基本单位。Pod 内的多个容器共享网络和文件系统,可以通过进程间通信和文件共享这种简单高效的方式组合完成服务。
Node
Node 是 Pod 真正运行的主机,可以是物理机,也可以是虚拟机。为了管理 Pod,每个 Node 节点上至少要运行 container runtime(比如 docker 或者 rkt)、kubelet 和 kube-proxy 服务。
Namespace 是对一组资源和对象的抽象集合,比如可以用来将系统内部的对象划分为不同的项目组或用户组。常见的 pods, services, replication controllers 和 deployments 等都是属于某一个 namespace 的(默认是 default),而 node, persistentVolumes 等则不属于任何 namespace。
Service 是应用服务的抽象,通过 labels 为应用提供负载均衡和服务发现。匹配 labels 的 Pod IP 和端口列表组成 endpoints,由 kube-proxy 负责将服务 IP 负载均衡到这些 endpoints 上。
每个 Service 都会自动分配一个 cluster IP(仅在集群内部可访问的虚拟地址)和 DNS 名,其他容器可以通过该地址或 DNS 来访问服务,而不需要了解后端容器的运行。
Label 是识别 Kubernetes 对象的标签,以 key/value 的方式附加到对象上(key 最长不能超过 63 字节,value 可以为空,也可以是不超过 253 字节的字符串)。
Annotations 是 key/value 形式附加于对象的注解。不同于 Labels 用于标志和选择对象,Annotations 则是用来记录一些附加信息,用来辅助应用部署、安全策略以及调度策略等。比如 deployment 使用 annotations 来记录 rolling update 的状态。
Kubernetes 监控指标
指标分类
通过 Node Exporter 暴露指标供 Prometheus 采集。一般来说,Node Exporter 会以 DaemonSet 的方式运行在宿主机上。Node Exporter 暴露的指标数据, 包括节点的负载(Load)、CPU 、内存、磁盘以及网络等常规信息,以及其他更丰富的指标。
2、Kubernetes 的组件监控指标
Kubernetes 的 API Server、kubelet 等组件的监控,除了常规的 CPU、内存的信息外,还包括了各个组件的核心监控指标。比如,对于 API Server 来说,它就会在 /metrics API 里,暴露出各个 Controller 的工作队列(Work Queue)的长度、请求的 QPS 和延迟数据等等。这些指标,是检查 Kubernetes 本身工作情况的主要依据。
Kubernetes 核心监控数据,包括了 Pod、Node、容器、Service 等主要 Kubernetes 核心概念的指标。其中,容器相关的指标主要来自于 kubelet 内置的 cAdvisor 服务。在 kubelet 启动后,cAdvisor 服务也随之启动,而它能够提供的信息,可以细化到每一个容器的 CPU 、文件系统、内存、网络等资源的使用情况。
指标规划原则
在具体的监控指标规划上,可以遵循业界通用的 USE 原则和 RED 原则。
USE 原则
适用于资源监控指标,比如节点和容器的资源使用情况。
适用于服务监控指标,比如 kube-apiserver 或者某个应用的工作情况。
Kubernetes 常见监控与排障场景
Kubernetes 的常见问题场景,均可使用 Prometheus 监控实现异常监测与告警,协助问题排查与解决,助力高效运维。
1.监控集群健康状况
场景:使用 Prometheus 监控 Kubernetes 集群的健康状况,包括节点状态、Pod 运行情况、资源利用率等,以便实时了解集群运行情况并及时发现潜在问题,提高集群的稳定性和可靠性。 步骤:
2.性能调优
场景:使用 Prometheus 监控 Kubernetes 集群的性能指标,分析和优化应用程序和集群资源的利用,以提高性能和效率。 步骤:
3.故障排查
场景:使用 Prometheus 监控 Kubernetes 集群,通过实时监控和告警功能来快速识别并解决潜在的故障和问题,保障集群的稳定性和可靠性。 步骤:
4.资源利用率
监控资源利用率,帮助进行资源规划和优化,确保资源的有效利用。
场景:使用 Prometheus 在 Kubernetes 环境中监控资源利用率,例如某个 Pod 的 CPU 利用率异常上升,快速排查和解决异常问题。同时帮助进行资源规划和优化,确保资源的有效利用。 步骤:
5.自动收缩
场景:在 Kubernetes 集群中,基于 Prometheus 监控指标实现自动水平扩展 Pod 的伸缩功能,以应对负载变化,提高系统的弹性和效率,确保应用在不同负载下的稳定性和可用性。 步骤:
监控系统(自建与托管对比)
Prometheus 作为 Kubernetes 的标准监控解决方案,一般有两种试用方式:
如果基于开源自建 Prometheus,一般会遇到一些问题,给企业带来困扰。
1、对于中小企业,使用成本高
自建 Prometheus 的使用成本,包括机器资源成本和人力成本,最主要的是人力成本。其中人力成本又包括:
前期调研成本
中期搭建成本
后期维护成本
由于中小企业的运维团队规模较小,一般不多于5人,有的甚至只有一两个人,要自建和维护一套 Prometheus 监控服务,显然非常吃力。
2、对于大企业,可扩展性差,容易出现性能瓶颈
大企业或快速发展的中型企业,在业务发展初期自建 Prometheus 监控,但随着业务量高速的增长,意味着更多资源的投入,对监控也有了更高的要求。自建 Prometheus 就会开始暴露出可扩展性差、性能瓶颈的问题,使企业运维面临巨大的挑战。
基于以上原因,越来越多的企业选择直接使用全托管、免运维的云上 Prometheus 监控服务,以下以腾讯云 Prometheus 监控服务举例,做个对比。
腾讯云托管 Prometheus 与自建 Prometheus 对比
Prometheus 监控容器服务
1.容器服务开通 Prometheus 监控
在 Prometheus 监控实例详情页,单击数据采集 > 集成容器服务 > 关联集群,选择需要关联的容器集群,完成关联。
标准集群和 Serverless 集群的新建页面,Prometheus 监控服务配置项,点击选择 Prometheus 实例,集群创建成功后将自动关联 Prometheus。
在容器集群详情页,点击一键开通 Prometheus 监控或关联已有 Prometheus 实例,完成集群关联 Prometheus。
2.配置指标的采集
容器集群关联 Prometheus 监控后,会默认采集基础的免费指标,免费指标可覆盖最基础的监控场景。如需配置采集更多基础监控指标,可以在 Prometheus 监控实例详情页,点击数据采集 > 集成容器服务 > 数据采集配置,选择对应组件点击指标详情,在弹窗指标列表中勾选需要新采集的指标。
一键采集预设图表指标
支持一键选择 Prometheus 监控预设容器图表相关的全部指标,快速完成图表指标配置。
对于自定义指标的采集,Prometheus 监控服务预置了部分采集配置文件,用来常用的采集场景。
可以在 Prometheus 监控实例详情页,点击数据采集 > 集成容器服务 > 数据采集配置,选择新建自定义监控,在弹窗中通过【页面编辑】或【yaml编辑】的方式配置新的数据采集规则来监控您的业务数据。
Prometheus 监控的集成中心,支持一键安装常用组件的监控指标采集,包括中间件、数据库、大数据、健康巡检等。
3.查看指标的监控图表
容器集群关联 Prometheus 监控后,可通过以下两种方式查看监控图表:
容器详情页内嵌监控图表
点击集群详情页的 Prometheus 监控 ,可以看到内嵌的监控图表,展示常用的基础指标。
内嵌监控图表指标提供5个大类(监控概览、核心组件监控、节点监控、应用监控、网络监控、存储监控)中20个子类的 Dashboard。
分类 | 子类(dashboard种类) |
---|---|
监控概览 | 集群监控概览、集群 Namespace 大盘 |
核心组件监控 | APIServer、Controller Manager、Kubelet、 Proxy、Scheduler |
节点监控 | 集群节点监控详情、节点 Pod 监控 |
应用监控 | 工作负载监控概览、Deployment、StatefulSet、DaemonSet、集群 Pod 监控 |
网络监控 | 集群网络监控、命名空间 Pods 网络监控、命名空间工作负载网络监控、Pod 网络监控、工作负载网络监控 |
存储监控 | PVC 存储监控 |
Grafana 平台预设监控面板
将 Prometheus 监控绑定 Grafana 实例后,可以前往 Grafana 平台查看常用指标的预设监控面板,预设监控面板列表如下:
Grafana 平台还支持配置展示更多种监控数据的一体化监控大盘,可以通过 Prometheus 监控采集业务监控、应用层监控、中间件监控、系统层监控的监控数据,可实现如下演示 demo 的效果:
4.管理告警
在 Prometheus 监控实例详情页,点击告警管理 > 告警策略 ,选择新建告警策略,支持【选择模板】、【页面编辑】、【YAML编辑】三种配置方式,推荐使用模板创建,我们预设了容器相关常用监控指标的告警策略模板作为专家建议,帮助用户快速完成告警配置。
告警通知渠道支持腾讯云通知模板(电话/短信/邮件/微信/企业微信)、webhook、Alertmanager 三种方式。同时支持告警收敛、告警静默、告警排班等高级告警能力。
【重磅优惠】新用户免费试用15天
近期我们新推出了针对新用户的免费试用15天的优惠活动,欢迎您体验,进一步了解腾讯云 Prometheus 监控服务。
【免费试用】使用路径:
(1)Prometheus 监控控制台列表页,点击【免费试用】入口,进入购买页
(2)在购买页中,配置免费试用实例信息,默认同步创建 Grafana 免费试用实例。
(3)开始体验上述介绍的产品功能,以及探索更多好用的功能。
腾讯云Prometheus监控服务: https://console.cloud.tencent.com/monitor/prometheus
腾讯云Grafana服务: https://console.cloud.tencent.com/monitor/grafana
腾讯云容器服务:https://console.cloud.tencent.com/tke2
https://kubernetes.feisky.xyz/introduction/index
https://yasongxu.gitbook.io/container-monitor/yi-.-kai-yuan-fang-an/di-2-zhang-prometheus/metric#ci-pan
联系我们
如有任何疑问,欢迎加入官方技术交流群
关于腾讯云可观测平台
腾讯云可观测平台(Tencent Cloud Observability Platform,TCOP)基于指标、链路、日志、事件的全类型监控数据,结合强大的可视化和告警能力,为您提供一体化监控解决方案。满足您全链路、端到端的统一监控诉求,提高运维排障效率,为业务的健康和稳定保驾护航。功能模块有: