什么是 Kubernetes 监控?

Kubernetes 监控定义

Kubernetes 监控是一种报告系统,可帮助 DevOps 和 IT 团队识别问题并主动管理复杂的 Kubernetes 集群。有效的 Kubernetes 监控允许实时管理您的整个容器化基础架构。它跟踪正常运行时间和集群资源利用率,例如内存、CPU 和存储。它还跟踪集群组件交互。

Kubernetes 监控允许集群运营商监控功能。它会在以下情况下报告:所需 Pod 数量未运行时、资源利用率接近临界限制时,以及 Pod 或节点由于故障或配置错误而无法加入集群时。

Kubernetes 监控可让您深入了解集群的内部健康状况、资源计数和性能指标。它还可以通过主动警报和基于机器学习的异常检测,使您能够快速发现和解决问题。详细了解合适的 Kubernetes 监控工具如何通过统一的视角查看日志、指标和跟踪,帮助您了解 Kubernetes 集群以及在其上运行的应用程序的状态和健康状况。

什么是 Kubernetes?

Kubernetes (K8s) 是一个开源容器编排系统,用于自动化软件部署、扩展和管理容器化应用程序。该项目最初由 Google 于 2014 年开发,现在由云原生计算基金会 (CNCF) 维护。Kubernetes 消除了管理容器化应用程序所涉及的许多手动流程。容器编排将各个容器组合成一个有凝聚力的、协调的整体。

Kubernetes 可以部署在各种云平台以及自托管系统上,以提高 IT 和 DevOps 团队的效率。许多云服务提供商(例如 AWS、Google 和 Azure)还向其用户提供某种形式的托管 Kubernetes 服务。通过跨多个主机编排容器,Kubernetes 允许您

  • 最大限度地利用运行应用程序所需的资源
  • 自动化应用程序部署和更新
  • 快速扩展容器化应用程序
  • 管理服务以确保应用程序按预期运行

为什么监控 Kubernetes 很重要?

Kubernetes 监控涉及许多较小的组件,包括主机、容器、容器化应用程序和 Kubernetes 平台本身。当出现问题时,可能很难查明原因。正确的 Kubernetes 监控允许您查看问题发生的位置——或即将发生的位置——并采取行动。

Kubernetes 监控解决方案还可以提供有关集群、部署、Pod、节点和容器的可操作报告和洞察力。您还可以配置警报,以确保您的团队能够快速响应任何安全或性能事件。获得的数据使您能够优化集群的健康状况、性能和安全配置。这会导致资源利用率和降低成本。

Kubernetes 监控允许您

  • 确保团队或应用程序优化地使用资源
  • 在新节点加入集群时自动利用新资源
  • 在主机宕机时将工作负载重新部署到可用节点
  • 更有效地配置更新和回滚

Kubernetes 监控方法

要监控 Kubernetes,您需要具备以下条件:

  • 在集群中运行的指标服务器
  • 已启用 Kube-state-metrics
  • 已部署收集机制
  • 可以处理 Kubernetes 指标和日志的 Kubernetes 监控工具
    为了全面了解您的整个环境,全面的可观测性工具可以监控 Kubernetes 数据以及应用程序跟踪、指标和日志。
  • 已部署代理以收集指标和日志
    许多 Kubernetes 监控解决方案都使用 DaemonSet 方法,因为它们相对容易配置。DaemonSet 是一种特殊的 Pod,可确保其工作负载的副本在集群中的所有节点上运行。开发人员可以创建 DaemonSet,在集群中的每个节点上运行监控代理以收集性能指标。

Kubernetes 监控用例中的关键指标是什么?

Kubernetes 监控中的关键指标是控制平面、节点、Pod 和容器。

  • Kubernetes 控制平面指标可帮助您了解整个集群的性能。其核心是 kube-apiserver,它允许您观察元素,例如
    • Etcd一个一致且高度可用的键值存储,用作 Kubernetes 的所有集群数据的后备存储。
    • Kube-scheduler:一个调度进程,通过将新 Pod 添加到队列中,在将它们绑定到合适的节点之前评估每个可用节点,来决定将新 Pod 放置在何处。
    • Kube-controller-manager:一个将所有控制器组合到单个进程中并一起运行以降低复杂性的组件。
    • Cloud-controller-manager:与云提供商资源交互并允许您将集群链接到云提供商 API 的控制器。
  • Kubernetes 节点指标监控整个 Kubernetes 集群的性能。这包括使用的资源数量、每个节点上运行的应用程序数量以及您的节点是否正常工作。查找节点资源使用情况指标,如磁盘和内存利用率、CPU 和网络带宽。每个节点包含以下元素
    • Kubelet:在集群中的每个节点上运行的代理。它确保容器在 Pod 中运行。
    • Kube-proxy:在集群中的每个节点上运行的网络代理,实现了 Kubernetes 服务概念的一部分。
    • 容器运行时:运行容器的软件,也称为容器引擎。
  • Kubernetes 容器指标允许您评估与您配置的资源限制相比的情况,包括容器 CPU 使用率、容器内存利用率和网络使用率等指标。
  • Kubernetes Pod 指标可以告诉您部署中的所有 Pod 是否都正常运行。应用程序指标告诉您有关在 Kubernetes Pod 中运行的应用程序的性能和可用性,包括正常运行时间和响应时间、响应能力和延迟等元素。

Kubernetes cluster visualization including a control plane, nodes, pods, and containers

Kubernetes 监控挑战

将传统应用程序迁移到 Kubernetes 可能非常耗时。尽管 Kubernetes 可以简化容器中和跨云的应用程序部署,但其复杂性也带来了一系列挑战。

Kubernetes 容器编排提供了动态自动化能力。因此,它需要同样动态的监控系统来检查各个组件并启用警报。在动态容器化环境中运行的应用程序带来的独特监控挑战之一是它们的复杂性。您如何诊断和解决在数千个容器上的数百个微服务中运行的、在短暂且可丢弃的 Pod 中运行的问题?

Kubernetes 监控最佳实践

无论您的节点是部署在同一位置、跨云还是混合云中,Kubernetes 监控最佳实践都是一致的。指标收集应该在整个集群中以相同的方式进行。以下是 Kubernetes 监控中需要考虑的一些有用最佳实践

  • 使用命名空间来组织您的集群、简化容器管理并最大程度地降低风险。
  • 升级到最新版本的 Kubernetes 以获取新功能、错误修复和安全补丁。
  • 通过设置自动监控来理解 Kubernetes 警报。
  • 设置基于角色的访问控制 (RBAC) 来管理用户和服务帐户的权限和访问权限。
  • 向集群管理员设置推送通知并定义负责解决特定问题的团队。
  • 使用标签来组织您的集群并定义和管理对象。
  • 通过设置简化的基于 Git 的工作流程来减少错误。

最成功的 Kubernetes 监控解决方案满足以下要求

  • 监控技术堆栈的所有层。所有主机系统(Kubernetes 核心组件、节点、Pod 和集群内的容器)以及所有应用程序和服务都应该被跟踪。
  • 在服务动态出现时自动检测和监控它们。
  • 提供一种收集和关联数据的方法,以便您可以对相关的指标、日志、跟踪和其他可观察性数据进行分组和探索。
  • 与 Prometheus 和 OpenTelemetry 等开放标准集成,以收集其他指标。

以下是一些使用 Elasticsearch 和 OpenTelemetry 在 Kubernetes 上观察和保护应用程序和服务工作流程的最佳实践

Kubernetes 与 Docker

Kubernetes 与 Docker 不同,因为它可以大规模运行容器化应用程序。Docker 是一组软件开发工具,允许您构建、共享和运行单个容器。

Docker 采用客户端-服务器架构,通过单个 API 提供简单的命令和自动化。它提供了一种简单的方法来打包和分发容器化应用程序。

使用 Docker 构建的容器镜像可以在支持容器的平台上运行,例如 Kubernetes 或 Docker Swarm。Kubernetes 比 Docker 更适合在多个服务器和集群中运行、管理、调度和编排大量容器。大多数大型企业都倾向于使用 Kubernetes 来监控其运行状况并有效地平衡负载。

至关重要的是,Kubernetes 附带了一个 API 和命令行工具,允许您自动执行操作。Kubectl 极大地简化了容器管理。Kubernetes 是一个用于运行和管理来自许多容器运行时的容器的平台,包括 Docker 容器运行时。自动管理一系列元素的能力使 Kubernetes 特别灵活。其可靠性为 IT 团队节省了时间,简化了您的整体工作流程。

Kubernetes 监控仪表板

基于 Web 的 Kubernetes 有一个简单的仪表板,可以概述单个和跨集群的资源和节点。这是一种部署容器化应用程序、管理资源和进行故障排除的简单方法。

如下所示,Elastic 的开箱即用仪表板包括所有集群的命名空间和已定义的存储类。概述列出了所有节点、命名空间和持久存储卷。它还包含详细的聚合节点指标。

您可以查看每个集群应用程序的持久卷声明,以及集群中运行的所有 Kubernetes 资源的完整视图。它还显示在选定命名空间中运行的每个应用程序、当前 Pod 内存使用情况以及部署或 ReplicaSet 的就绪 Pod 数量。

Kubernetes monitoring dashboard

使用 Elastic 监控 Kubernetes

借助Elastic 可观察性,您可以将来自 Kubernetes 集群及其上运行的工作负载的日志、指标和跟踪信息整合到一个统一的平台中。这使您能够有效地识别应用程序服务的问题。来自 Kubernetes 集群的指标和日志可以与Elastic 基于机器学习的异常检测一起使用,以减少您分析数据的时间。

Elastic 的Kubernetes 监控解决方案通过无与伦比的功能集,为您提供 Kubernetes 生态系统的实时可见性。该可观察性解决方案构建在Elastic Stack之上,使您能够无缝地部署和操作您的 Kubernetes 架构。通过在一个视图中大规模统一您的日志、指标和 APM 跟踪,您可以有效地管理高度分布式云原生应用程序的复杂性。您还可以获得云原生技术堆栈和云监控的可操作可观察性。这使您能够主动检测和解决庞大的混合和多云生态系统中的问题。

探索 Kubernetes 监控解决方案

Kubernetes 监控词汇表

以下是一些供您参考的关键 Kubernetes 术语。

集群
一组运行容器化应用程序的工作机器,称为节点。每个集群至少有一个工作节点。

节点
节点是 Kubernetes 中的一台工作机器。

  • 主节点
    旧称,用作托管控制平面的节点的同义词。
  • 工作节点
    工作节点托管作为应用程序工作负载组件的 Pod。

Pod
最小和最简单的 Kubernetes 对象。Pod 表示集群上的一组正在运行的容器

容器
包含软件及其所有依赖项的轻量级和可移植的可执行镜像

控制器
在 Kubernetes 中,控制器是监视集群状态并在需要时进行或请求更改的控制循环。每个控制器都试图使当前集群状态更接近所需状态。

Kubelet
在集群中的每个节点上运行的代理。它确保容器在 Pod 中运行。

Kube-proxy
在集群中的每个节点上运行的网络代理,实现了 Kubernetes 服务概念的一部分。

Etcd
一个一致且高度可用的键值存储,用作 Kubernetes 所有集群数据的后备存储。

Ingress
一个 API 对象,用于管理对集群中服务的外部访问,通常是 HTTP。Ingress 可以提供负载均衡、SSL 终止和基于名称的虚拟主机。