监控

kubernetes 周边生态

  • Prometheus 项目为核心的一套统一的方案
    • Prometheus 项目工作的核心,是使用 Pull 的方式去搜集被监控对象的 Metrics 数据(监控指标数据),然后再把这些数据保存在一个 TSDB (时间序列数据库,比如 OpenTSDB、InfluxDB 等)当中,以便后续可以按照时间进行检索
    • Pull模式
      • 特点
        • 被监控方提供一个server,并负责维护
        • 监控方控制采集频率
      • 优点
        • 监控指标由用户自己维护,使得标准化很简单
        • 监控系统对metric采集的统一和稳定有了可靠的保证,对于数据量大的情况下很重要
      • 缺点
        • 采用轮询拉取方式,数据延迟较高
        • 容易造成一些信息的丢失和不准确
    • 监控指标
      • 宿主机数据,包括负载,磁盘等
      • k8s组件数据,包括Controller 的工作队列的长度、请求的 QPS 和延迟数据等
        • 是检查 k8s本身工作情况的主要依据

日志采集

kubernetes 周边生态

三种日志方案

  • 方案一: Node 上部署 logging agent,将日志文件转发到后端存储里保存起来
    • 一个节点只需要部署一个 agent,并且不会对应用和 Pod 有任何侵入性
    • 不足在于,它要求应用输出的日志,都必须是直接输出到容器的 stdout 和 stderr 里

kubernetes 周边生态

  • 方案二: 当容器的日志只能输出到某些文件里的时候,我们可以通过一个 sidecar 容器把这些日志文件重新输出到 sidecar 的 stdout 和 stderr 上
    • 这样就能够继续使用第一种方案了
    • 由于 sidecar 跟主容器之间是共享 Volume 的,所以这里的 sidecar 方案的额外性能损耗并不高,也就是多占用一点 CPU 和内存
    • 但是宿主机上实际上会存在两份相同的日志文件,这对磁盘是很大的浪费
      kubernetes 周边生态
  • 方案三: 通过一个 sidecar 容器,直接把应用的日志文件发送到远程存储里面去
    • 相当于把方案一里的 logging agent,放在了应用 Pod 里
    • 部署简单,并且对宿主机非常友好
    • 但是这个 sidecar 容器很可能会消耗较多的资源,甚至拖垮应用容器
    • 并且由于日志没有输出到 stdout 上,通过 kubectl logs 是看不到任何日志输出的

kubernetes 周边生态

  • 无论是哪种方案,你都必须要及时将这些日志文件从宿主机上清理掉,或者给日志目录专门挂载一些容量巨大的远程盘。否则,一旦主磁盘分区被打满,整个系统就可能会陷入奔溃状态

相关文章: