你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Azure Kubernetes 服务 (AKS) 中的成本优化最佳做法
成本优化的关键在于最大限度实现资源价值,同时减少云环境中不必要的费用。 这一过程涉及确定具有经济效益的配置选项,并实施最佳做法来提升运营效率。 可在同时考虑到性能和可靠性需求,优化 AKS 环境,以最大限度降低成本。
本文介绍:
- 整体监视和 FinOps 实践。
- 战略基础结构选择。
- 动态调整大小和自动缩放。
- 利用 Azure 折扣节省大量资金。
财务运营 (FinOps) 是一个专业领域,它结合了财务责任与云管理和优化。 财务运营关注于推动财务、运营和工程团队之间的步调一致,让各团队了解和控制云成本。 FinOps Foundation 有几个值得注意的项目,如 FinOps Framework 和 FOCUS Specification。
有关详细信息,请参阅什么是 FinOps?
在进行部署之前,一定要评估应用程序的资源需求。 小型开发工作负载的基础结构需求不同于大型生产就绪工作负载。 虽然 CPU、内存和网络容量配置组合极大影响着 SKU 的成本效益,但请考虑以下虚拟机 (VM) 类型:
SKU 系列 | 说明 | 用例 |
---|---|---|
Azure 现成虚拟机 | Azure 现成虚拟机规模集支持现成节点池,并部署到没有高可用性或服务级别协议 (SLA) 保证的单个容错域。 现成虚拟机可让你以大幅折扣(相比即用即付价格,最高可达 90%)充分利用未利用的 Azure 容量。 如果 Azure 需要恢复容量,Azure 基础结构会逐出现场节点。 | 最适合开发测试环境,可以处理批处理作业等中断且具有灵活执行时间的工作负载。 |
Ampere Altra Arm 处理器 (Arm64) | Arm64 VM 省电且具有成本效益,但性能上却不打折扣。 AKS 中支持 Arm64 节点池,可创建 Arm64 Ubuntu 代理节点,甚至还可以在群集中混合使用 Intel 和 ARM 架构节点。 此类 ARM 虚拟机经过精心设计,可以有效运行动态、可缩放的工作负载,在运行横向缩放工作负载时,比类似的基于 x86 的虚拟机性能比高出 50%。 | 最适合于运行 Web 或应用程序服务器、开放源代码数据库、云原生应用程序、游戏服务器等。 |
GPU 经过优化的 SKU | 根据工作负载的性能,请考虑使用经过计算优化、内存优化、存储优化,甚至是图形处理单元 (GPU) 优化的虚拟机 SKU。 GPU 虚拟机大小是具有单个、多个和部分 GPU 的专用虚拟机。 | AKS 上已启用 GPU 的 Linux 节点池最适合处理图形渲染、大型模型训练和推理等计算密集型工作负载。 |
备注
计算成本因不同区域而异。 选择成本更低的区域运行工作负载时,要意识到延迟以及数据传输成本带来的潜在影响。 有关虚拟机 SKU 及其特征的更多信息,请参阅 Azure 中虚拟机的大小。
有关存储选项和相关成本注意事项的详细信息,请参阅以下文章:
选择合适的 VM SKU、区域、节点数量及其他配置选项并非易事。 Azure 门户中的“群集预设配置”可为不同应用程序环境提供注重成本且性能良好的推荐配置,帮助减轻此初始困难。 “开发/测试”预设最适合开发新工作负载或测试现有工作负载。 如果工作负载可以容忍中断,则“生产经济”预设是以节约成本的方式为生产流量提供服务的最佳选择。 非关键功能默认处于关闭状态,并且可以随时修改预设值。
AKS 可让你灵活地运行多租户群集和隔离资源。 简单易用的多租户功能,支持通过逻辑隔离在不同团队和业务部门之间共享群集和基础结构。 Kubernetes 命名空间构成了工作负荷和资源的逻辑隔离边界。 共享基础结构可减少群集管理开销,还能提高群集内的资源利用率和 Pod 密度。 有关 AKS 上多租户的更多信息,以及如何确定其是否满足你的组织需求,请参阅 AKS 多租户注意事项和为多租户设计群集。
警告
Kubernetes 环境并不完全安全,因为可能存在恶意多租户。 如果共享基础结构上的任何租户都不可信,则需要另外制定计划以防止租户影响其他服务的安全性。
请考虑物理隔离边界。 在此模型中,将为团队或工作负荷分配其自身的群集。 增加的管理和经济开销也是一种权衡。
精益容器是指优化容器化应用程序的大小和资源占用情况。 检查基础映像是否已经达到最小化,且仅包含必要的依赖项。 删除任何不必要的库和包。 更小的容器映像能够加快部署进度,提高缩放操作效率。 通过 AKS 上的项目流式处理功能,可从 Azure 容器注册表 (ACR) 流式传输容器映像。 该功能仅拉取初始 Pod 启动的必要层,可将大型映像的拉取时间从几分钟缩短至几秒钟。
资源配额提供了一种在开发团队或项目中保留和限制资源的方法。 配额在命名空间上定义,可在计算资源、存储资源和对象计数上进行设置。 定义资源配额时,会阻止单个命名空间消耗分配的配额以外的其他资源。 资源配额对于共享基础结构的团队的多租户群集很有用。
如果无人参与,小型开发/测试群集可能会产生不必要的成本。 可以使用群集启动和停止功能关闭不需要始终运行的群集。 此功能会关闭所有系统和用户节点池,让你不需要为额外的计算付费。 再次启动群集时,会保留群集和对象的状态。
容量预留可将 Azure 地区或可用性区域中的计算容量预留任意一段时间。 直到预留被删除前,预留容量都能立即使用。 将现有产能预留组关联到节点池可保证节点池的分配容量,并帮助你在高计算要求时间段期间避免出现潜在的按需定价高峰。
Microsoft 成本管理功能丰富,可帮助你在群集内外同时实现云预算制定、预测和可见性。 全局可见性对于认清支出趋势、发现优化机会,以及提高应用程序开发者和平台团队的责任心而言至关重要。 启用 AKS 成本分析加载项,按 Kubernetes 构造以及 Azure 计算、网络和存储类别,对群集成本进行精细细分。
如果通过“容器见解”引入指标数据,建议迁移至托管 Prometheus,可大幅降低成本。 可以使用数据收集规则 (DCR) 禁用“容器见解”指标并部分托管 Prometheus 加载项,该加载项通过 Azure 资源管理器、Azure CLI、Azure 门户和 Terraform 为配置提供支持。
有关更多信息,请参阅 Azure Monitor 最佳做法和管理“容器见解”的成本。
对于控制平面日志,请考虑禁用不需要的类别以及/或根据需要使用基本日志 API,以降低 Log Analytics 的成本。 有关详细信息,请参阅 Azure Kubernetes 服务 (AKS) 控制平面/资源日志。 对于数据平面日志或应用程序日志,请考虑调整成本优化设置。
在配置自动缩放设置之前,可以使用 Azure 负载测试为应用程序建立基线。 负载测试可帮助你了解应用程序在不同流量条件下的行为方式,并确定性能瓶颈。 获得基线后,可以配置自动缩放设置,以确保应用程序能够处理预期的负载。
高于实际使用情况的请求和限制会导致工作负载过度预配和资源浪费。 相反地,请求和限制数量过少会由于缺少内存而出现限制和工作负载问题。 垂直 Pod 自动缩放程序 (VPA) 允许微调 Pod 所需的 CPU 和内存资源。 VPA 根据历史容器使用情况提供 CPU 和内存请求和限制的建议值,可以手动设置或自动更新这些值。 最适合资源需求波动的应用程序。
水平 Pod 自动缩放程序 (HPA) 基于 CPU/内存利用率等观察到的指标,动态缩放 Pod 副本数。 在高需求期间进行 HPA 横向扩展,添加更多 Pod 副本分发工作负载。 低需求期间,HPA 横向缩减,减少副本数量以节省资源。 最适合资源需求可预测的应用程序。
警告
不应在同一 CPU 或内存指标上同时使用 VPA 和 HPA。 这种组合可能会导致冲突,因为两个自动缩放程序都会尝试使用相同的指标响应需求的变化。 但是,可以将 VPA 用于 CPU 或内存,将 HPA 用于自定义指标以防止重叠,并确保每个自动缩放程序侧重于工作负载缩放的不同方面。
Kubernetes 事件驱动型自动缩放程序 (KEDA) 提供更多灵活性,可根据符合应用程序行为的多种由事件驱动的指标来进行缩放。 例如,KEDA 会监视 Web 应用程序传入的 HTTP 请求流量并调整 Pod 副本数量,以确保应用程序保持响应。 如果是进程作业,KEDA 则会根据消息队列长度对应用程序进行缩放。 为所有 Azure 缩放程序提供托管支持。
为了跟上应用程序需求,群集自动缩放程序会监视由于资源限制而不能排期的 Pod,并对节点池中的节点数量进行相应缩放。 当节点没有正在运行的 Pod,群集自动缩放程序会纵向缩减节点数。 群集自动缩放程序配置文件设置普遍应用于群集中所有启用自动缩放程序的节点池。 有关更多信息,请参阅群集自动缩放程序最佳做法和注意事项。
复杂的工作负载可能需要具有不同虚拟机大小配置的多个节点池,才能满足 CPU 和内存需求。 准确选择和管理多个节点池配置让工作变得更加复杂,并会增加运营开销。 节点自动预配 (NAP) 可简化 SKU 选择流程,并根据挂起的 Pod 资源要求决定最佳 VM 配置,以最高效、最经济的方式运行这些工作负载。
备注
有关缩放最佳做法的详细信息,请参阅 Azure Kubernetes 服务 (AKS) 中小型到中型工作负载的性能和缩放,以及 Azure Kubernetes 服务 (AKS) 中大型工作负载的性能和缩放最佳做法。
如果工作负载可预测,并且会存在较长时间,请考虑购买 Azure 预留以进一步降低资源成本。 Azure 预留按一年或三年期限运行,与计算即用即付价格相比,折扣力度高达 72%。 预留自动应用于匹配资源。 最适合承诺在相同 SKU 和区域中运行超过较长时间的工作负载。
如果支出一致,但 SKU 和区域使用的是不同的资源,则无法实现 Azure 预留,请考虑购买 Azure 节省计划。 与 Azure 预留一样,Azure 节省计划也是按一年或三年期限运行,并自动应用于权益范围内的任何资源。 无论 SKU 或区域如何,你都承诺在计算资源上花费固定的小时量。 最适合使用不同资源和/或不同数据中心区域的工作负载。
Azure Kubernetes 服务 (AKS) 的 Azure 混合权益让你可以充分利用本地许可证,无需额外增加成本。 使用任何符合条件的本地许可证(同时具有活动软件保障 (SA) 或符合条件的订阅)以较低的成本获取 Azure 上的 Windows 虚拟机。
成本优化要持续进行,且要不断迭代。 查看以下建议和架构指南,了解更多信息: