一、监控
1、监控类型
从监控类型上划分,在 K8s 中可以分成四个不同的类型:
① 资源监控:这种监控主要关注于基础资源的使用情况,例如 CPU、内存、网络等。通常使用数值或百分比等单位来统计,可以通过 Zabbix、Telegraf 等项目实现。
② 性能监控:性能监控指的是对应用程序性能的监控,常见的是 APM(应用性能管理)监控。
③ 安全监控:安全监控主要关注安全策略的执行情况,例如越权管理、安全漏洞扫描等。通过监控安全事件并及时响应,确保系统的安全性。
④ 事件监控:K8s 中的事件监控是一种特殊的监控方式,基于状态机的状态转换产生事件。当从正常状态转换到异常状态时,会发出警告事件。
2、监控采集组件 metrics-server
Metrics Server 的结构大致为:
① Core 层:包括了数据的采集、处理和聚合等功能。
② Source 层:是 Metrics Server 的数据来源定义和管理层,负责管理不同数据源之间的交互和整合。
③ API 层:这是 Metrics Server 向外部提供服务的接口层,用户可以通过这些 API 端点查询和检索集群中的资源使用情况数据。
④ API Registration 层:这一层的作用是将 Metrics Server 的 API 注册到 Kubernetes API Server 上,用户可以直接通过 Kubernetes API Server 访问 Metrics Server 提供的 API。
3、常用的开源监控方案
Prometheus
(1) 简介:Prometheus 是一款完全开源的监控和警报工具,其代码以 Apache 许可证的形式发布,它是开源社区中一个受欢迎和广泛采用的监控解决方案。
(2) 三种数据采集链路:
① Push 方式:在 Push 方式中,被监控的服务或应用程序主动推送指标数据到 Prometheus 服务器。
② Pull 方式:在 Pull 方式中,Prometheus 服务器定期从被监控的服务或应用程序拉取指标数据。
③ Prometheus on Prometheus:通过一个 Prometheus 来去同步数据到另一个 Prometheus。
kube-eventer
kube-eventer 是一个用于 Kubernetes 的事件离线工具,用于提取集群中的事件数据并将其保存到外部存储中,如文件系统或数据库。kube-eventer还支持监控和警报功能,能够及时发现和解决事件处理过程中的异常情况。
二、日志
1、日志的场景:
① 主机内核的日志:用于诊断网络栈异常、驱动异常、文件系统异常等问题,帮助开发者解决影响节点稳定性的异常情况。
② Runtime的日志(如Docker):用于排查 Pod 状态无响应等问题,帮助管理员维护和管理容器化环境的稳定性。
③ 核心组件的日志(如APIServer、Scheduler、etcd和Ingress):用于审计、调度、存储状态和流量分析等关键任务,帮助监控和诊断整个Kubernetes集群的状态和健康状况。
④ 部署应用的日志:用于查看业务层的状态和诊断异常。
2、日志的采集:
根据日志采集位置的不同,可以将其划分为三种情况:
① 宿主机文件:日志文件位于宿主机上,容器通过卷挂载(volume)将日志写入宿主机。使用宿主机上的日志轮转策略,通过宿主机上的代理(agent)进行采集。
② 容器内日志文件:日志文件位于容器内部,通常采用 Sidecar 容器来将日志写入 stdout,然后再通过容器本地的日志轮转策略,以及外部的代理进行采集。
③ 直接写入 stdout:日志直接输出到 stdout,采集策略包括直接由代理采集到远程位置,或者通过标准 API 采集到远程位置