什么是 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 添加到队列来决定将它们放置在何处,以便在将它们绑定到合适的节点之前评估每个可用节点。
    • 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 等开放标准集成,以收集其他指标。

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

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 中的工作机。

  • 主(节点)
    传统术语,用作托管控制平面的节点的同义词。
  • 工作节点 (node)
    工作节点托管 Pod,而 Pod 是应用程序工作负载的组件。

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

容器
一种轻量级且可移植的可执行映像,其中包含软件及其所有依赖项

控制器
在 Kubernetes 中,控制器是控制循环,用于监视集群的状态,然后在需要时进行更改或请求更改。每个控制器都尝试使当前的集群状态更接近期望的状态。

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

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

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

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