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

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

本文介绍如何使用 Azure Monitor 中的控制平面指标监视 Azure Kubernetes 服务(AKS)控制平面。

AKS 支持通过 Azure Monitor 平台指标免费获取的控制平面指标子集。 借助控制平面指标功能,可以查看关键控制平面组件(如 API 服务器等)、计划程序、自动缩放程序以及 AKS 中的控制器管理器的可用性和性能。 此功能还与 Prometheus 和 Azure Managed Grafana 的托管服务完全兼容。 可以使用这些指标最大程度地提高整体可观测性,并维护 AKS 群集的卓越运营。

控制平面平台指标

AKS 提供一些免费的控制平面指标,用于监视 API 服务器等。 所有 AKS 群集都会自动收集这些指标,不收取任何费用。 可以使用 Azure 门户中的 指标资源管理器分析指标 。 还可以使用指标数据创建基于指标的警报。

若要查看支持的控制平面平台指标的完整列表,请参阅 AKS 监视参考

先决条件和限制

安装 aks-preview 扩展

重要说明

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

  • 使用aks-previewaz extension add命令安装或更新 az extension update Azure CLI 扩展:

    # Install the aks-preview extension
    az extension add --name aks-preview
    
    # Update the aks-preview extension
    az extension update --name aks-preview
    

注册 AzureMonitorMetricsControlPlanePreview 功能标志

  1. 使用AzureMonitorMetricsControlPlanePreview命令注册az feature register功能标志:

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

    要过几分钟,状态才会显示为已注册

  2. 使用 az feature show 命令验证注册状态:

    az feature show --namespace "Microsoft.ContainerService" --name "AzureMonitorMetricsControlPlanePreview"
    
  3. 状态为 “已注册”时,使用 az provider register 以下命令刷新 Microsoft.ContainerService 资源提供程序的注册:

    az provider register --namespace "Microsoft.ContainerService"
    

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

创建新集群或更新现有集群时,使用 Prometheus 插件的托管服务来启用控制平面指标。

注意

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

新建 AKS 群集

若要了解如何从 AKS 群集收集 Prometheus 指标的托管服务,请参阅 为 AKS 群集启用 Prometheus 和 Grafana。 对于 AKS 群集,请完成 CLI 选项卡上所述的步骤。

现有 AKS 群集

如果群集已经安装了 Prometheus 加载项的托管服务,请更新群集,以确保它使用 az aks update 命令收集控制平面指标。

az aks update --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP

查询控制平面指标

控制平面指标存储在群集区域的 Azure Monitor 工作区中。 可以直接在工作区中查询指标,也可以使用连接到工作区的 Azure 托管 Grafana 实例来查询指标。

  1. Azure 门户中,转到 AKS 群集资源。

  2. 在左侧菜单中,选择“ 监视>监视器设置”。

    Azure Monitor 工作区示例的屏幕截图。

  3. 转到链接到群集的 Azure Monitor 工作区。

    链接的 Azure Monitor 工作区的屏幕截图。

  4. 在 Azure Monitor 工作区的“托管 Prometheus”下,使用 Prometheus 资源管理器查询指标。

    显示 Prometheus 资源管理器体验的屏幕截图。

注意

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

自定义控制平面指标

AKS 包含一组为每个组件收集和存储的预配置指标。 默认情况下收集 API 服务器和 etcd 的指标。 可以通过修改 configmap 文件自定义所收集的指标列表。

默认目标包括以下值:

controlplane-apiserver = true
controlplane-cluster-autoscaler = false
controlplace-node-auto-provisioning = false
controlplane-kube-scheduler = false
controlplane-kube-controller-manager = false
controlplane-etcd = true

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

自定义引入配置文件

可以为收集的指标自定义引入文件。 有关详细信息,请参阅适用于 Prometheus 的托管服务中控制平面指标的最小引入配置文件

仅从默认目标引入最小指标

  • 设置为 default-targets-metrics-keep-list.minimalIngestionProfiletrue,因此它只引入每个默认目标的最小指标集: controlplane-apiservercontrolplane-etcd

从所有目标引入所有指标

  1. 下载 ama-metrics-settings-configmap.yaml configmap 文件。

  2. 重命名 configmap 文件 configmap-controlplane.yaml

  3. minimalingestionprofile 设置为 false

  4. default-scrape-settings-enabled 下,验证你要抓取的目标是否设置为 true

    可以设置的目标包括:

    • controlplane-apiserver
    • controlplane-cluster-autoscaler
    • controlplace-node-auto-provisioning
    • controlplane-kube-scheduler
    • controlplane-kube-controller-manager
    • controlplane-etcd
  5. 使用 kubectl apply 命令应用 configmap 文件:

    kubectl apply -f configmap-controlplane.yaml
    

应用配置后,从控制平面中抓取的指定目标的指标需要几分钟时间才能显示在 Azure Monitor 工作区中。

引入超过最小量的指标

minimalingestionprofile使用此设置有助于减少指标的引入量。 如果设置为 true,则仅收集默认记录规则、默认警报和默认仪表板中显示的指标。

  1. 下载 ama-metrics-settings-configmap.yaml configmap 文件。

  2. 重命名 configmap 文件 configmap-controlplane.yaml

  3. minimalingestionprofile 设置为 true

  4. default-scrape-settings-enabled 下,验证你要抓取的目标是否设置为 true

    可以设置的目标包括:

    • controlplane-apiserver
    • controlplane-cluster-autoscaler
    • controlplane-node-auto-provisioning
    • controlplane-kube-scheduler
    • controlplane-kube-controller-manager
    • controlplane-etcd
  5. default-targets-metrics-keep-list 下,指定 true 目标的指标列表。

    例如:

    controlplane-apiserver= "apiserver_admission_webhook_admission_duration_seconds|apiserver_longrunning_requests"
    
  6. 使用 kubectl apply 命令应用 configmap 文件:

    kubectl apply -f configmap-controlplane.yaml
    

应用配置后,从控制平面中抓取的指定目标的指标需要几分钟时间才能显示在 Azure Monitor 工作区中。

从特定目标引入特定指标

  1. 下载 ama-metrics-settings-configmap.yaml configmap 文件。

  2. 重命名 configmap 文件 configmap-controlplane.yaml

  3. minimalingestionprofile 设置为 false

  4. default-scrape-settings-enabled下,核实要抓取的目标是否已设置为true

    可以设置的目标包括:

    • controlplane-apiserver
    • controlplane-cluster-autoscaler
    • controlplane-node-auto-provisioning
    • controlplane-kube-scheduler
    • controlplane-kube-controller-manager
    • controlplane-etcd
  5. default-targets-metrics-keep-list 下,指定 true 目标的指标列表。

    例如:

    controlplane-apiserver= "apiserver_admission_webhook_admission_duration_seconds|apiserver_longrunning_requests"
    
  6. 应用 configmap 文件:

    kubectl apply -f configmap-controlplane.yaml
    

应用配置后,从控制平面中抓取的指定目标的指标需要几分钟时间才能显示在 Azure Monitor 工作区中。

排查控制平面指标问题

确保已启用 AzureMonitorMetricsControlPlanePreview 功能标志,并确保 ama-metrics Pod 正在运行。

注意

Prometheus 托管服务的 故障排除方法 在此方案中不直接应用。 抓取控制平面的组件不包括在适用于 Prometheus 加载项的托管服务中。

  • Configmap 文件格式:请确保在 configmap 文件中使用正确的格式。 验证字段default-targets-metrics-keep-listminimal-ingestion-profiledefault-scrape-settings-enabled字段和其他字段是否已正确填充其预期值。

  • 将控制平面与数据平面隔离:首先将一些与节点相关的指标true设置为,然后验证指标是否已转发到工作区。 完成这些步骤有助于确定问题是否是由抓取控制平面指标引起的。

  • 引入的事件数发生更改:应用更改后,可以在 Azure 门户中打开指标资源管理器。 转到群集的 Azure Monitor 概述窗格,或转到所选群集的 “监视 ”部分。 检查每分钟引入的事件数是否增加或减少。 此信息可以帮助你确定特定指标是否缺失,或者是否缺少所有指标。

  • 未公开特定指标:在某些情况下,会记录指标,但不会从目标公开指标,也不会转发到 Azure Monitor 工作区。 在这种情况下,必须验证是否将其他指标转发到工作区。

    注意

    如果要收集 apiserver_request_duration_seconds 指标或其他 Bucket 指标,必须在直方图系列中设置整个系列:

    controlplane-apiserver = "apiserver_request_duration_seconds_bucket|apiserver_request_duration_seconds_sum|apiserver_request_duration_seconds_count"
    
  • 无法访问 Azure Monitor 工作区:启用加载项时,可以指定无法访问的现有工作区。 在这种情况下,似乎不会收集和转发指标。 确保在启用加载项或创建群集时创建用于收集指标的新工作区。

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

可以通过禁用适用于 Prometheus 加载项的托管服务并取消注册 AzureMonitorMetricsControlPlanePreview 功能标志,随时禁用控制平面指标。

  1. 使用 az aks update 命令删除抓取 Prometheus 指标的指标加载项:

    az aks update --disable-azure-monitor-metrics --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP
    
  2. 若要禁止 AKS 群集抓取控制平面指标,请通过 AzureMonitorMetricsControlPlanePreview 命令取消注册 az feature unregister 功能标志:

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

常见问题

是否可以使用自承载 Prometheus 来抓取控制平面指标?

否。 目前无法使用自承载 Prometheus 来抓取控制平面指标。 自承载 Prometheus 只能抓取单个实例,具体取决于负载均衡器,因此指标不可靠。 通常,控制平面指标的多个副本只能通过 Prometheus 的托管服务可见。

为什么控制平面指标中不提供用户代理?

在 AKS 中, 控制平面指标 没有用户代理。 用户代理只能通过在 诊断设置中访问的控制平面日志使用。