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

Kubernetes 的成本管理

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

注释

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

Amazon EKS 成本基础知识

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

Amazon EKS 工作节点是标准的 Amazon EC2 实例,这意味着它们会产生与常规 EC2 价格相同的成本。 你还需要支付你为了运行 Kubernetes 工作程序节点而配置的其他 Amazon Web Services (AWS) 资源的费用。

Amazon EKS 托管节点组 不会产生额外费用。 只需为预配的 AWS 资源付费。 这些资源包括 Amazon EC2 实例、Amazon Elastic Block Store 卷、Amazon EKS 群集小时数和其他 AWS 基础结构。

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

按需实例每秒会产生计算容量成本,无需长期承诺。 Amazon EC2 现成实例是未使用的 Amazon EC2 容量,与按需实例相比,成本更低。

  • Amazon EC2 现成实例可能会中断。 当 Amazon EC2 需要其他地方的容量时,会收到两分钟的中断通知。

  • Amazon 提供名为 Spot Fleet 和 Spot 实例顾问的工具。 现成机群是一种自动化按需实例和现成实例组的方法。 这些工具有助于预测哪些区域或可用性区域提供最小的中断。

  • AWS 现成实例价格各不相同。 AWS 根据现成实例容量的长期供需趋势设置价格。 支付在实例正常运行的时间段内生效的价格。

AKS 成本分析

AKS 群集依赖于各种 Azure 资源,例如虚拟机(VM)、虚拟磁盘、负载均衡器和公共 IP 地址。 多个应用程序可以使用这些资源。 组织内的不同团队可以管理每个应用程序。 这些资源的消耗模式可能会有所不同,这会导致对群集资源总成本产生不同贡献。 某些应用程序可能跨越多个群集,这可能会使成本归因和管理复杂化。

对于群集包含单个工作负荷的方案,请使用 Microsoft成本管理 来度量群集资源组下的群集资源消耗。 某些方案需要成本管理以外的其他解决方案,例如需要以下方案:

  • 资源使用情况的细化细分,例如计算、网络和存储。

  • 区分单个应用程序成本和共享成本。

  • 在同一订阅范围内,分析多个群集中的成本。

为了提高成本可观测性,AKS 与成本管理集成,以提供 Kubernetes 构造的详细成本细分,例如群集和命名空间级别。 此集成可实现跨 Azure 计算、网络和存储类别的成本分析。

AKS 成本分析加载项基于 OpenCost 构建,这是使用数据收集的开源项目。 加载项将数据与 Azure 发票进行协调,从而提供成本可见性。 可以在成本管理成本分析门户中查看后期处理的数据。 有关详细信息,请参阅 AKS 成本分析

成本定义

Kubernetes 命名空间和资产视图显示以下费用:

  • 空闲费用 表示工作负荷不使用的可用资源容量成本。

  • 服务费用 表示与服务关联的费用,例如运行时间服务级别协议(SLA)和 Microsoft Defender for Containers 费用。

  • 系统费用 表示 AKS 在每个节点上保留的容量成本,以运行群集所需的系统进程。

  • 未分配的费用 表示无法分配给命名空间的资源成本。

AKS 成本基础知识

Kubernetes 体系结构由两个层组成:控制平面和至少一个节点或节点池。 AKS 定价模型基于这些层。

控制平面提供核心 Kubernetes 服务,例如 API 服务器和 etcd 以及应用程序工作负载编排。 Azure 平台管理 AKS 控制平面。 在 AKS 免费层中,控制平面不会产生费用

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

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

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

控制面板

创建 AKS 群集时,Azure 会自动预配和配置控制平面层。

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

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

若要提高控制平面组件的可用性,请在生产工作负载中使用标准层。 免费层群集的副本较少,并且控制平面资源受到限制,因此并非是用于生产工作负荷的理想选择。

节点

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

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

AKS 群集定价基于节点池中 VM 的类别、数量和大小。 VM 成本取决于可用的 vCPU、内存、系列和存储类型的大小、CPU 类型、数量。 存储类型包括高性能 Azure 标准 SSD 或 Azure 标准 HDD。 有关详细信息,请参阅 VM 系列。 根据应用程序要求、节点数和群集可伸缩性需求规划节点大小。

有关详细信息,请参阅 节点池 以及 为 AKS 中的群集创建和管理多个节点池

AKS 群集部署

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

  • 创建第一个资源组,该资源组仅包含 Kubernetes 服务资源,且不会产生费用。

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

    节点资源组包含群集基础结构资源。 此资源组在订阅中产生费用。 这些资源包括 Kubernetes 节点 VM、虚拟网络、存储和其他服务。 AKS 在删除群集时自动删除节点资源组。 因此,应仅将其用于共享群集生命周期的资源。

计算成本

根据 Azure VM 的大小和使用情况付费。 有关详细信息,请参阅 Azure 和 AWS 上的计算服务

通常,节点池的 VM 大小越大,代理节点的小时成本越高。 节点池的 VM 系列越专用,池的成本就越高。 专用化包括启用了图形处理单元(GPU)的 VM 或内存优化 VM。

请考虑 Azure VM 定价的以下方面:

  • 每个区域的定价不同,并非每个区域都支持所有服务和 VM 大小。

  • 不同的 VM 系列针对不同类型的工作负荷进行优化。

  • 用作操作系统驱动器的托管磁盘会单独收费。 必须将他们的成本添加到你的估算中。 托管磁盘大小取决于类,例如标准 HDD、标准 SSD、Azure 高级 SSD 或 Azure 超级磁盘存储。 每秒输入/输出操作次数 (IOPS) 和以 MBps 计的吞吐量取决于大小和类别。 VM 价格包括 临时 OS 磁盘

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

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

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

存储成本

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

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

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

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

    • 服务,例如 Azure Blob 存储、Azure 文件存储、Azure 队列存储、Azure 表存储或非托管磁盘

    • 存储帐户类型,例如 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 应用程序防火墙功能。 应用程序网关费用基于以下因素:

    • 固定价格。 为应用程序网关运行的每个小时或部分小时付费。

    • 容量单位价格。 根据应用网关使用的资源,您需要支付额外的使用成本。 每个容量单元最多具有一个计算单元、2,500 个永久性连接和 2.22-Mbps 吞吐量。

  • 公共 IP 地址:公共 IP 地址具有相关成本,具体取决于:

    • 保留与动态关联。

    • 基本层与高度安全且区域冗余的标准层。

横向扩展成本

可以使用以下选项缩放 AKS 群集,这将为节点池增加额外的容量:

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

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

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

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

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

升级费用

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

默认情况下,AKS 将升级配置为包含一个额外的节点。 将1设置的默认值设为max-surge可最大程度地减少工作负荷中断。 此配置创建一个额外的节点,用于在封锁或清空现有应用程序之前替换旧版节点。 可以自定义每个节点池的 max-surge 值,以平衡升级速度和中断。 更高的 max-surge 值加快了升级过程,但可能会导致更多的中断,并增加了额外的 VM 的成本。

其他成本

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

成本优化

以下建议有助于优化 AKS 群集成本:

  • 查看适用于 AKS 的 Azure Well-Architected 框架 的成本优化 部分。

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

  • Azure 预订 可帮助您节省资金。 若要获得折扣,可以承诺为多个产品(例如 AKS 群集中的 VM)提交一年或三年计划。 使用 Azure 预留来优化 存储计算,以降低代理节点的成本。

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

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

    创建现成节点池时,应定义每小时支付的最高价格,并启用群集自动缩放程序。 群集自动缩放程序根据操作负载扩展和收缩节点池中的节点数。 对于现成节点池,如果仍需要更多节点,则群集自动缩放程序将在逐出之后横向扩展节点数。 有关详细信息,请参阅将现成节点池添加到 AKS 群集

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

    可以使用 AKS 部署和管理在基于 Ampere Altra ARM 的处理器上运行的容器化应用程序

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

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

  • 为 Pod 正确设置 请求和限制 以提高应用程序密度,并避免将过多的 CPU 和内存资源分配给工作负荷。 若要查看 CPU 和内存的平均值和最大消耗量,请使用 Prometheus 或容器见解。 在 YAML 清单、Helm 图表和 Kustomize 清单中,针对你的部署正确配置限制和配额。

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

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

  • AKS 工作负载可能不需要持续运行。 例如,开发群集节点池中的某些工作负荷不会持续运行。 要优化成本,你可以完全关闭 AKS 群集或停止 AKS 群集中的一个或多个节点池。 有关详细信息,请参阅 停止和启动 AKS 群集并在 AKS 上启动和停止节点池

  • Azure Policy 通过内置策略与 AKS 集成,以应用集中、一致、大规模的强制措施和保护措施。 为群集启用 Azure Policy 加载项,以应用默认的 CPU 请求和限制和 内存资源限制。 此功能有助于确保群集容器定义了 CPU 和内存资源限制。

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

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

成本管理

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

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

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

  • 查看 适用于 Azure 治理的云采用框架 最佳做法,以更好地了解如何管理和治理云成本。

  • 浏览 KubeCost 等开源工具,以监视和管理 AKS 群集成本。 可以根据部署、服务、标签、Pod 或命名空间确定成本分配的范围,这样可以灵活地显示群集用户和为群集用户收费。

供稿人

Microsoft维护本文。 以下参与者撰写了本文。

主要作者:

其他参与者:

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

后续步骤