你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
本文介绍如何使用托管的 Prometheus 和 Grafana 与 BYO Prometheus 和 Grafana 设置为 Azure Kubernetes 服务 (AKS) 设置容器网络可观测性,以可视化已抓取的指标
可以使用容器网络可观测性收集有关 AKS 群集的网络流量数据。 它提供了一个用于监视应用程序和网络健康状况的集中式平台。 目前,可使用 Prometheus 存储指标并使用 Grafana 可视化它们。 容器网络可观测性还提供启用 Hubble 的功能。 Cilium 和非 Cilium 群集都支持这些功能。
容器网络可观测性是高级容器网络服务的功能之一。 有关 Azure Kubernetes 服务 (AKS) 的高级容器网络服务的详细信息,请参阅什么是 Azure Kubernetes 服务 (AKS) 的高级容器网络服务。
先决条件
- 具有活动订阅的 Azure 帐户。 如果还没有该订阅,可以在开始前创建一个免费帐户。
在 Azure Cloud Shell 中使用 Bash 环境。 有关详细信息,请参阅开始使用 Azure Cloud Shell。
如需在本地运行 CLI 参考命令,请安装 Azure CLI。 如果在 Windows 或 macOS 上运行,请考虑在 Docker 容器中运行 Azure CLI。 有关详细信息,请参阅如何在 Docker 容器中运行 Azure CLI。
如果使用的是本地安装,请使用 az login 命令登录 Azure CLI。 若要完成身份验证过程,请遵循终端中显示的步骤。 有关其他登录选项,请参阅 使用 Azure CLI 向 Azure 进行身份验证。
出现提示时,请在首次使用时安装 Azure CLI 扩展。 有关扩展详细信息,请参阅使用和管理 Azure CLI 的扩展。
运行 az version 以查找安装的版本和依赖库。 若要升级到最新版本,请运行 az upgrade。
- 本文中的步骤所需的 Azure CLI 最低版本为 2.56.0。 运行
az --version
即可查找版本。 如果需要进行安装或升级,请参阅安装 Azure CLI。
启用高级容器网络服务
若要继续,必须有一个启用了高级容器网络服务的 AKS 群集。
具有高级容器网络服务标志 az aks create
的 --enable-acns
命令创建一个新的 AKS 群集,它具有所有高级容器网络服务功能。 这些功能包括:
- Cilium
- 非 Cilium
注意
从 Kubernetes 版本 1.29 开始,具有 Cilium 数据平面的群集支持容器网络可观测性和容器网络安全。
# Set an environment variable for the AKS cluster name. Make sure to replace the placeholder with your own value.
export CLUSTER_NAME="<aks-cluster-name>"
# Create an AKS cluster
az aks create \
--name $CLUSTER_NAME \
--resource-group $RESOURCE_GROUP \
--generate-ssh-keys \
--___location eastus \
--max-pods 250 \
--network-plugin azure \
--network-plugin-mode overlay \
--network-dataplane cilium \
--node-count 2 \
--pod-cidr 192.168.0.0/16 \
--kubernetes-version 1.29 \
--enable-acns
在现有群集上启用高级容器网络服务
具有高级容器网络服务标志 az aks update
的 --enable-acns
命令使用所有高级容器网络服务功能(包括容器网络可观测性和容器网络安全功能)更新现有 AKS 群集。
注意
只有具有 Cilium 数据平面的群集才支持高级容器网络服务的容器网络安全功能。
az aks update \
--resource-group $RESOURCE_GROUP \
--name $CLUSTER_NAME \
--enable-acns
获取群集凭据
一旦您使用 az aks get-credentials
命令获取了群集凭据。
az aks get-credentials --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP
Azure 托管的 Prometheus 和 Grafana
如果使用 BYO Prometheus 和 Grafana,请跳过本部分
使用以下示例为 AKS 群集安装并启用 Prometheus 和 Grafana。
创建 Azure Monitor 资源
#Set an environment variable for the Grafana name. Make sure to replace the placeholder with your own value.
export AZURE_MONITOR_NAME="<azure-monitor-name>"
# Create Azure monitor resource
az resource create \
--resource-group $RESOURCE_GROUP \
--namespace microsoft.monitor \
--resource-type accounts \
--name $AZURE_MONITOR_NAME \
--___location eastus \
--properties '{}'
创建 Azure 托管 Grafana 实例
使用 az grafana create 创建 Grafana 实例。 Grafana 实例的名称必须唯一。
# Set an environment variable for the Grafana name. Make sure to replace the placeholder with your own value.
export GRAFANA_NAME="<grafana-name>"
# Create Grafana instance
az grafana create \
--name $GRAFANA_NAME \
--resource-group $RESOURCE_GROUP
将 Azure 托管 Grafana 和 Azure Monitor 资源 ID 放在变量中
使用 az grafana show 将 Grafana 资源 ID 放在变量中。 使用 az resource show 将 Azure Monitor 资源 ID 放在变量中。 将 myGrafana 替换为 Grafana 实例的名称。
grafanaId=$(az grafana show \
--name $GRAFANA_NAME \
--resource-group $RESOURCE_GROUP \
--query id \
--output tsv)
azuremonitorId=$(az resource show \
--resource-group $RESOURCE_GROUP \
--name $AZURE_MONITOR_NAME \
--resource-type "Microsoft.Monitor/accounts" \
--query id \
--output tsv)
将 Azure Monitor 和 Azure 托管 Grafana 链接到 AKS 群集
使用 az aks update 将 Azure Monitor 和 Grafana 资源链接到 AKS 群集。
az aks update \
--name $CLUSTER_NAME \
--resource-group $RESOURCE_GROUP \
--enable-azure-monitor-metrics \
--azure-monitor-workspace-resource-id $azuremonitorId \
--grafana-resource-id $grafanaId
可视化
使用 Azure 托管 Grafana 实现可视化
如果使用 BYO Grafana,请跳过此步骤
注意
由于大规模集群中的指标基数较高,因此默认情况下不会抓取 hubble_flows_processed_total
指标。
因此,Pods Flows仪表板的面板有数据缺失。 若要启用此指标并填充缺失的数据,需要修改 ama-metrics-settings-configmap。 具体而言,更新 default-targets-metrics-keep-list 部分内容。 按照以下步骤更新 configmap:
- 获取最新的 ama-metrics-settings-configmap。(https://github.com/Azure/prometheus-collector/blob/main/otelcollector/configmaps/ama-metrics-settings-configmap.yaml)
- 定位到 networkobservabilityHubble = ""
- 将其更改为 networkobservabilityHubble = “hubble.*”
- 现在,Pod 流指标应填充。
若要详细了解最小化摄取,请参阅最小化摄取文档。
使用
kubectl get pods
命令确保 Azure Monitor Pod 正在运行。kubectl get pods -o wide -n kube-system | grep ama-
输出应类似于以下示例输出:
ama-metrics-5bc6c6d948-zkgc9 2/2 Running 0 (21h ago) 26h ama-metrics-ksm-556d86b5dc-2ndkv 1/1 Running 0 (26h ago) 26h ama-metrics-node-lbwcj 2/2 Running 0 (21h ago) 26h ama-metrics-node-rzkzn 2/2 Running 0 (21h ago) 26h ama-metrics-win-node-gqnkw 2/2 Running 0 (26h ago) 26h ama-metrics-win-node-tkrm8 2/2 Running 0 (26h ago) 26h
我们已创建示例仪表板。 可以在“仪表板”>“Azure 托管 Prometheus”文件夹下找到它们。 它们的名称类似于“Kubernetes/Networking/
<name>
”。 仪表板套件包括:- 群集:显示群集的节点级指标。
- DNS(群集):显示群集上的 DNS 指标或节点选择。
- DNS(工作负载):显示指定工作负载(例如 DaemonSet 或 CoreDNS 等部署的 Pod)的 DNS 指标。
- 丢弃(工作负载):显示传入/传出指定工作负载(例如部署或 DaemonSet 的 Pod)的丢弃。
- Pod 流(命名空间):显示传入/传出指定命名空间(即命名空间中的 Pod)的 L4/L7 数据包流。
- Pod 流(工作负载):显示传入/传送出指定工作负载(例如部署或 DaemonSet 的 Pod)的第 4 层 / 第 7 层数据包流量。
使用 BYO Grafana 进行可视化
如果使用 Azure 托管 Grafana,请跳过此步骤
将以下抓取作业添加到现有 Prometheus 配置,并重启 Prometheus 服务器:
- job_name: networkobservability-hubble kubernetes_sd_configs: - role: pod relabel_configs: - target_label: cluster replacement: myAKSCluster action: replace - source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_pod_label_k8s_app] regex: kube-system;(retina|cilium) action: keep - source_labels: [__address__] action: replace regex: ([^:]+)(?::\d+)? replacement: $1:9965 target_label: __address__ - source_labels: [__meta_kubernetes_pod_node_name] target_label: instance action: replace metric_relabel_configs: - source_labels: [__name__] regex: '|hubble_dns_queries_total|hubble_dns_responses_total|hubble_drop_total|hubble_tcp_flags_total' # if desired, add |hubble_flows_processed_total action: keep
在 Prometheus 的“目标”中,验证 network-obs-pods 是否存在。
登录到 Grafana 并使用以下 ID 导入以下示例仪表板:
- 群集:显示群集的节点级指标。 (ID 18814)
- DNS(群集):显示群集上的 DNS 指标或节点选择。(ID 20925)
- DNS(工作负载):显示指定工作负载(例如 DaemonSet 或 CoreDNS 等部署的 Pod)的 DNS 指标。 (ID [20926] https://grafana.com/grafana/dashboards/20926-kubernetes-networking-dns-workload/)
- 丢弃(工作负载):显示传入/传出指定工作负载(例如部署或 DaemonSet 的 Pod)的丢弃(ID:20927)。
- Pod 流(命名空间):显示传入/传出指定命名空间(即命名空间中的 Pod)的 L4/L7 数据包流。 (ID 20928)
- Pod 流(工作负载):显示传入/传出指定工作负载(例如部署或 DaemonSet 的 Pod)的 L4/L7 数据包流。(ID 20929)
注意
- 根据 Prometheus/Grafana 实例的设置,某些仪表板面板可能需要调整才能显示所有数据。
- Cilium 目前不支持 DNS 指标/仪表板。
清理资源
如果不打算使用此应用程序,请使用 az group delete
命令删除本文中创建的其他资源。
az group delete --name $RESOURCE_GROUP
后续步骤
本操作指南文章介绍了如何为 AKS 群集安装和启用容器网络可观测性。
有关 Azure Kubernetes 服务 (AKS) 的高级容器网络服务的详细信息,请参阅什么是 Azure Kubernetes 服务 (AKS) 的高级容器网络服务。
有关容器网络安全及其功能的详细信息,请参阅什么是容器网络安全?。