本文档可帮助您浏览 Google Kubernetes Engine (GKE) 文档,找到有关费用优化的指南和建议。GKE 提供广泛的自动扩缩和调度功能,您可以使用这些功能来最大限度地降低集群成本,同时保持应用稳定性。
如需查看所有 GKE 最佳实践的综合概览,请参阅 GKE 最佳实践。您应该已经熟悉以下内容:
概览
实现 GKE 时,您必须考虑不同的技术方面,以符合应用和业务要求。除了定义网络、安全性、存储空间和其他技术方面之外,您还必须评估成本和性能,以满足业务需求。您不能将成本和性能视为不同的实体,而必须从基础设施规划的初始阶段就将它们整合在一起,以定义一个统一的关系,从而确定可靠性和云支出。低成本和高可靠性是预期目标,但随着规模扩大,管理这种权衡的复杂性也会增加。
为了实现费用低廉且应用稳定,您可以设置或调整以下 GKE 功能:
- GKE 配置
- 工作负载配置
- 费用基准和可见性
您还可以使用 Compute Advisor(预览版)发现并实施费用优化最佳实践。如需了解详情,请参阅使用 Compute Advisor。
使用 GKE Autopilot
对于小型沙盒或开发环境,请选择 Autopilot 集群。在 Autopilot 中,GKE 会动态管理节点,您只需为所请求的 Pod 容量付费,这有助于您避免支付虚拟机、节点操作系统和系统开销费用。
如需了解详情,请参阅 GKE Autopilot 概览。
了解自动扩缩的运作方式
GKE 自动扩缩控制器会根据流量请求的变化动态调整资源。
根据利用率指标添加和移除 Pod
HorizontalPodAutoscaler (HPA) 会根据 CPU 或自定义指标添加和移除 Pod。
如需了解和配置 Pod 横向自动扩缩,请参阅以下 GKE 文档:
配置目标利用率阈值(例如 70% 或 80%),以在启动额外的副本 Pod 时保持可处理流量高峰的缓冲区。
根据利用率指标扩缩 Pod
对于不采用 Pod 横向自动扩缩的工作负载,或者在不知道峰值工作负载的情况下,请使用 VerticalPodAutoscaler (VPA) 动态调整容器 CPU 和内存请求的大小。
如需了解和配置 Pod 纵向自动扩缩,请参阅以下 GKE 文档:
在类似生产的环境中,将 VPA 保持在 Off(仅限建议)模式至少 24 小时(最好是一周),以捕获具有代表性的流量模式。为防止出现不稳定的调整大小情况,请在启用 Initial 或 Auto 模式之前,在 VerticalPodAutoscaler 对象中明确指定最小和最大边界。
使用集群自动伸缩器自动伸缩基础架构
如需根据活跃调度模拟(而非指标负载)扩缩底层计算节点,请在 GKE Standard 节点池中启用集群自动扩缩器。指定最低节点参数以支持基准夜间容量。
始终为系统和应用 Pod 配置 PodDisruptionBudget (PDB) 对象。此配置有助于确保集群自动伸缩器在整合或缩容未充分利用的节点池时不会无意中导致服务中断。
如需了解和配置集群自动扩缩器,请参阅以下 GKE 文档:
使用节点池自动创建功能部署动态节点池
启用节点池自动创建功能,以自动生成自定义 GKE 节点池,其形状、CPU 数量或内存限制精确契合待处理 Pod 的调度参数。此功能可最大限度地减少超大节点上剩余的资源。
如需了解和配置节点池自动创建,请参阅以下 GKE 文档:
自动扩缩核对清单
基础设施特征
根据成本优化优先级调整集群硬件、位置和节点网络规则。
选择合适的机器类型
根据用户的位置以及集群需要访问的数据的位置,为集群选择合适的机器类型。
如需了解详情,请参阅机器家族资源和比较指南。
在 Spot 虚拟机上部署容错工作负载
与按需虚拟机实例相比,使用 Spot 虚拟机运行无状态、容错或批量工作负载可享受高达 91% 的折扣。
如需了解详情,请参阅以下 GKE 文档:
映射高效的机器家族和操作系统设置
使用经济实惠的实例配置文件(例如 E2 虚拟机架构)自定义节点池机器设置。
如需详细了解如何调整节点大小、配置 Spot 虚拟机抢占时间以及配置内核配置,请参阅节点池简介。
选择适当的地区
如果延迟时间不会影响用户,则可以在运营成本较低的 Compute Engine 区域中运行集群工作负载。
如需了解详情,请参阅 Compute Engine 区域选择最佳实践。
注册 CUD
购买承诺使用折扣 (CUD),以确保在一年或三年期限内,基准计算资源可享受大幅折扣价格(最高可享受 70% 的折扣)。
如需了解详情,请参阅基于资源的承诺使用折扣。
考虑网络费用
区域级和多可用区级 GKE 集群可提高应用可靠性,但可能会产生内部跨可用区网络出站流量费用。
如需尽可能降低并控制网络费用,请考虑以下事项:
- 跨可用区数据传输:虽然区域级集群通过跨可用区分布工作负载来提高可用性,但这些可用区之间传输数据会产生相关费用。
如需了解详情,请参阅所有网络流量价格。
为非生产环境部署单可用区集群
在非生产环境中,为避免产生跨可用区网络费用并减少虚拟机开销,请部署单可用区集群,而不是区域级或多可用区级集群。
如需了解详情,请参阅集群配置选项简介。
优化集群 DNS 解析路径和入站流量
为了优化集群 DNS 解析和入站流量,您可以部署 NodeLocal DNSCache 和网络端点组 (NEG)。
当您运行 DNS 密集型工作负载时,NodeLocal DNSCache 会在每个节点上运行本地 DNS 精灵。此配置可防止高查询负载耗尽 CoreDNS,从而避免需要扩缩 CoreDNS 并降低总体 GKE 费用。
对于入站流量,通过 NEG 实现的容器原生负载均衡会将流量直接路由到 Pod IP 地址,而不是实例组。这种直接路由有助于在 Pod 伸缩操作期间实现流量的正常重定向。
有关详情,请参阅:
按命名空间应用资源配额
在多租户集群中,为每个命名空间部署标准 Kubernetes ResourceQuota 对象,以锁定 CPU 和内存形状阈值,并防止各个团队调度不合规的工作负载,从而避免产生意外的计算费用。
如需了解详情,请参阅 Kubernetes 文档中的命名空间。
实现 Policy Controller 审核
部署 Policy Controller 以动态审核并强制执行集群对公司标准的合规性。Policy Controller 使用准入控制来拒绝配置错误的资源。
详情请参阅以下内容:
在 CI/CD 流水线中禁止不合规的清单
在开发生命周期的早期验证费用政策合规性。
将验证脚本(例如 kpt 解析)集成到预提交或拉取请求检查中,以便在不合规的清单到达集群之前对其进行审核和阻止。
如需了解详情,请参阅在持续集成流水线中根据公司政策验证应用。
基础架构核对清单
应用和工作负载优化
配置工作负载以高效使用资源并减少运营开销。
指定匹配的内存请求和限制
在部署之前指定精确的容器 CPU 和内存请求。对于 CPU,请配置请求量以满足服务等级目标 (SLO),但不要限制上限。对于内存,请确保所请求的分配量与内存限制相符。
如需了解详情,请参阅 Kubernetes 文档中的调整分配给容器的 CPU 和内存资源的大小。
缩短容器启动时间
尽可能减小容器映像,以最大限度地缩短映像下载时间。
配置 PDB
为应用副本指定 PodDisruptionBudget (PDB) 对象,以限制主动中断并确保在 GKE 缩容或发生节点升级时保持稳定性。
如需了解详情,请参阅为应用指定中断预算。
设置有意义的就绪性和活跃性探测
为所有容器配置就绪性探测和活跃性探测,以帮助确保 GKE 仅将流量路由到就绪的 Pod,并重新启动失败的实例,从而防止在自动扩缩期间丢失流量。
如需了解详情,请参阅配置活跃性、就绪性和启动探测。
配置应用正常关停
通过监听 SIGTERM 信号、在退出前完成正在处理的请求或配置 preStop 钩子,为容器做好正常终止的准备。
如需了解详情,请参阅终止并安全关停抢占式虚拟机。
实现指数退避算法重试
在应用或服务网格级别实现指数退避算法重试,以处理暂时性故障或潜在的 Spot 虚拟机抢占。
如需了解详情,请参阅 Istio 文档中的重试。
应用和工作负载优化清单
费用基准和可见性
如需优化费用,您首先需要了解 GKE 支出及其分配方式。通过这种可见性,您可以将费用归因于产生这些费用的团队和业务单位。
以下 GKE 文档介绍了如何深入了解 GKE 结算、资源消耗和基准指标。
启用 GKE 费用分配
启用 GKE 费用分配,以了解工作负载资源请求和相关费用。费用分配功能可将集群费用分配给工作负载的命名空间和 Kubernetes 标签。
将这些详细信息导出到 BigQuery,以分析 Cloud Billing 中的数据。您可以使用此分析来确定哪些工作负载会导致结算高峰,执行费用返还并优化资源请求。
如需了解详情,请参阅获取 GKE 资源分配和集群费用的关键支出分析。
查看日志和指标注入量
为集群启用 Cloud Logging 和 Cloud Monitoring 会产生费用。大量注入日志和自定义指标可能会导致意外费用。集中审核哪些日志级别和自定义指标被提取。
如需详细了解如何排查日志记录 API 使用率过高或日志写入限制超时的问题,请参阅:
监控 Metrics Server 的健康状况
监控 Metrics Server Deployment 的健康状况,因为 GKE 的内置自动扩缩控制器依赖于它来检索 CPU 和内存指标。
如需了解详情,请参阅排查 Pod 横向自动扩缩问题。
培养节省费用文化
为开发者提供云支出信息中心访问权限,并开展 FinOps 培训,以使架构决策与业务成本预算保持一致。
如需详细了解组织成本效益文化,请参阅传播节省成本的文化。
费用基准和公开范围核对清单
使用 Compute Advisor
Compute Advisor 是Google Cloud 控制台中 AI 赋能的界面,由 Gemini 提供支持,可帮助您为 GKE 设计弹性好且经济高效的架构。
Compute Advisor 可为灵活启动型虚拟机和 Spot 虚拟机提供近乎实时的可用性指导,同时在部署前验证组织的政策和资源配额。Compute Advisor 不会为需要按需资源的工作负载提供可用性指导。
如需在 Google Cloud 控制台中访问 Gemini,请完成以下步骤:
-
在 Google Cloud 控制台中,前往概览页面。
-
在使用 Compute Advisor 设计基础架构部分中,提交提示。Gemini 开始生成回答。
-
如需生成架构建议,请在 Compute Advisor 中运行以下示例提示之一。当您点击在 Compute Advisor 中运行提示按钮时, Google Cloud 控制台可能需要 15 秒以上的时间才能加载:
自动扩缩和装箱:
使用情形:为了最大限度提高装箱率并最大限度减少空闲 CPU 开销,请使用此提示为 GKE 集群自动扩缩和节点池配置策略。
Configure a GKE cluster to use autoscaler and node pool strategy to maximize bin packing and minimize idle CPU overhead.多租户治理:
使用情形:为了使开发命名空间保持在预算范围内,请使用此提示为多租户 GKE 集群起草 ResourceQuota 政策。
Draft a ResourceQuota policy for a multi-tenant GKE cluster to keep development namespaces within budget bounds.工作负载优化:
应用场景:为了帮助您决定是使用 GKE Autopilot 模式还是 Standard 模式来处理资源需求波动很大的批处理工作负载,请使用以下提示获取建议:
Recommend whether to use GKE Autopilot or Standard mode for a batch processing workload with highly variable resource demands.
后续步骤
如需详细了解实现成本效益所需的架构原则和组织文化,请参阅在 GKE 上运行费用经过优化的 Kubernetes 应用的最佳实践。