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

Kubernetes 的成本管理

Azure 成本管理
Azure Kubernetes 服务 (AKS)
Azure 托管磁盘
Azure 存储
Azure 虚拟机

本指南介绍了与 Amazon Elastic Kubernetes 服务 (Amazon EKS) 相比,Azure Kubernetes 服务 (AKS) 中的定价和成本管理方式。 本文介绍了如何为 AKS 群集优化成本和实施成本治理解决方案。

注意

本文是系列文章之一,可帮助熟悉 Amazon EKS 的专业人员了解 Azure Kubernetes 服务 (AKS)

Amazon EKS 成本基础知识

Amazon EKS 中,你按照固定的每小时价格来支付 Amazon EKS 群集费用。 你还需要支付群集使用的网络、操作工具和存储的费用。

Amazon EKS 工作线程节点是标准的 Amazon EC2 实例,因此它们会按照常规的 Amazon EC2 价格计费。 你还需要支付你为了运行 Kubernetes 工作程序节点而配置的其他 Amazon Web Services (AWS) 资源的费用。

使用 Amazon EKS 托管节点组没有任何额外成本。 你只需为你预配的 AWS 资源付费,包括 Amazon EC2 实例、Amazon EBS 卷、Amazon EKS 群集小时数以及任何其他 AWS 基础设施。

创建托管节点组时,你可以选择使用按需或现成实例容量类型来管理代理节点的成本。 Amazon EKS 使用包含所有按需实例或所有现成实例的 Amazon EC2 自动缩放组部署托管节点组。

使用按需实例,你可以按秒为计算容量付费,无需长期承诺。 Amazon EC2 现成实例是备用 Amazon EC2 容量,提供的折扣与按需价格相差无几。

  • 当 EC2 需要恢复容量时,Amazon EC2 现成实例可以被中断,并且会发出一份两分钟中断通知。

  • Amazon 提供现成机群(一种自动化按需和现成实例组的方法)和现成实例顾问,以帮助预测哪个区域或可用区的中断时间可能最短。

  • AWS 现成实例价格各不相同。 AWS 根据现成实例容量的长期供需趋势设置价格,你需要按照实例启动期间的有效价格支付费用。

Azure Kubernetes 服务成本分析

Azure Kubernetes 服务 (AKS) 群集依赖于各种 Azure 资源,例如虚拟机、虚拟磁盘、负载均衡器和公共 IP 地址。 这些资源可以由多个应用程序使用,这些应用程序可能由组织内的不同团队管理。 这些资源的消耗模式可能会有所不同,从而导致对群集资源总成本的贡献不同。 此外,一些应用程序可能跨越多个群集,这使得成本归属和管理成为一项挑战。

对于群集包含单个工作负载的方案,可以使用 Microsoft 成本管理来度量群集资源组下的群集资源消耗量。 但是,该解决方案本身并没有涵盖某些方案,例如:

  • 资源使用情况的精细明细,如计算、网络和存储。
  • 区分单个应用程序成本和共享成本。
  • 分析同一订阅范围内多个群集的成本。

为了提高成本可观测性,AKS 已与 Microsoft 成本管理集成,在 Kubernetes 结构(如群集和命名空间)中提供详细的成本钻取。 这种集成支持对 Azure 计算、网络和存储类别进行成本分析。

AKS 成本分析加载项建立在 OpenCost 之上,这是一个用于使用数据收集的开源项目。 它通过将数据与 Azure 发票进行核对来提供成本可见性。 后处理的数据在成本管理成本分析门户中直接可见。 有关详细信息,请参阅 Azure Kubernetes 服务成本分析

成本定义

在 Kubernetes 命名空间和资产视图中,你将看到费用,例如:

  • 空闲费用:表示未由任何工作负载使用的可用资源容量的成本。
  • 服务费用:表示与运行时间服务级别协议 (SLA) 和 Microsoft Defender for Containers 等服务关联的费用。
  • 系统费用:表示 AKS 在每个节点上为运行群集所需的系统进程而保留的容量成本。
  • 未分配的费用:表示无法分配给命名空间的资源的成本。

AKS 成本基础知识

Kubernetes 体系结构基于两层:控制平面以及一个或多个节点或节点池。 AKS 定价模型基于两个 Kubernetes 体系结构层。

  • 控制平面提供核心 Kubernetes 服务,例如 API 服务器和 etcd 以及应用程序工作负载编排。 Azure 平台管理 AKS 控制平面,对于 AKS 免费层,控制平面没有任何成本

  • 节点,也称为代理节点工作器节点,承载 Kubernetes 工作负载和应用程序。 在 AKS 中,客户全权负责管理并支付代理节点的所有费用。

下图显示了 AKS Kubernetes 体系结构中控制平面和节点之间的关系。

显示 AKS 体系结构中的控制平面和节点的图表。

控制面板

创建 AKS 群集时,Azure 会自动预配和配置控制平面层。 对于 AKS 免费层,控制平面是免费的。

对于更高的控制平面服务级别协议 (SLA),你可以在标准层创建 AKS 群集。 运行时间 SLA 默认包含在标准层中,并按群集启用。 定价为每个群集每小时 0.10 美元。 有关详细信息,请参阅 AKS 定价详细信息

标准层中的群集具有更多的控制平面资源,例如 API 服务器实例的数量、Etcd 资源限制、高达 5000 个节点的可缩放性以及现有的有资金保障的运行时间 SLA 支持。 AKS 跨更新域和容错域使用主节点副本,以满足可用性要求。

最好是在生产工作负载中使用标准层以提供更高的控制平面组件可用性。 免费层群集的副本较少,并且控制平面资源受到限制,不建议用于生产工作负载。

Nodes

在 AKS 中,你可以在一个或多个节点池中创建代理或工作节点,这些节点可以使用 Kubernetes 环境中的许多 Azure 核心功能。 AKS 仅对附加到 AKS 群集的节点收费。

AKS 节点使用多个 Azure 基础结构资源(包括虚拟机规模集、虚拟网络和托管磁盘)。 例如,你可以直接在 AKS 中使用大多数 Azure 虚拟机 (VM) 类型。 可以使用 Azure 预留适用于计算的 Azure 节省计划,以获得这些资源的大幅折扣。

AKS 群集定价基于节点池中 VM 的类别、数量和大小。 VM 成本取决于大小、CPU 类型、vCPU 数量、内存、系列和可用存储类型,例如高性能固态硬盘 (SSD) 或标准 HDD。 有关详细信息,请参阅虚拟机系列。 根据应用需求、节点数量和群集可扩展性需求来规划节点大小。

有关代理节点和节点池的详细信息,请参阅本系列中的节点池一文,以及在 Azure Kubernetes 服务 (AKS) 中为群集创建和管理多个节点池

AKS 群集部署

每个 AKS 部署都跨越两个 Azure 资源组。

  • 你创建第一个资源组,其中仅包含 Kubernetes 服务资源并且没有与之关联的成本。

  • 在部署期间,AKS 资源提供程序自动创建第二个或节点资源组。 此资源组的默认名称是 MC_<resourcegroupname>_<clustername>_<location>,但你可以指定其他名称。 有关详细信息,请参阅为 AKS 节点资源组提供我自己的名称

    节点资源组包含所有群集基础架构资源,是显示订阅费用的资源组。 这些资源包括 Kubernetes 节点 VM、虚拟网络、存储和其他服务。 删除群集后,AKS 会自动删除节点资源组,因此,你只能将其用于共享群集生命周期的资源。

计算成本

你根据 Azure VM 的大小和使用情况为其付费。 有关 Azure 计算与 AWS 的比较信息,请参阅 Azure 和 AWS 上的计算服务

通常,你为节点池选择的 VM 大小越大,代理节点的每小时成本就越高。 用于节点池的 VM 系列的专业程度越高,例如启用图形处理单元 (GPU) 或内存优化,池的成本就越高。

在研究 Azure VM 定价时,请注意以下几点:

  • 定价因地区而异,并非所有服务和 VM 大小在每个地区都可用。

  • 有多个 VM 系列,针对不同类型的工作负载进行了优化。

  • 用作操作系统驱动器的托管磁盘单独收费,你必须将其成本添加到你的估算中。 托管磁盘大小取决于等级,例如标准 HDD、标准 SSD、高级 SSD 或超级磁盘存储。 每秒输入输出操作 (IOPS) 和以 MB/秒为单位的吞吐量取决于大小和类别。 临时 OS 磁盘是免费的,并且包含在 VM 价格中。

  • 数据磁盘(包括使用持久卷声明创建的磁盘)是可选的,并根据其类别单独收费,例如标准 HDD、标准 SSD、高级 SSD 和超级磁盘存储。 必须明确将数据磁盘添加到成本估算中。 允许的数据磁盘数量、临时存储 SSD、IOPS 和吞吐量(以 MB/秒为单位)取决于 VM 大小和等级。

  • 代理节点正常运行的时间越长,总群集成本就越高。 开发环境通常不需要连续运行。

  • 网络接口 (NIC) 是免费的。

存储成本

容器存储接口 (CSI) 是有关在 Kubernetes 上的容器化工作负载中公开块和文件存储系统的一套标准。 通过采用和使用 CSI,AKS 可以编写、部署和迭代公开 Kubernetes 存储系统的插件,而无需触及核心 Kubernetes 代码或等待其发布周期。

如果在 AKS 群集上运行使用 CSI 持久卷的工作负载,请考虑你的应用程序预配和使用时的存储方面的相关成本。 AKS 上的 CSI 存储驱动程序为以下存储选项提供本机支持:

  • Azure 磁盘创建 Kubernetes 数据磁盘资源。 Azure 磁盘可以使用由高性能 SSD 支持的 Azure 高级存储,也可以使用由普通 HDD 或标准 SSD 支持的 Azure 标准存储。 大部分生产和开发工作负载都使用高级存储。 Azure 磁盘挂载为 ReadWriteOnce,这使得 Azure 磁盘只能用于一个 AKS 节点。 对于多个 Pod 可以同时访问的存储卷,请使用 Azure 文件存储。 有关成本信息,请参阅托管磁盘定价

  • Azure 文件存储可将由 Azure 存储帐户支持的服务器消息块 (SMB) 3.0/3.1 文件共享装载到 AKS Pod。 可以跨多个节点和 Pod 共享数据。 Azure 文件存储可以使用由常规 HDD 支持的标准存储,也可以使用由高性能 SSD 支持的高级存储。 Azure 文件存储使用 Azure 存储帐户,并根据以下因素产生计费:

    • 服务:Blob、文件、队列、表或非托管磁盘
    • 存储帐户类型:GPv1、GPv2、Blob 或高级 Blob
    • 冗余:本地冗余存储 (LRS)、区域冗余存储 (ZRS)、异地冗余存储 (GRS) 或读取访问异地冗余存储 (RA-GRS)
    • 访问层:热、冷或存档
    • 操作和数据传输
    • 已用容量 (GB)
  • Azure NetApp 文件在多个 SKU 层中可用,并且需要 4 TiB 的最小预配容量,增量为 1 TiB。 Azure NetApp 文件费用基于以下因素:

    • SKU
    • 弹性:LRS、ZRS 或 GRS
    • 预配的大小或容量,而不是使用的容量
    • 操作次数和数据传输量
    • 备份和还原

网络成本

多种 Azure 网络服务可以提供对 AKS 中运行的应用程序的访问:

  • Azure 负载均衡器。 默认情况下,负载均衡器使用标准 SKU。 负载均衡器费用基于以下因素:

    • 规则:已配置的负载均衡和出站规则的数目。 入站网络地址转换 (NAT) 规则不计入规则总数。
    • 已处理的数据:处理的入站和出站数据的数量,与规则无关。 如果未配置规则,则标准负载均衡器不按小时收费。
  • Azure 应用程序网关。 AKS 通常通过应用程序网关入口控制器使用应用程序网关,或者通过手动管理的应用程序网关在不同的入口控制器前面使用应用程序网关。 应用程序网关支持网关路由、传输层安全 (TLS) 终止和 Web 应用程序防火墙功能。 应用程序网关费用基于以下因素:

    • 按完整小时或不完整小时设定的固定价格。
    • 容量单位价格,基于消耗的附加成本。 每个容量单元最多具有一个计算单元、2500 个持久连接和 2.22 Mbps 吞吐量。
  • 公共 IP 地址的相关成本取决于:

    • 保留与动态关联。
    • 基本与安全和区域冗余标准层。

横向扩展成本

有多种选项可用于扩展 AKS 群集以向节点池添加额外容量:

  • 根据需要,你可以手动更新属于节点池的 VM 数量,或添加更多节点池。

  • AKS 群集自动缩放器监视因资源限制而无法在节点上调度的 Pod,并自动增加节点数量。

  • AKS 支持使用虚拟 kubelet 实现在 Azure 容器实例上运行容器。 AKS 虚拟节点预配可在几秒钟内启动的容器实例 Pod,让 AKS 以足够的容量运行平均工作负载。 由于 AKS 群集容量不足,你可以扩展更多容器实例 Pod,而无需管理任何额外的服务器。 可以将此方法与群集自动缩放器和手动缩放相结合。

如果你使用按需扩展或群集自动扩展程序,请考虑添加的 VM。 容器实例费用基于以下因素:

  • 每个容器组的基于使用量的指标计费
  • vCPU 和内存的集合
  • 单容器使用还是多容器共享
  • 是否使用了共享网络和节点生命周期的协同调度容器
  • 使用持续时间,计算方法是从从映像拉取启动或重新启动直至停止的时间范围
  • Windows 容器组的额外费用

升级费用

AKS 群集生命周期的一部分涉及到定期升级到最新的 Kubernetes 版本。 应用最新的安全版本并获得最新的功能非常重要。 你可以手动或自动升级 AKS 群集和单节点池。 有关详细信息,请参阅升级 Azure Kubernetes 服务 (AKS) 群集

默认情况下,AKS 会将升级配置为使用一个额外节点进行激增。 max-surge 设置的默认值 1 通过在封锁或耗尽现有应用程序之前创建一个额外的节点来替换旧版本的节点来最大限度地减少工作负载中断。 你可以自定义每个节点池的 max-surge 值,以便在升级速度和升级中断之间进行权衡。 增大 max-surge 值可以更快地完成升级过程,但 max-surge 的值增大可能会导致升级过程中断,并导致额外 VM 的成本增加。

其他成本

根据使用情况和要求,AKS 群集可能会产生以下额外成本:

成本优化

以下建议可帮助你优化 AKS 群集成本:

  • 查看适用于 AKS 的 Azure 架构良好的框架的成本优化部分。

  • 对于多租户解决方案,物理隔离成本更高,并且增加了管理开销。 逻辑隔离需要更多 Kubernetes 经验,并增加了变更和安全威胁的外围应用,但会分摊成本。

  • Azure 预留可以通过为多种产品(例如 AKS 群集中的 VM)承诺一年或三年计划来帮助你节省资金。 可以通过预留容量获得折扣。 对存储计算使用 Azure 预留,以降低代理节点的成本。

    与即用即付价格相比,预留可以将你的资源成本降低多达 72%,并且不会影响资源的运行时状态。 购买预留项后,折扣会自动应用于匹配的资源。 可以从 Azure 门户购买预留,也可以使用 Azure REST API、PowerShell 或 Azure CLI 来购买。 如果你使用依赖于 Log Analytics 工作区的操作工具,请考虑也为此存储使用预留。

  • 将一个或多个现成节点池添加到你的 AKS 群集。 现成节点池是 Azure 现成虚拟机规模集支持的节点池。 将现成 VM 用于 AKS 群集节点可以利用未使用的 Azure 容量,从而大幅节省成本。 可用的未用容量因很多因素而异,包括节点大小、区域、时间等。 如果有可用容量,Azure 会分配现成节点,但现成节点没有 SLA。 支持现成节点池的现成规模集部署在单个容错域中,不提供高可用性保证。 在 Azure 需要恢复容量时,Azure 基础结构会逐出现场节点。

    创建现成节点池时,你可以定义每小时支付的最高价格并启用群集自动扩缩器,建议对现成节点池采用这种方法。 群集自动缩放器根据运行的工作负载横向扩展和横向缩减节点池中的节点数量。 对于现成节点池,如果仍需要更多节点,则群集自动缩放程序将在逐出之后横向扩展节点数。 有关详细信息,请参阅向 Azure Kubernetes 服务 (AKS)群集添加现成节点池

  • 根据工作负载的 CPU 和内存需求,为 AKS 群集节点池选择合适的 VM 大小。 Azure 提供了许多不同的 VM 实例类型,它们与广泛的用例相匹配,具有不同的 CPU、内存、存储和网络容量组合。 每种类型都有一个或多个大小,以便于轻松扩展资源。

    现在可以使用在基于 Ampere Altra ARM 的处理器上运行的 AKS 来部署和管理容器化应用程序。 有关详细信息,请参阅具有基于 Ampere Altra ARM 的处理器的 Azure 虚拟机

  • 为特殊用途和工作负载创建具有不同 VM 大小的多个节点池。 使用 Kubernetes 排斥和容许节点标签将资源密集型应用程序放在特定节点池上,并避免出现干扰邻居问题。 将节点资源保留给需要它们的工作负载使用,并且不要在这些节点上计划其他工作负载。 对不同的节点池使用不同的 VM 大小也可以优化成本。 有关详细信息,请参阅在 Azure Kubernetes 服务 (AKS) 中使用多个节点池

  • 系统模式节点池必须至少包含一个节点,而用户模式节点池可以包含零个或多个节点。 尽可能将用户模式节点池配置为自动从 0 扩展到 N 节点。 可以使用水平 Pod 自动扩缩器将工作负荷配置为横向扩展和横向缩减。 基于 CPU 和内存的自动缩放,或使用 Kubernetes 事件驱动的自动缩放 (KEDA) 基于外部系统(如 Apache Kafka、RabbitMQ 或 Azure 服务总线)的指标进行自动缩放。

  • 确保为你的 pod 正确设置请求和限制,以提高应用程序密度并避免为你的工作负载分配过多的 CPU 和内存资源。 使用 Prometheus 或 Container Insights 观察 CPU 和内存的平均和最大消耗。 在 YAML 清单、Helm 图表和 Kustomize 清单中,针对你的部署正确配置限制和配额。

  • 使用 ResourceQuota 对象为在给定命名空间中运行的所有 Pod 设置内存和 CPU 总量的配额。 系统性运用资源配额避免了邻居干扰问题,提高了应用程序密度,并减少了代理节点的数量和总成本。 还可以使用 LimitRange 对象为命名空间中的 Pod 配置默认 CPU 和内存请求。

  • 使用容器实例进行突发。

  • 你的 AKS 工作负载可能不需要连续运行,例如开发群集节点池中的特定工作负载。 要优化成本,你可以完全关闭 AKS 群集或停止 AKS 群集中的一个或多个节点池。 有关详细信息,请参阅停止和启动 Azure Kubernetes 服务 (AKS) 群集在 Azure Kubernetes 服务 (AKS) 上启动和停止节点池

  • Azure Policy 通过内置策略与 AKS 集成,以应用集中、一致、大规模的强制措施和保护措施。 在群集上启用 Azure Policy 插件,并应用默认的 CPU 请求和限制以及内存资源限制,以确保在群集容器上定义 CPU 和内存资源限制。

  • 使用 Azure 顾问来监视和释放未使用的资源。

  • 使用 Microsoft 成本管理预算和审查来跟踪支出。

成本管理

云可以大幅提高业务工作负载的技术性能。 云技术还可以降低管理组织资产的成本和开销。 但这个商机也带来了风险,因为云部署可能会增加浪费和效率低下的可能性。

成本治理是持续实施政策或控制以限制支出和成本的过程。 原生 Kubernetes 工具和 Azure 工具都通过主动监视和底层基础架构成本优化来支持成本治理。

  • Microsoft 成本管理是一套 Microsoft 工具,可帮助你分析、管理和优化 Azure 工作负载成本。 使用该套件可帮助确保你的组织利用云提供的优势。

  • 查看成本管理学科云采用框架治理最佳实践,以更好地了解如何管理和治理云成本。

  • 探索 KubeCost 等开源工具来监视和管理 AKS 群集成本。 可以将成本分配范围限定为部署、服务、标签、Pod 和命名空间,这在显示群集用户并向用户收费方面提供灵活性。

参考资料

下面是一些参考资料,可帮助你进一步了解和使用 AKS 成本分析:

作者

本文由 Microsoft 维护, 它最初是由以下贡献者撰写的。

主要作者:

其他参与者:

要查看非公开的 LinkedIn 个人资料,请登录到 LinkedIn。

后续步骤