你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
本文是一系列文章的其中一篇。 从 概述开始。
请务必监视 Kubernetes 工作负载的运行状况和性能,以确保它们以最佳方式运行。 Azure Kubernetes 服务(AKS)有多种工具可用于检查部署、 DaemonSet
功能和服务的运行状况和性能。
工具
请务必确定所有部署和 DaemonSet
功能是否都在运行。 本文介绍如何通过使用以下项来确定处于就绪和可用状态的副本是否匹配预期的副本计数:
- Azure 门户。
- Azure Monitor 的容器见解功能。
- kubectl 命令行工具。
- 普罗米修斯和格拉法纳。
Azure 门户
可以使用 Azure 门户验证工作负载中以下组件的运行状况。 有关详细信息,请参阅 从 Azure 门户访问 Kubernetes 资源。
部署、 ReplicaSet
、 StatefulSet
和 DaemonSet
验证 处于就绪 状态的副本数是否与所需副本数匹配。 门户显示:
当前可用且已准备好提供流量的副本数。 这些副本已成功被调度到工作节点上,完成了启动过程,并通过了就绪检查。
为部署指定的所需副本数,或部署旨在维护的副本数。 Kubernetes 部署控制器不断监视部署的状态,并确保实际副本数与所需数目匹配。
服务和入口
确保所有服务和入口的状态 都正常 。
储存
确保所有永久性卷声明和永久性卷的状态是绑定的。
容器见解
容器见解 是 Monitor 的一项功能,它为部署到 AKS 或 由已启用 Azure Arc 的 Kubernetes 管理的容器工作负荷提供监视功能。 此功能收集性能和运行状况信息,例如控制器、节点和容器中的内存和处理器指标。 它还捕获用于分析的容器日志。
重要
虽然容器见解可用于指标收集,但我们建议使用 Prometheus 的 Azure Monitor 托管服务 来改进指标收集,并仅将 Container Insights 用于日志收集。
可以使用 Container Insights 分析收集的数据,并了解群集中组件的性能和行为。 下面是使用容器见解的一些方法:
- 通过分析每个节点上容器的处理器和内存使用情况来识别资源瓶颈。
- 检查容器组及其容器在容器实例中的性能。
- 通过标识控制器或 Pod 中容器的位置来查看控制器或 Pod 的整体性能。
- 查看主机上与支持 Pod 标准进程无关的工作负荷的资源使用情况。
- 了解群集在平均负载和重负载下的行为方式,以确定容量需求和最大负载。
- 访问实时容器日志和指标,实时排查问题。
- 设置警报,以通知或记录超过阈值的 CPU 和内存使用量,以及群集中的运行状况更改。
在 Azure 门户中,Container Insights 提供了用于监视和分析 AKS 群集运行状况和性能的工具:
- 群集:概述 AKS 群集,包括 CPU 和内存使用情况、Pod 和节点计数以及网络流量等指标。
- 报告:提供预生成报表,以可视化和分析群集性能、资源使用情况、Pod 运行状况和容器见解。
- 节点:提供有关群集中的节点的详细信息,包括 CPU 和内存使用情况、磁盘和网络 I/O 以及节点条件和状态。
- 控制器:提供 AKS 群集中 Kubernetes 控制器的可见性,显示控制器作的实例数、当前状态和状态。
- 容器:提供对 AKS 群集中运行的容器的见解,包括资源使用情况、重启和生命周期事件。
- 实时日志:提供正在运行的容器中的日志事件的实时流,从而实时查看容器日志,以便监视和排查应用程序问题。
有关详细信息,请参阅以下资源:
- 使用 Container Insights 监视 Kubernetes 集群性能
- 使用容器洞察配置 GPU 监控
- 使用 Azure 网络策略管理器监视和可视化网络配置
- 使用容器见解监视部署和 HPA 指标
- 监视永久性卷 (PV) 指标
- 使用 Syslog 监视安全性
- 容器见解中的报表
- 容器洞察收集的指标
- 实时查看 Kubernetes 日志、事件和 Pod 指标
- 实时查看群集指标
命令行工具
若要检查工作负载的状态,可以使用 kubectl 命令行工具通过 Kubernetes API 与 Kubernetes 群集的控制平面通信。
Pod
要列出在所有命名空间中运行的 Pod,请运行以下命令:
kubectl get pod -A
在命令的输出中, READY 列提供有关 Pod 容器的就绪状态的重要信息。
第一个数字表示当前处于 就绪 状态的容器计数。 这些容器已通过了就绪探测,并准备好处理传入的流量。 第二个数字表示 Pod 中定义的容器总数,无论容器的就绪状态如何。 它包括已准备好的容器,以及仍在初始化或遇到问题的容器。
确保第一个数字(就绪容器)与 Pod 的第二个数字(容器总数)匹配。 如果它们不同,某些容器可能尚未准备就绪,或者可能存在阻止它们到达 就绪 状态的问题。
部署、 StatefulSet
、 DaemonSet
和 StatefulSet
运行以下命令以检索所有命名空间中的 部署 :
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 群集配置为在 Monitor for managed Prometheus 中收集 Prometheus 指标,则可以运行以下命令来验证 DaemonSet
是否已在 Linux 节点池上正确部署:
kubectl get ds ama-metrics-node --namespace=kube-system
此输出提供关于您群集中的DaemonSet
功能的信息。 检查输出,确保 就绪状态、 当前状态和 所需 状态中的 Pod 数相同。 如果相同,则 DaemonSet
配置中指定的所需 Pod 数等于当前正在运行且已就绪的 Pod 数。
建议对 ReplicaSet 功能执行相同的检查。 可以使用以下命令检索 ReplicaSet
所有命名空间中的功能:
kubectl get rs -A
确保输出结果中的数字在每个状态下都一致,以便预期数量的 Pod 或副本能够按预期运行。 差异可能表示需要使用以下命令之一进行进一步调查或故障排除。
kubectl 描述: 可以使用 kubectl 描述 命令获取有关 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 命令在部署、DaemonSet
、ReplicaSet
或 Pod 在启动期间未启动或遇到问题时进行故障排除。 此命令提供与指定资源关联的事件的时间顺序列表。 你可以深入了解可能导致此问题的原因。
若要使用 kubectl events
,可以运行命令 kubectl events
,后跟特定资源名称。 或者,可以使用选择器根据标签、命名空间或其他条件筛选事件。
例如,若要检索与特定 Pod 相关的事件,可以运行 kubectl events --field-selector involvedObject.name=<pod-name> --field-selector involvedObject.kind=Pod
。 将 <pod-name>
替换为要调查的 Pod 的名称。 命令的 kubectl events
输出显示事件类型(正常或警告)、事件消息、事件原因以及事件发生时的时间戳等信息。 可以使用此信息来帮助确定在启动期间导致故障或问题的原因。
如果怀疑特定资源(如部署) DaemonSet
或 ReplicaSet
遇到问题,则可以使用选择器筛选事件。 例如, kubectl events --field-selector involvedObject.name=<deployment-name> --field-selector involvedObject.kind=Deployment
显示与特定部署相关的事件。 检查事件,以便收集有关可能阻止资源正确启动的潜在错误、失败或其他事件的重要详细信息。 使用此数据来帮助排查和解决影响资源的问题。
使用 Prometheus 和 Grafana 进行群集内监视
如果在 AKS 群集中部署 Prometheus 和 Grafana ,则可以使用 K8 群集详细信息仪表板 获取见解。 此仪表板提供从 Prometheus 群集指标收集的信息,例如 CPU 和内存使用情况、网络活动和文件系统使用情况。 它还会显示各个 Pod、容器和 systemd 服务的详细统计信息。
若要确保部署、作业、Pod 和容器的运行状况和性能,可以使用仪表板中的功能。 选择 “部署 ”以查看每个部署的副本数和副本总数。 选择“容器”以查看显示正在运行、挂起、失败和成功的容器的图表。
监视 Prometheus 和 Azure 托管 Grafana 的托管服务
可以使用预生成的仪表板来可视化和分析 Prometheus 指标。 为此,必须设置 AKS 群集,以在 Prometheus 的 Monitor 托管服务中收集 Prometheus 指标,并将 Monitor 工作区 连接到 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/计算资源/节点(Pods) 仪表板查看 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维护。 它最初是由以下贡献者撰写的。
主要作者:
- Paolo Salvatori |首席客户工程师
其他参与者:
- Kevin Harris |主要解决方案专家
- 弗朗西斯·西米·纳扎雷斯 |高级技术专家
若要查看非公共LinkedIn个人资料,请登录LinkedIn。