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

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

本文介绍如何使用控制平面指标(预览版)功能监视 Azure Kubernetes 服务 (AKS) 控制平面。

控制平面指标功能与 Prometheus 和 Grafana 完全兼容。 通过该功能,可更深入地了解控制平面组件(例如 API 服务器、ETCD、计划程序、自动缩放程序和控制器管理器)的可用性和性能。 可以使用这些指标最大程度地提高整体可观测性,并保持 AKS 群集的卓越运营。

先决条件和限制

安装 aks-preview 扩展

重要

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

  • 使用 az extension addaz extension update 命令安装或更新 aks-preview 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. 使用 az feature register 命令注册 AzureMonitorMetricsControlPlanePreview 功能标志。

    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 加载项的 Azure Monitor 托管服务启用控制平面指标。

注意

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

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

在现有 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 工作区的屏幕截图。

注意

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

自定义控制平面指标

警告

Bug 可防止自定义 AKS 控制平面组件的指标。 对 configMap 的更改不会生效。 请遵循此问题问题获取更新。

AKS 包含一组为每个组件收集和存储的预配置指标。 默认启用 API serveretcd。 可以通过 ama-settings-configmap 自定义此列表。

默认目标包括以下值:

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

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

自定义引入配置文件

有关 minimal-ingestion 配置文件指标的详细信息,请参阅托管 Prometheus 中的控制平面指标的最小引入配置文件

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

  • 设置 default-targets-metrics-keep-list.minimalIngestionProfile="true",仅引入每个默认目标的最小指标集:controlplane-apiservercontrolplane-etcd

从所有目标引入所有指标

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

  2. 设置 minimalingestionprofile = false

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

  4. 使用“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

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

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

    controlplane-apiserver= "apiserver_admission_webhook_admission_duration_seconds| apiserver_longrunning_requests"
    
  5. 使用“kubectl apply”命令来应用 ConfigMap。

    kubectl apply -f configmap-controlplane.yaml
    

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

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

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

  2. 设置 minimalingestionprofile = false

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

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

    controlplane-apiserver= "apiserver_admission_webhook_admission_duration_seconds| apiserver_longrunning_requests"
    
  5. 使用“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 Monitor 工作区。 在这种情况下,有必要验证其他指标是否转发到工作区。
  • 无法访问 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. 通过使用 az feature unregister 命令取消注册 AzureMonitorMetricsControlPlanePreview 功能标志,禁止抓取 AKS 群集上的控制平面指标。

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

常见问题解答

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

否,目前不可以使用自承载 Prometheus 抓取控制平面指标。 自托管的 prometheus 只能根据负载均衡器抓取单个实例。 这些指标并不可靠,因为控制平面指标通常有多个副本,这些副本只能通过托管 Prometheus 可见

为什么无法通过控制平面指标获得用户代理?

Kubernetes 中的控制平面指标没有用户代理。 用户代理只能通过控制平面日志使用,控制平面日志可通过诊断设置获取。

后续步骤

有关监视 AKS 的详细信息,请参阅监视 Azure Kubernetes 服务 (AKS)