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

监视 Azure Kubernetes 服务 (AKS) 控制平面指标(预览版)

Azure Kubernetes 服务 (AKS) 控制平面健康状况对于群集的性能和可靠性至关重要。 控制平面指标(预览版)提供了对其可用性和性能的更多可见性,使你能够最大限度地提高整体可观测性并维持卓越运营。 这些指标与 Prometheus 和 Grafana 完全兼容,并且可以进行自定义以仅存储你认为必要的内容。 通过这些新指标,你可以从 API 服务器、ETCD、计划程序、自动缩放程序和控制器管理器收集所有指标。

本文可帮助你了解此新功能和其实现方式以及观察所收集的遥测数据的方式。

先决条件和限制

安装或更新 aks-preview Azure CLI 扩展

重要

AKS 预览功能是可选择启用的自助功能。 预览功能是“按现状”和“按可用”提供的,不包括在服务级别协议和有限保证中。 AKS 预览功能是由客户支持尽最大努力部分覆盖。 因此,这些功能并不适合用于生产。 有关详细信息,请参阅以下支持文章:

使用 az extension add 命令安装 aks-preview Azure CLI 扩展。

az extension add --name aks-preview

如果需要更新扩展版本,可以使用 az extension update 命令执行此操作。

az extension update --name aks-preview

注册“AzureMonitorMetricsControlPlanePreview”功能标志

使用 AzureMonitorMetricsControlPlanePreview 命令注册 AzureMonitorMetricsControlPlanePreview 功能标志,如以下示例所示:

az feature register --namespace "Microsoft.ContainerService" --name "AzureMonitorMetricsControlPlanePreview"

状态显示为“已注册”需要几分钟时间。 使用 az feature show 命令验证注册状态:

az feature show --namespace "Microsoft.ContainerService" --name "AzureMonitorMetricsControlPlanePreview"

当状态反映为“已注册”时,使用 az provider register 命令刷新 Microsoft.ContainerService 资源提供程序的注册:

az provider register --namespace "Microsoft.ContainerService"

在 AKS 群集上启用控制平面指标

可以在群集创建期间通过适用于 Prometheus 加载项的 Azure Monitor 托管服务启用控制平面指标,或为现有群集这样做。 若要从 Kubernetes 群集收集 Prometheus 指标,请参阅为 Kubernetes 群集启用 Prometheus 和 Grafana,并按照 AKS 群集的“CLI”选项卡上的步骤进行操作。 在命令行中,请务必包括参数 --generate-ssh-keys--enable-managed-identity

如果群集已部署 Prometheus 加载项,则只需运行 az aks update 来确保群集更新开始收集控制平面指标。

az aks update -n <cluster-name> -g <resource-group>

注意

与从群集节点收集的指标不同,控制平面指标是由一个不属于 ama-metrics 加载项的组件收集的。 启用 AzureMonitorMetricsControlPlanePreview 功能标志和托管 Prometheus 加载项可确保收集控制平面指标。 启用指标收集后,数据可能需要几分钟时间才会显示在工作区中。

查询控制平面指标

控制平面指标存储在群集区域的 Azure Monitor 工作区中。 可以直接从工作区或通过连接到工作区的 Azure 托管 Grafana 实例查询它们。 若要查找与群集关联的 Azure Monitor 工作区,请从所选 AKS 群集的左侧窗格导航至“监视”部分,然后选择“见解”。 在群集的“容器见解”页面上,选择“监视设置”

Azure Monitor 工作区的屏幕截图。

如果使用 Azure 托管 Grafana 来可视化数据,则可以导入以下仪表板。 AKS 提供仪表板模板来帮助你实时查看和分析控制平面遥测数据。

自定义控制平面指标

默认情况下,AK 包含一组为每个组件收集和存储的预配置指标。 默认启用 API serveretcd。 可以通过 ama-settings-configmap 自定义此列表。 此处提供了 minimal-ingestion 配置文件指标的列表。

下面列出了默认目标:

controlplane-apiserver = true
controlplane-cluster-autoscaler = false
controlplane-kube-scheduler = false
controlplane-kube-controller-manager = false
controlplane-etcd = true

各种选项与此处列出的 Azure 托管 Prometheus 类似。

所有 ConfigMap 都应应用于任何群集的 kube-system 命名空间。

仅引入默认目标的最少指标

这是设置 default-targets-metrics-keep-list.minimalIngestionProfile="true" 的默认行为。 每个默认目标仅引入本文后面列出的指标(在本例中为 controlplane-apiservercontrolplane-etcd)。

从所有目标引入所有指标

执行以下步骤,以便从群集上的所有目标收集所有指标。

  1. 下载 ConfigMap 文件 ama-metrics-settings-configmap.yaml 并将其重命名为 configmap-controlplane.yaml

  2. 设置 minimalingestionprofile = false 并验证你要在 default-scrape-settings-enabled 下抓取的目标是否设置为 true。 只能指定以下目标:controlplane-apiservercontrolplane-cluster-autoscalercontrolplane-kube-schedulercontrolplane-kube-controller-managercontrolplane-etcd

  3. 通过运行 kubectl apply 命令应用 ConfigMap。

    kubectl apply -f configmap-controlplane.yaml
    

    应用配置后,需要等待几分钟的时间,然后从控制平面抓取的指定目标的指标才会出现在 Azure Monitor 工作区中。

除了最少指标外,还引入一些其他指标

Minimal ingestion profile 是一种有助于减少指标引入量的设置,因为只有默认仪表板使用的指标,才会收集默认记录规则和默认警报。 执行以下步骤来自定义此行为。

  1. 下载 ConfigMap 文件 ama-metrics-settings-configmap 并将其重命名为 configmap-controlplane.yaml

  2. 设置 minimalingestionprofile = true 并验证你要在 default-scrape-settings-enabled 下抓取的目标是否设置为 true。 只能指定以下目标:controlplane-apiservercontrolplane-cluster-autoscalercontrolplane-kube-schedulercontrolplane-kube-controller-managercontrolplane-etcd

  3. default-targets-metrics-keep-list 下,指定 true 目标的指标列表。 例如,

    controlplane-apiserver= "apiserver_admission_webhook_admission_duration_seconds| apiserver_longrunning_requests"
    
  • 通过运行 kubectl apply 命令应用 ConfigMap。

    kubectl apply -f configmap-controlplane.yaml
    

    应用配置后,需要等待几分钟的时间,然后从控制平面抓取的指定目标的指标才会出现在 Azure Monitor 工作区中。

仅从某些目标引入特定指标

  1. 下载 ConfigMap 文件 ama-metrics-settings-configmap 并将其重命名为 configmap-controlplane.yaml

  2. 设置 minimalingestionprofile = false 并验证你要在 default-scrape-settings-enabled 下抓取的目标是否设置为 true。 只能在此处指定以下目标:controlplane-apiservercontrolplane-cluster-autoscalercontrolplane-kube-schedulercontrolplane-kube-controller-managercontrolplane-etcd

  3. default-targets-metrics-keep-list 下,指定 true 目标的指标列表。 例如,

    controlplane-apiserver= "apiserver_admission_webhook_admission_duration_seconds| apiserver_longrunning_requests"
    
  • 通过运行 kubectl apply 命令应用 ConfigMap。

    kubectl apply -f configmap-controlplane.yaml
    

    应用配置后,需要等待几分钟的时间,然后从控制平面抓取的指定目标的指标才会出现在 Azure Monitor 工作区中。

排查控制平面指标问题

请务必检查功能标志 AzureMonitorMetricsControlPlanePreview 是否已启用以及 ama-metrics Pod 是否正在运行。

注意

Azure 托管服务 Prometheus 的问题排查方法不会直接在此处进行转换,因为抓取控制平面的组件不存在于托管 Prometheus 加载项中。

ConfigMap 格式设置或错误

确保仔细检查 ConfigMap 的格式设置,以及字段是否正确填充了预期值。 特别是 default-targets-metrics-keep-listminimal-ingestion-profiledefault-scrape-settings-enabled

厘清控制平面与数据平面问题

首先将一些节点相关指标设置为 true,并验证这些指标是否转发到工作区。 这有助于确定问题是否特定于抓取控制平面指标操作。

引入的事件

应用所做的更改后,可以从“Azure Monitor 概述”页面或从所选群集的“监视”部分打开指标资源管理器。 在 Azure 门户中选择“指标”。 检查每分钟引入的事件数是增加还是减少。 它应该可以帮助你确定是缺少特定指标还是所有指标都缺失。

特定指标未公开

在某些情况下,指标已记录,但未从目标公开,也未转发到 Azure Monitor 工作区。 在这种情况下,有必要验证其他指标是否转发到工作区。

无法访问 Azure Monitor 工作区

启用加载项时,你可能指定了一个无权访问的现有工作区。 在这种情况下,指标可能看起来没有被收集和转发。 确保在启用加载项或创建群集时创建新的工作区。

在 AKS 群集上禁用控制平面指标

可以随时禁用控制平面指标,方法是禁用功能标志、禁用托管 Prometheus 或删除 AKS 群集。

在托管 Prometheus 设置后启用预览标志

如果在现有托管 Prometheus 群集上启用了预览标志 (AzureMonitorMetricsControlPlanePreview),则需要强制更新群集来发出控制平面指标

可运行 az aks update,确保群集更新开始收集控制平面指标。

az aks update -n <cluster-name> -g <resource-group>

注意

此操作不会删除存储在 Azure Monitor 工作区中的任何现有数据。

运行以下命令以删除抓取 Prometheus 指标的指标加载项。

az aks update --disable-azure-monitor-metrics -n <cluster-name> -g <cluster-resource-group>

运行以下命令,通过使用 az feature unregister 命令取消注册 AzureMonitorMetricsControlPlanePreview 功能标志,禁止抓取 AKS 群集上的控制平面指标。

az feature unregister "Microsoft.ContainerService" --name "AzureMonitorMetricsControlPlanePreview"

常见问题

  • 是否可以使用自托管的 prometheus 来抓取这些指标?

    • 目前无法使用自托管的 prometheus 来抓取控制平面指标。 自托管的 prometheus 能够根据负载均衡器抓取单个实例。 这些指标并不准确,因为控制平面指标通常有多个副本,这些副本只能通过托管 Prometheus 可见
  • 为何无法通过控制平面指标获得用户代理?

后续步骤

评估此预览功能后,请分享你的反馈。 我们很想听听你的想法。