关于我们

质量为本、客户为根、勇于拼搏、务实创新

< 返回新闻公共列表

监控在Kubernetes中运行的应用程序

发布时间:2022-04-21 11:11:16

微服务——现在是我们构建基础设施的事实上的选择——自然地为容器铺平了道路。借助Docker 和 Kubernetes 等容器编排工具,组织现在可以更快、更大规模地发布应用程序。但是,随着所有这些功能和自动化的出现,挑战也随之而来,尤其是在保持对这个临时基础设施的可见性方面。

监控 Kubernetes 工作负载

Kubernetes 很复杂,(要准确了解 Kubernetes 是什么以及它是如何工作的,请阅读我们关于 Kubernetes 的完整指南)。要成功使用它,需要同时监控多个组件。为了使您的监控策略更容易,请将监控操作分成几个区域,每个部分都指代 Kubernetes 环境的一个单独层。然后从上到下分解对工作负载的监控:集群、Pod、应用程序,最后是最终用户体验。

监控 Kubernetes 集群

集群是 Kubernetes 的最高级别组成部分。大多数 Kubernetes 安装只有一个集群。这就是为什么当您监控集群时,您可以获得所有区域的完整视图。并且可以轻松确定组成集群的 pod、节点和应用程序的运行状况。

使用联合部署多个集群时,必须单独监控每个集群。您将在集群级别监控的区域是:

  • 不成功的 Pod:失败和中止的 Pod 是 Kubernetes 进程的正常部分。当一个 pod 应该以更高效的水平工作或处于非活动状态时,调查 pod 故障异常背后的原因至关重要。
  • 节点负载:跟踪每个节点上的负载对于监控效率是不可或缺的。某些节点的使用量可能比其他节点多得多。重新平衡负载分配是保持工作负载流畅和有效的关键。这可以通过 DaemsonSets 完成。
  • 集群使用情况:监控集群基础设施允许您调整正在使用的节点数量,并将资源用于有效地为工作负载供电。您可以看到资源是如何分配的,因此您可以扩大或缩小规模并避免额外基础设施的成本。为此,我们建议学习如何设置容器的内存和 CPU 使用限制。

监控 Kubernetes Pod

集群监控提供了 Kubernetes 环境的宏观视图,但从单个 pod 收集数据也是必不可少的。它揭示了各个 pod 的健康状况以及它们所托管的工作负载。您可以更清晰地了解集群之外的更细粒度的 Pod 性能。在这里您将监控:

  • pod 实例总数:需要有足够的 pod 实例以确保高可用性。这种方式不会浪费托管带宽,并且您不会运行比需要更多的 pod 实例。
  • Pod 部署:监控 Pod 部署可让您查看是否有任何错误配置可能会降低 Pod 的可用性。密切关注资源如何分配到节点至关重要。
  • 实际 pod 实例:监控每个 pod 正在运行的实例数量与您预期运行的实例数量将揭示如何重新分配资源以实现 pod 实例方面的所需状态。如果您看到不同的指标,ReplicaSets 可能配置错误,因此定期分析这些指标很重要。

监控在 Kubernetes 中运行的应用程序

应用程序不是 Kubernetes 的一部分,但想要托管一个应用程序是使用 Kubernetes 的重点。这就是为什么监控托管在集群上的应用程序对于成功来说是不可或缺的。应用程序监控揭示的问题可能是 Kubernetes 环境或应用程序代码中的问题。

通过监控应用程序,您可以识别故障并立即解决它们。从监控开始:

  • 错误:如果发生错误,您可以在监控时快速找到它,并在它影响最终用户之前解决它。
  • 事务跟踪:如果应用程序遇到可用性或性能问题,事务跟踪可帮助您进行故障排除。
  • 应用程序响应能力:您可以监控应用程序响应请求所需的时间。您可以查看他们是否能够处理当前的工作负载,或者他们是否正在努力维持性能。
  • 应用程序可用性:监控应用程序是否处于活动状态和启动状态,并有效响应。

运行 Kubernetes 时监控最终用户体验

最终用户体验,如应用程序,在技术上不是 Kubernetes 平台的一部分。应用程序的总体目标是为最终用户提供积极的体验,并且应该成为 Kubernetes 监控策略的一部分。

收集数据将使您了解应用程序的性能、响应能力和可用性。进行真实用户和综合监控对于了解用户如何与 Kubernetes 工作负载交互至关重要。它让您知道是否需要进行任何调整或调整,以增强可用性并改进前端。

在云环境中监控 Kubernetes

当 Kubernetes 在云中运行时,在规划监控策略时需要考虑一些特定因素。在云中,您还必须监控:

  • IAM 事件:您必须监控 IAM 活动。这包括权限更改和登录,这是基于云的安装或环境中的安全最佳实践。
  • 云 API:云提供商有自己的 API,您的 Kubernetes 安装使用它来请求资源,因此需要对其进行监控。
  • 成本:云上的成本会迅速增加。成本监控可帮助您制定预算并确保您不会在基于云的 Kubernetes 服务上超支。
  • 网络性能:在基于云的安装中,网络可能成为应用程序性能的最大障碍。如果您定期监控云网络,您可以确保数据按照需要快速移动,从而避免与网络相关的问题。

监控 Kubernetes 中的指标

为了在对 Kubernetes 执行不同类型的监控之外获得对 Kubernetes 安装的更高可见性,还有几个指标可以让您深入了解应用程序的运行方式。

通用指标

这些是从 Kubernetes 代码(用 Golang 编写)收集的指标。它使您可以了解平台中细胞级别的情况。

节点指标

来自启用 Kubernetes 节点的操作系统的指标可以让您深入了解各个节点的整体健康状况。您可以监控内存消耗、文件系统活动、CPU 负载、使用情况和网络活动。

Kubelet 指标

为了确保控制平面与运行 Kubelet 的每个单独节点有效通信,您应该定期监控Kubelet代理。

Kube-State-Metrics

您可以获得一个可选的 Kubernetes 插件,它从名为Kube-State-Metrics的 Kubernetes API 生成指标。

控制器管理器指标

为确保有效地编排工作负载,您可以监控控制器向外部 API 发出的请求。这在基于云的 Kubernetes 部署中至关重要。

调度程序指标

如果您想识别和防止延迟,您应该监控调度程序中的延迟。通过这种方式,您可以确保 Kubernetes 顺利、准时地部署 Pod。

等指标

Etcd 存储 Kubernetes 的所有配置数据。Etcd 指标将为您提供对集群状况的基本可见性。

容器指标

专门查看单个容器将允许您监控确切的资源消耗,而不是更一般的 Kubernetes 指标。CAdvisor允许您分析容器内发生的资源使用情况。

API 服务器指标

API 将 Kubernetes 前端保持在一起,因此这些指标对于获取 API 服务器的可见性至关重要,从而了解整个前端。

记录数据

当您发现指标揭示的问题时,日志有助于检查。它们为您提供准确且无价的信息,提供比指标更多的详细信息。登录 Kubernetes 的大多数组件有很多选项。应用程序还会生成日志数据。

Kubernetes 监控挑战、解决方案和技巧

将应用程序从单体基础架构迁移到由 Kubernetes 管理的微服务是一个漫长而密集的过程。它可能充满陷阱,并且可能被证明容易出错。但要实现更高的可用性、创新、成本效益、可扩展性和敏捷性,这是发展业务的唯一途径,尤其是在云中。由于平台的复杂性,可见性是 Kubernetes 环境的主要问题,因为查看每个微服务的实时交互具有挑战性。监控是每个企业都需要实践和改进才能取得成功的专业技能。

一个 Kubernetes 集群可以被认为是复杂的,因为它有多个服务器和集成的私有和公共云服务。出现问题时,需要检查许多日志、数据和其他因素。传统的单片环境只需要一些日志搜索来确定问题。另一方面,Kubernetes 环境有一个或多个与您遇到的问题有关的多个微服务的日志。为了应对这些挑战,我们汇总了以下建议,以有效监控容器化基础设施。

有效使用 Sidecar 模式改进 Kubernetes 中的应用程序监控

一个关键的最佳实践是利用 Kubernetes 中基于角色的访问,由单个团队及其监控解决方案提供端到端控制,而无需完全控制集群。利用团队命名空间下的监控解决方案可帮助操作员轻松控制团队范围内基于微服务的容器应用程序的监控。

但是,他们可以添加额外的监控支持,而无需重建他们的应用程序容器。一种动态的监控方法可以提高可观察性并驱动上下文——如果容器开始出现问题,则无需将其拉下。

命名空间可观察性

通过利用Sensu Go等开源监控事件管道,运营团队可以获得容器的专用团队视图,以提高对其应用程序的可见性并增加对可能异常的洞察力。这些类型的解决方案为临时基础设施提供动态监控变化。因此,运营商可以通过使用 Kubernetes 内置的基于角色的访问控制概念来帮助安全地推动协作。

Kubernetes 为资源提供命名空间范围,使各个团队可以完全控制其命名空间下的应用程序。操作员还可以在 Kubernetes 命名空间中创建容器和 Pod,并将其直接映射到代码驱动的监控工具,也可以利用相同的命名空间。

例如,您可以在开源监控事件管道中拥有一个“关联”命名空间——类似于 Kubernetes——这样一个团队就可以使用声明性YAML配置文件的存储库来控制容器并围绕它进行监控。借助RBAC(基于角色的访问控制),您可以通过仅向用户提供必要的访问权限来降低风险,这样他们就不会拥有超出所需的权限。

将监控工作流程编码到声明性配置文件中,可以让您以自动化的速度进行监控。它可以共享、作为代码处理、审查、编辑和版本化,从而实现高效的多云操作。阅读有关如何使用 Prometheus 监控 Kubernetes 的更多信息

Kubernetes 日志最佳实践

容器化工作负载的应用程序日志聚合是可以改进软件开发的基本最佳实践。由于容器化工作负载的短暂性,集群中生成的日志条目数量可能非常大。

Fluentd 和 FluentBit 等日志代理——最初由 Treasure Data 开发的跨平台、开源数据收集软件项目——通常用作 DaemonSet 来收集节点上运行的所有 pod 的日志,使用日志文件的特权卷挂载由容器运行时存储。这些是集群级工具,用于将日志聚合到 Elasticsearch 等数据湖中,或将它们发送到Kafka等流处理器解决方案中——您可能希望使用基于功能的角色监控来跟踪在外部运行的这些额外的日志聚合基础设施您的 Kubernetes 集群。

使用 Kubernetes 监控解决方案

可见性对于企业识别阻碍应用程序性能的容器问题至关重要。您可以更有效地监控在 Kubernetes pod 中运行的容器化应用程序,并根据需要进行扩展或缩减。这就是为什么拥有一个全面的 Kubernetes 监控解决方案至关重要的原因,它可以让您端到端地了解应用程序的每个组件。从 Pod、节点、容器、基础设施、Kubernetes 平台,到每个微服务和最终用户设备。

使用 APM 监控 Kubernetes

实施应用程序性能监控解决方案 (APM) 可让企业了解其应用程序并评估整体性能。它组织并提供对 Kubernetes 集群、Docker 容器和容器化应用程序的见解。您可以检查基础架构的基本指标、了解潜在障碍并进行调整。在部署 APM 监控的容器应用程序时,即时了解内存、CPU 和网络利用率以及资源使用情况统计信息。APM 指标可快速识别常见问题,例如带宽垄断应用程序或识别影响深远的容器级网络错误。



/template/Home/scmsky/PC/Static