你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

监视工作负载部署

本文是一系列文章的其中一篇。 从概述开始。

请务必监视 Kubernetes 工作负载的运行状况和性能,以确保它们以最佳方式运行。 Azure Kubernetes 服务 (AKS) 提供了可用于检查部署 DaemonSet 功能和服务运行状况及性能的多种工具。

工具

请务必确定所有部署和 DaemonSet 功能是否都在运行。 本文介绍如何通过使用以下项来确定处于就绪可用状态的副本是否匹配预期的副本计数:

  • Azure 门户。
  • Azure Monitor 的容器见解功能。
  • kubectl 命令行工具。
  • Prometheus 和 Grafana。

Azure 门户

可以使用 Azure 门户验证工作负载中以下组件的运行状况。 有关详细信息,请参阅《从 Azure 门户访问 Kubernetes 资源》。

部署、ReplicaSetStatefulSetDaemonSet

验证处于就绪状态的副本数是否与所需副本数匹配。 门户会显示:

  • 当前可用且已准备好提供流量的副本数。 这些副本已成功安排到工作器节点上,完成了启动过程,并通过了准备情况检查。

  • 为部署指定的所需副本数,或部署旨在维护的副本数。 Kubernetes 部署控制器会不断监视部署的状态,并确保实际副本数与所需数目匹配。

服务和入口

确保所有服务和流入量状态正常

存储

确保所有永久性卷声明和永久性卷的状态是绑定的

容器见解

容器见解Monitor 的一项功能,它为部署到 AKS 或由已启用 Azure Arc 的 Kubernetes 托管的容器工作负载提供监视功能。 此功能可收集性能和运行状况信息,例如控制器、节点和容器的内存和处理器指标。 它还会捕获用于分析的容器日志。

可以使用各种视图和预生成的工作簿来分析收集的数据。 检查群集中各种组件的性能和行为。 借助容器见解,可以获取有关容器工作负载总体状态的见解,以便做出明智的决策以优化其性能并解决问题。

可以使用容器见解来实现以下操作:

  • 通过识别每个节点上运行的容器及其处理器和内存利用率来确定资源瓶颈。

  • 确定容器组及其托管在容器实例中的容器的处理器和内存使用情况。

  • 通过确定容器驻留在控制器或 Pod 中的位置来查看控制器或 Pod 的整体性能。

  • 查看在主机上运行,且与支持 Pod 的标准进程无关的工作负载的资源使用情况。

  • 了解平均负载和负载较重群集的行为,以便确定容量需求,以及群集可以承受的最大负载。

  • 访问容器引擎生成的实时容器日志和指标,以便实时排查问题。

  • 配置警报,以在节点或容器上的 CPU 及内存使用率超过阈值时,或者在基础结构或节点运行状况汇总处群集中发生运行状况状态更改时,主动通知你或进行记录。

在 Azure 门户中,容器见解提供了多种工具来帮助监视和分析 AKS 群集的运行状况和性能。

  • 群集:此功能概述了 AKS 群集,包括 CPU 和内存使用情况、Pod 和节点计数以及网络流量等关键指标。 可以深入了解群集的总体运行状况和资源使用情况。

  • 报告:此功能提供预生成的报表,可用于可视化和分析群集性能的各个方面,例如资源使用情况、Pod 运行状况和容器见解。 此数据可帮助你了解容器和工作负载的行为和性能。

  • 节点:此功能提供有关群集中节点的详细信息。 它会显示 CPU 和内存使用情况、磁盘和网络 I/O 以及每个节点的条件和状态的指标。 可以使用此数据监视单个节点性能,识别潜在的瓶颈,并确保高效的资源分配。

  • 控制器:此功能提供 AKS 群集中 Kubernetes 控制器的可见性。 它可以显示控制器实例数、当前状态和控制器操作状态等信息。 可以监视管理工作负载部署、服务和其他资源的控制器的运行状况和性能。

  • 容器:此功能提供在 AKS 群集中运行的容器的见解。 它提供与每个容器的资源使用情况、重启和生命周期事件相关的信息。 可以使用此数据来帮助监视工作负载中的容器和排查其问题。

  • 实时日志实时日志功能提供正在运行的容器中日志事件的实时流,以便实时查看容器日志。 可以使用此数据有效地监视和排查应用程序问题,并快速识别和解决容器中的问题。

有关更多信息,请参见以下资源:

命令行工具

要检查工作负载的状态,可以使用 kubectl 命令行工具通过 Kubernetes API 与 Kubernetes 群集的控制平面通信。

Pod

要列出在所有命名空间中运行的 Pod,请运行以下命令:

kubectl get pod -A

在命令的输出中,READY 列提供有关 Pod 容器就绪状态的重要信息。

第一个数字表示当前处于就绪状态的容器计数。 这些容器已传递就绪情况探测,并已准备好处理传入流量。 第二个数字表示 Pod 中定义的容器总数,无论容器的就绪状态如何。 它包括已准备好的容器,以及仍在初始化或遇到问题的容器。

确保第一个数字(就绪容器)与 Pod 的第二个数字(容器总数)匹配。 如果它们不同,则某些容器可能尚未准备就绪,或者可能存在阻止其到达就绪状态的问题。

部署、StatefulSetDaemonSetStatefulSet

运行以下命令以检索所有命名空间中的部署

kubectl get deploy -A

kubectl get deploy 命令的输出中,READY 列中的数字指示部署中副本的当前就绪状态。

第一个数字表示已准备好并可以提供流量的副本数。 这些副本已成功启动并已通过其就绪状况检查。 第二个数字表示部署配置中指定的所需副本数。 它是部署旨在维护的目标副本数。

请务必确保第一个数字与第二个数字匹配。 它指示所需的副本数正在运行且已就绪。 两个数字之间的任何差异可能指示必须解决的缩放或就绪问题。

运行以下命令以检索所有命名空间中的 StatefulSet 功能:

kubectl get statefulset -A

运行以下命令以检索所有命名空间中的 DaemonSet 功能:

kubectl get ds -A

可以运行 kubectl get ds 命令来验证 DaemonSet 是否按预期运行。 例如,可以运行以下命令来验证是否已成功部署容器见解代理:

kubectl get ds ama-logs --namespace=kube-system

同样,如果将 AKS 群集配置为在监视托管 Prometheus 中收集 Prometheus指标,则可以运行以下命令来验证是否已在 Linux 节点池上正确部署了 DaemonSet

kubectl get ds ama-metrics-node --namespace=kube-system

此输出提供有关群集中 DaemonSet 功能的信息。 检查输出,以确保处于就绪当前所需状态的 Pod 数相同。 如果它们相同,则 DaemonSet 配置中指定的所需 Pod 数等于当前正在运行且已就绪的 Pod 数。

建议对 ReplicaSet 功能执行相同的检查。 可以使用以下命令检索所有命名空间中的 ReplicaSet 功能:

kubectl get rs -A

确保此输出中的数字对于每个状态相同,以便预期数量的 Pod 或副本按预期运行。 差异可能指示需要使用以下命令之一开展进一步调查或故障排除。

kubectl 描述:可以使用 kubectl describe 命令获取有关 Kubernetes 资源的详细信息,例如 Pod、部署和服务。 可以获取指定资源的全面概述,包括其当前状态、事件、条件和相关元数据。 信息是从 Kubernetes API 服务器检索的。 此命令可用于排查和了解资源的状态。

可以运行 kubectl describe pod <pod-name> 以获取有关特定 Pod 的详细信息,包括其当前状态、事件、标签以及与它关联的容器。 输出显示 Pod 状态、事件、卷和条件等信息。

kubectl 日志:可以使用 kubectl logs 命令检索 Pod 中由容器生成的日志。 此命令有助于调试和故障排除。 可以实时查看日志,或从容器中检索历史日志。

要查看容器日志,可以使用命令 kubectl logs <pod-name> -c <container-name>。 将 <pod-name> 替换为 Pod 的名称。 将 <container-name> 替换为要从中提取日志的容器的名称。 如果 Pod 中只存在一个容器,则无需指定容器名称。 还可以将 -f 标志与 kubectl logs 一起使用,以实时跟踪日志。 此标志类似于 tail -f Linux 命令。

kubectl 事件:可以使用 kubectl events 命令在部署、DaemonSetReplicaSet 或 Pod 在启动期间未启动或遇到问题时进行故障排除。 此命令可按时间顺序列出与指定资源关联的事件。 你可以深入了解可能导致此问题的原因。

要使用 kubectl events,可以运行命令 kubectl events,后跟特定资源名称。 或者,可以使用选择器根据标签、命名空间或其他条件筛选事件。

例如,要检索与特定 Pod 相关的事件,可以运行 kubectl events --field-selector involvedObject.name=<pod-name> --field-selector involvedObject.kind=Pod。 将 <pod-name> 替换为要调查的 Pod 的名称。 kubectl events 命令的输出会显示事件类型(正常或警告)、事件消息、事件原因以及事件发生时的时间戳等信息。 可以使用此信息来帮助确定在启动期间导致失败或问题的原因。

如果怀疑特定资源(如部署、DaemonSetReplicaSet)遇到问题,则可以使用选择器筛选事件。 例如,kubectl events --field-selector involvedObject.name=<deployment-name> --field-selector involvedObject.kind=Deployment 会显示与特定部署相关的事件。 检查事件,以便收集有关可能阻止资源正确启动的潜在错误、失败或其他事件的重要详细信息。 使用此数据来帮助排查和解决影响资源的问题。

使用 Prometheus 和 Grafana 进行群集内监视

如果在 AKS 群集中部署 PrometheusGrafana,则可以使用 K8 群集详细信息仪表板来获取见解。 此仪表板提供从 Prometheus 群集指标收集的信息,例如 CPU 和内存使用情况、网络活动和文件系统使用情况。 它还会显示各个 Pod、容器和 systemd 服务的详细统计信息。

要确保部署、作业、Pod 和容器的运行状况和性能,可以使用仪表板中的功能。 选择“部署”以查看每个部署的副本数和副本总数。 选择“容器”以查看显示正在运行、挂起、失败和成功的容器的图表

监视 Prometheus 和 Azure 托管 Grafana 的托管服务

可以使用预生成的仪表板来可视化和分析 Prometheus 指标。 为此,必须设置 AKS 群集,以收集监视 Prometheus 的托管服务中的 Prometheus指标,并将监视工作区连接到 Azure 托管 Grafana 工作区。

安装预生成的仪表板,以全面了解 Kubernetes 群集的性能和运行状况。 有关详细的安装说明,请参阅《适用于 Kubernetes 的 Prometheus 监视 mixin》。 仪表板在托管 Prometheus 文件夹中的指定 Azure 托管 Grafana 实例中预配。 一些仪表板包括:

  • Kubernetes /计算资源/群集
  • Kubernetes /计算资源/命名空间 (Pod)
  • Kubernetes /计算资源/节点 (Pod)
  • Kubernetes /计算资源/Pod
  • Kubernetes /计算资源/命名空间(工作负载)
  • Kubernetes /计算资源/工作负载
  • Kubernetes / Kubelet
  • 节点导出程序/ USE 方法/节点
  • 节点导出程序/节点
  • Kubernetes /计算资源/群集 (Windows)
  • Kubernetes /计算资源/命名空间 (Windows)
  • Kubernetes /计算资源/ Pod (Windows)
  • Kubernetes / USE 方法/群集 (Windows)
  • Kubernetes / USE 方法/节点 (Windows)

这些内置仪表板广泛用于开放源代码社区,可通过 Prometheus 和 Grafana 监视 Kubernetes 群集。 使用这些仪表板可查看指标,例如资源使用情况、Pod 运行状况和网络活动。 还可以创建自定义仪表板,专用于满足监视需求。 仪表板可帮助你有效监视和分析 AKS 群集中的 Prometheus 指标,这可以支持你优化性能、排查问题并确保 Kubernetes 工作负载的顺利运行。

可以使用 Kubernetes /计算资源/节点 (Pod) 仪表板查看 Linux 代理节点的指标。 可以可视化每个 Pod 的 CPU 使用情况、CPU 配额、内存使用情况和内存配额。

Kubernetes /计算资源/ Pod Grafana 仪表板提供有关所选群集、命名空间和 Pod 的资源消耗和性能指标的见解。 可以使用此仪表板获取与 CPU 使用情况、CPU 限制、CPU 配额、内存使用情况、内存配额、网络指标和存储指标相关的指标。 在仪表板中,选择所选命名空间中的 AKS 群集、命名空间和 Pod 以查看以下详细信息:

  • CPU 使用情况:此图表显示所选 Pod 随时间推移的 CPU 使用情况。 可以查看 CPU 消耗模式,并确定潜在的峰值或异常。

  • CPU 限制:此图表提供有关 CPU 限制的见解,这会在 Pod 超出其 CPU 资源限制时发生。 监视此指标,以帮助确定由于 CPU 限制而限制 Pod 性能的区域。

  • CPU 配额:此图表显示所选 Pod 的已分配 CPU 配额。 如果 Pod 超出其分配的 CPU 配额,则可能需要调整资源。

  • 内存使用情况:此图表显示所选 Pod 的内存使用情况。 监视内存消耗模式并识别任何与内存相关的问题。

  • 内存配额:此图表显示 Pod 的已分配内存配额。 如果 Pod 超出其分配的内存配额,则可能指示需要优化资源。

  • 网络指标:这些图表显示接收和传输的带宽,以及接收和传输数据包的速率。 这些指标可帮助你监视网络使用情况,并检测任何潜在的网络瓶颈或异常。

  • 存储指标:本部分提供有关存储相关指标的信息,例如每秒 I/O 操作数 (IOPS) 和吞吐量。 监视这些指标,以帮助衡量 Pod 存储的性能和效率。

可以使用 Kubernetes /计算资源/ Pod Grafana 仪表板获取有关 Kubernetes 群集中 Pod 的资源使用情况、性能和行为的见解。 使用此信息可以优化资源分配、排查性能问题,并做出明智决策,以确保容器化工作负载顺利运行。

作者

本文由 Microsoft 维护, 它最初是由以下贡献者撰写的。

主要作者:

其他参与者:

若要查看非公开领英个人资料,请登录领英。

后续步骤