本文档可帮助您浏览 Google Kubernetes Engine (GKE) 文档,以查找费用优化指南和建议。GKE 提供广泛的自动扩缩和调度功能,您可以使用这些功能最大限度地降低集群费用,同时保持应用的稳定性。
如需全面了解所有 GKE 最佳实践,请参阅 GKE 最佳实践。您应该已经熟悉以下内容:
概览
在实现 GKE 时,您必须考虑不同的技术方面,以符合应用和业务要求。除了定义网络、安全性、存储和其他技术方面之外,您还必须评估费用和性能,以满足业务需求。您不能将费用和性能视为不同的实体,而必须从基础架构规划的初始阶段就将它们整合在一起,以定义统一的关系,从而确定可靠性和云支出。虽然低费用和高可靠性是预期目标,但随着规模的扩大,管理这种权衡的复杂性也会增加。
如需实现低费用和应用稳定性,您可以设置或调整以下 GKE 功能:
- GKE 配置
- 工作负载配置
- 费用基准和可见性
使用 GKE Autopilot
对于小型沙盒或开发环境,请选择 Autopilot 集群。在 Autopilot 中,GKE 会动态管理节点,并且您只需为请求的 Pod 容量付费,这有助于您避免虚拟机、节点操作系统和系统开销费用。
如需了解详情,请参阅 GKE Autopilot 概览。
了解自动扩缩的工作原理
GKE 自动扩缩控制器会随着流量请求的变化动态调整资源。
根据利用率指标添加和移除 Pod
HorizontalPodAutoscaler (HPA) 会根据 CPU 或自定义指标添加和移除 Pod。
如需了解和配置 Pod 横向自动扩缩,请参阅以下 GKE 文档:
配置目标利用率阈值(例如 70% 或 80%),以在其他副本 Pod 启动时保持处理流量突增的缓冲区。
根据利用率指标扩缩 Pod
使用 VerticalPodAutoscaler (VPA) 为不采用 Pod 横向自动扩缩的工作负载动态调整容器 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 解析)集成到预提交或 pull 请求检查中,以在不合规的清单到达集群之前对其进行审核和阻止。
如需了解详情,请参阅 在 CI 流水线中根据公司政策验证应用。
基础架构核对清单
应用和工作负载优化
将工作负载配置为高效使用资源并减少运营开销。
指定匹配的内存请求和限制
在部署之前指定精确的容器 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 部署的运行状况,因为 GKE 的内置自动扩缩控制器依赖于它来检索 CPU 和内存指标。
如需了解详情,请参阅 排查 Pod 横向自动扩缩问题。
培养节省费用文化
为开发者提供对云支出信息中心的访问权限,并建立 FinOps 培训,以使架构决策与业务费用预算保持一致。
如需详细了解组织费用效率文化,请参阅 宣传节省费用文化。
费用基准和可见性核对清单
后续步骤
如需详细了解费用效率所需遵循的架构原则和组织 文化,请参阅在 GKE 上运行费用经过优化的 Kubernetes 应用的最佳实践。