你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
本文介绍如何使用控制平面指标(预览版)功能监视 Azure Kubernetes 服务 (AKS) 控制平面。
控制平面指标功能与 Prometheus 和 Grafana 完全兼容。 通过该功能,可更深入地了解控制平面组件(例如 API 服务器、ETCD、计划程序、自动缩放程序和控制器管理器)的可用性和性能。 可以使用这些指标最大程度地提高整体可观测性,并保持 AKS 群集的卓越运营。
先决条件和限制
- 控制平面指标功能(预览版)仅支持 Prometheus 的 Azure Monitor 托管服务。
- 不支持专用链接。
- 只能自定义默认
ama-metrics-settings-config-map
。 不支持所有其他自定义。 - AKS 群集必须使用托管标识身份验证。
安装 aks-preview
扩展
重要
AKS 预览功能是可选择启用的自助功能。 预览功能是“按现状”和“按可用”提供的,不包括在服务级别协议和有限保证中。 AKS 预览功能是由客户支持尽最大努力部分覆盖。 因此,这些功能并不适合用于生产。 有关详细信息,请参阅以下支持文章:
使用
az extension add
或az 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
标志
使用
az feature register
命令注册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 托管服务启用控制平面指标。
注意
与从群集节点收集的指标不同,控制平面指标是由一个不属于 ama-metrics 加载项的组件收集的。 启用 AzureMonitorMetricsControlPlanePreview
功能标志和托管 Prometheus 加载项可确保收集控制平面指标。 启用指标收集后,数据可能需要几分钟时间才会显示在工作区中。
在新的 AKS 群集上启用控制平面指标
- 若要从 Kubernetes 群集收集 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 实例查询指标。
在 Azure 门户中导航到你的 AKS 群集资源。
从服务菜单中,在监视下,选择见解。
自定义控制平面指标
警告
Bug 可防止自定义 AKS 控制平面组件的指标。 对 configMap 的更改不会生效。 请遵循此问题问题获取更新。
AKS 包含一组为每个组件收集和存储的预配置指标。 默认启用 API server
和 etcd
。 可以通过 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-apiserver
和controlplane-etcd
。
从所有目标引入所有指标
下载 ConfigMap 文件 ama-metrics-settings-configmap.yaml 并将其重命名为
configmap-controlplane.yaml
。设置
minimalingestionprofile = false
。在
default-scrape-settings-enabled
下,验证你要抓取的目标是否设置为true
。 只能指定以下目标:controlplane-apiserver
、controlplane-cluster-autoscaler
、controlplane-kube-scheduler
、controlplane-kube-controller-manager
、controlplane-etcd
。使用“
kubectl apply
”命令来应用 ConfigMap。kubectl apply -f configmap-controlplane.yaml
应用配置后,需要等待几分钟的时间,然后从控制平面抓取的指定目标的指标才会出现在 Azure Monitor 工作区中。
除了最少指标外,还引入一些其他指标
minimal ingestion profile
设置有助于减少指标引入量,因为它只收集默认仪表板使用的指标、默认记录规则和默认警报。
下载 ConfigMap 文件 ama-metrics-settings-configmap 并将其重命名为
configmap-controlplane.yaml
。设置
minimalingestionprofile = true
。在
default-scrape-settings-enabled
下,验证你要抓取的目标是否设置为true
。 只能指定以下目标:controlplane-apiserver
、controlplane-cluster-autoscaler
、controlplane-kube-scheduler
、controlplane-kube-controller-manager
、controlplane-etcd
。在
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 工作区中。
仅从某些目标引入特定指标
下载 ConfigMap 文件 ama-metrics-settings-configmap 并将其重命名为
configmap-controlplane.yaml
。设置
minimalingestionprofile = false
。在
default-scrape-settings-enabled
下,验证你要抓取的目标是否设置为true
。 只能在此处指定以下目标:controlplane-apiserver
、controlplane-cluster-autoscaler
、controlplane-kube-scheduler
、controlplane-kube-controller-manager
、controlplane-etcd
。在
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-list
、minimal-ingestion-profile
和default-scrape-settings-enabled
)已正确填充其预期值。 - 隔离控制平面与数据平面:首先设置一些节点相关指标到
true
并验证指标是否转发到工作区。 这有助于确定问题是否特定于抓取控制平面指标操作。 - 引入的事件:应用所做的更改后,可以从“Azure Monitor 概述”页面或从所选群集的“监视”部分打开指标资源管理器,并检查每分钟引入的事件数是否增加或减少。 它应该可以帮助你确定是缺少特定指标还是所有指标都缺失。
- 特定指标未公开:在某些情况下,指标已记录,但未从目标公开,也未转发到 Azure Monitor 工作区。 在这种情况下,有必要验证其他指标是否转发到工作区。
- 无法访问 Azure Monitor 工作区:启用加载项时,可以指定无权访问的现有工作区。 在这种情况下,指标可能看起来没有被收集和转发。 确保在启用加载项或创建群集时创建新的工作区。
在 AKS 群集上禁用控制平面指标
可以随时禁用控制平面指标,方法是禁用托管 Prometheus 加载项并取消注册 AzureMonitorMetricsControlPlanePreview
功能标志。
通过使用
az aks update
命令删除抓取 Prometheus 指标的指标加载项。az aks update --disable-azure-monitor-metrics --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP
通过使用
az feature unregister
命令取消注册AzureMonitorMetricsControlPlanePreview
功能标志,禁止抓取 AKS 群集上的控制平面指标。az feature unregister "Microsoft.ContainerService" --name "AzureMonitorMetricsControlPlanePreview"
常见问题解答
是否可以使用自承载 Prometheus 抓取控制平面指标?
否,目前不可以使用自承载 Prometheus 抓取控制平面指标。 自托管的 prometheus 只能根据负载均衡器抓取单个实例。 这些指标并不可靠,因为控制平面指标通常有多个副本,这些副本只能通过托管 Prometheus 可见
为什么无法通过控制平面指标获得用户代理?
Kubernetes 中的控制平面指标没有用户代理。 用户代理只能通过控制平面日志使用,控制平面日志可通过诊断设置获取。
后续步骤
有关监视 AKS 的详细信息,请参阅监视 Azure Kubernetes 服务 (AKS)。