本文介绍如何对Azure Kubernetes 服务 (AKS)启用成本分析,以查看群集资源的详细成本数据。
AKS 成本分析概述
AKS 群集依赖于Azure资源,例如虚拟机(VM)、虚拟磁盘、负载均衡器和公共 IP 地址。 多个应用程序可以使用这些资源。 每个应用程序的资源消耗模式通常不同,因此它们对群集资源总成本的贡献也可能有所不同。 某些应用程序可能跨多个群集占用空间,这在执行成本归因和成本管理时可能会带来挑战。
在 AKS 群集上启用成本分析时,可以查看作用域为 Kubernetes 构造体(例如群集和命名空间)的详细成本分配,以及 Azure 计算、网络和存储资源。 该加载项基于 OpenCost(一个开放源代码云原生计算基金会 Incubating 项目)构建,用于收集使用情况数据。 使用情况数据与Azure发票数据进行协调,以便直接在 Azure 门户中提供 AKS 群集成本的综合视图。
有关Microsoft 成本管理的详细信息,请参阅 开始分析 Azure 中的成本。
启用成本分析加载项并允许收集数据最多 24 小时后,可以使用 “了解 AKS 使用情况”和“成本 ”中的信息来帮助你了解数据。
先决条件
- 群集必须使用
Standard或Premium层,而不是Free层。 - 若要查看成本分析信息,必须在托管群集的订阅中具有以下角色之一:
Owner、Contributor、Reader、Cost Management Contributor或Cost Management Reader。 - 群集上配置的托管标识。
- 群集上启用了Azure磁盘容器存储接口 (CSI) 驱动程序。
- 如果使用 Azure CLI,则需要安装版本
2.61.0或更高版本。 - 启用成本分析后,无需先禁用成本分析,就无法将群集降级到
Free层。 - 访问 Azure API,包括 Azure 资源管理器 (ARM) API。 有关所需的完全限定域名 (FQDN) 的列表,请参阅 AKS 成本分析所需的 FQDN。
局限性
- Kubernetes 成本视图仅适用于 Enterprise 协议和 Microsoft 客户协议 Azure 产品/服务类型。 有关详细信息,请参阅 支持的 Azure 优惠。
- 目前不支持虚拟节点。
- 加载项在
usnateast、usnatwestusseceast或ussecwest区域中不可用。 有关详细信息,请参阅 AKS 成本分析加载项问题和故障排除。 - AKS 成本分析加载项支持每个群集大约 7,000 个容器,具体取决于当前的 4 GB 内存限制,并可能会更改。
在 AKS 群集上启用成本分析
可以在以下操作之一中使用 --enable-cost-analysis 标志启用成本分析:
- 创建
Standard层或Premium层 AKS 群集。 - 更新现有
Standard或Premium层 AKS 群集。 - 将
Free群集升级到Standard或Premium。 - 将
Standard群集升级到Premium。 - 将
Premium群集降级到Standard层。
在新群集上启用成本分析
使用带有 az aks create 标志的 --enable-cost-analysis 命令对新群集启用成本分析。 以下命令将在启用成本分析时在 Standard 层中创建新的 AKS 群集:
export RANDOM_SUFFIX=$(openssl rand -hex 3)
export RESOURCE_GROUP="AKSCostRG$RANDOM_SUFFIX"
export CLUSTER_NAME="AKSCostCluster$RANDOM_SUFFIX"
export LOCATION="chinanorth3"
az group create --resource-group $RESOURCE_GROUP --location $LOCATION
az aks create --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --location $LOCATION --enable-managed-identity --generate-ssh-keys --tier standard --enable-cost-analysis
结果:
{
"id": "/subscriptions/xxxxx/resourceGroups/AKSCostRGxxxx/providers/Microsoft.ContainerService/managedClusters/AKSCostClusterxxxx",
"location": "chinanorth3",
"name": "AKSCostClusterxxxx",
"properties": {
"provisioningState": "Succeeded"
},
"tags": null,
"type": "Microsoft.ContainerService/managedClusters"
}
在现有群集上启用成本分析
使用带有 az aks update 标志的 --enable-cost-analysis 命令对现有群集启用成本分析。 以下示例更新 Standard 层中的现有 AKS 群集,以启用成本分析。 将 $RESOURCE_GROUP 和 $CLUSTER_NAME 分别替换为你的资源组名称和集群名称,或者将它们设为环境变量。
az aks update --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --enable-cost-analysis
结果:
{
"id": "/subscriptions/xxxxx/resourceGroups/AKSCostRGxxxx/providers/Microsoft.ContainerService/managedClusters/AKSCostClusterxxxx",
"name": "AKSCostClusterxxxx",
"properties": {
"provisioningState": "Succeeded"
}
}
注意
启用加载项时,代理将部署到群集。 代理消耗少量 CPU 和内存资源。
警告
AKS 成本分析加载项内存使用量取决于部署的容器数。 可以粗略地使用每个容器 200 MB + 0.5 MB 来估算内存消耗。 当前内存限制设置为 4 GB,每个群集支持大约 7,000 个容器。 这些预估值可能会发生更改。
注意
启用成本分析还会创建一个 托管标识 ,该标识具有 cost-analysis-identity 对群集节点资源组的读取访问权限,并将其分配给群集中的节点池。
这用于收集群集资产的 ARM 标识符以供报告。
由于节点池已有托管标识,因此使用托管标识的节点上的任何命令都需要 指定要使用的标识 ,而不是依赖于节点池的托管标识。
例如,az login --identity --resource-id <resource ID of identity>。
在 AKS 群集上禁用成本分析
使用带有 az aks update 标志的 --disable-cost-analysis 命令禁用成本分析。
az aks update --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --disable-cost-analysis
结果:
{
"id": "/subscriptions/xxxxx/resourceGroups/AKSCostRGxxxx/providers/Microsoft.ContainerService/managedClusters/AKSCostClusterxxxx",
"name": "AKSCostClusterxxxx",
"properties": {
"provisioningState": "Succeeded"
}
}
注意
如果要在启用成本分析时将群集从 Standard 或 Premium 层降级到 Free 层,必须先禁用成本分析。
查看成本数据
可以在Azure门户中查看成本分配数据。
在Azure门户中,转到托管 AKS 群集的Azure订阅。 在“成本管理”下,选择 “成本分析”。 在 “视图 ”列表中,选择列表下拉列表项,然后选择 Kubernetes 群集。
有关详细信息,请参阅 查看 Microsoft 成本管理 中的 AKS 成本。
成本定义
在 Kubernetes 命名空间和资产视图中,可能会看到以下任何费用:
| 费用类型 | Description |
|---|---|
| 空闲费用 | 未被任何工作负载使用的可用资源容量的成本。 |
| 服务费用 | 与该服务相关的费用,例如正常运行时间 SLA、适用于容器的 Microsoft Defender 等。 |
| 系统费用 | AKS 在每个节点上为运行群集所需的系统进程(包括 kubelet 和容器运行时)而预留的容量成本。 了解详细信息。 |
| 未分配的费用 | 无法分配给命名空间的资源的成本。 |
注意
通常,系统最终确定并在 8 到 24 小时内提供成本和使用情况数据。
故障排除
如果遇到问题(例如 cost-agent Pod OOMKilled 或停滞在 Pending 状态),请参阅排查 AKS 成本分析加载项问题。
后续步骤
有关 AKS 中的成本的详细信息,请参阅 Understand Azure Kubernetes 服务 (AKS) 使用情况和成本。