ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

GKE 工作负载弹性伸缩实战:HPA 与 VPA 配置、Rightsizing 与最佳实践

GKE 工作负载弹性伸缩实战:HPA 与 VPA 配置、Rightsizing 与最佳实践 GKE 工作负载弹性伸缩实战HPA 与 VPA 配置、Rightsizing 与最佳实践【免费下载链接】skillsAgent Skills for Google products and technologies项目地址: https://gitcode.com/GitHub_Trending/skills29/skills导读本文基于 gke-workload-scaling 技能文档系统讲解在 Google Kubernetes EngineGKE上为应用配置弹性伸缩的完整方案涵盖手动扩缩容、Horizontal Pod AutoscalerHPA与 Vertical Pod AutoscalerVPA的配置方法、更新模式选择、以及基于 VPA 推荐值进行资源 Rightsizing 的实战流程。读完本文你将掌握用kubectl与 YAML 清单为 GKE 工作负载搭建可版本化、可观测、避免资源抖动与冲突的伸缩体系并能结合仓库中现成的 HPA 模板 与 VPA 模板 直接落地。一、GKE 伸缩模型总览GKE 作为托管的 Kubernetes 平台其伸缩能力分布在三个不同层级本文聚焦的是工作负载Pod层的伸缩层级组件作用本文是否覆盖Pod 副本数HPAHorizontal Pod Autoscaler按 CPU、内存或自定义指标增减 Pod 数量✅ 核心Pod 资源规格VPAVertical Pod Autoscaler按实际用量调整 Pod 的 CPU/内存 requests✅ 核心节点数量Cluster Autoscaler / NAP按 Pod 需求伸缩节点Autopilot 自动处理❌ 不属于本技能范围这一点在技能文档的描述front-matter中也有明确边界gke-workload-scaling不用于集群级自动伸缩Cluster Autoscaler、静态集群规格设定或节点机型选择那些应交给gke-cluster-autoscaler、gke-compute-classes等技能处理。仓库中 gke-basics 的 core-concepts 也印证了这一分层模型HPA 伸缩副本、VPA 调整 requests、Cluster Autoscaler 伸缩节点、ComputeClasses 做声明式节点选择。二、手动扩缩容即时干预的基础手段在自动化伸缩尚未部署、或需要立刻介入如压测、故障演练、上线放量时手动扩缩容是最直接的选项把 Deployment 固定缩放到指定副本数。kubectl scale deployment {deployment_name} --replicas{number} -n {namespace} # 验证扩容事件 kubectl get deployment {deployment_name} -n {namespace}要点{deployment_name}、{namespace}、{number}需替换为实际值若 Deployment 位于default命名空间-n可省略。验证时重点看READY与AVAILABLE列是否与目标副本数一致以及kubectl get events中是否有Scaled up replica set之类的记录。手动scale设置的副本数会与 HPA 的minReplicas/maxReplicas边界相互作用一旦 HPA 开始管理该工作负载后续副本数将由 HPA 控制手动值只是临时干预。手动扩缩容适合测试与应急生产环境建议使用版本化的 HPA 清单保证伸缩策略可审计、可回滚。三、Horizontal Pod AutoscalerHPA按指标横向伸缩HPA 根据观测到的 CPU 利用率、内存利用率或自定义指标自动增减 Pod 副本数是大多数无状态服务的主力伸缩手段。3.1 前置条件Metrics Server 必须运行HPA 依赖 Metrics Server 采集 CPU/内存指标GKE 上默认启用无需额外安装。容器必须明确定义资源 requests/limitsHPA 按“实际使用量 / requests”计算利用率没有 requests 则无法计算目标利用率。这一点也是文档 Best Practices 的第 1 条后文会展开。3.2 快速命令一行启用kubectl autoscale deployment {deployment_name} --cpu-percent50 --min1 --max10参数语义参数含义--cpu-percent50目标平均 CPU 利用率 50%实际使用量 ÷ requests--min1最小副本数--max10最大副本数上限保护该命令生成一个HorizontalPodAutoscaler对象等效于一个仅含 CPU 指标的 YAML 清单。它适合快速验证但没有进入版本控制。3.3 清单方式推荐版本化配置使用 YAML 清单可以把伸缩策略纳入 Git 管理。仓库提供了可直接应用的模板 assets/hpa-example.yaml其完整内容如下apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: example-hpa namespace: default spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: example-deployment minReplicas: 1 maxReplicas: 10 metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 50 - type: Resource resource: name: memory target: type: Utilization averageUtilization: 70应用并验证kubectl apply -f skills/cloud/gke-workload-scaling/assets/hpa-example.yaml # 确认 HPA 已创建并能拉到指标 kubectl get hpa关于清单的关键细节使用autoscaling/v2API 版本这是当前推荐的稳定版本支持多指标与Utilization/AverageValue两种目标类型。scaleTargetRef指向被管理的 DeploymentapiVersion: apps/v1、kind: Deployment、name: example-deployment替换name即指向你的工作负载。示例同时配置了CPU50%与内存70%两个指标HPA 会分别计算每个指标所需副本数然后取其中最大值作为最终目标副本数因此多指标配置时要评估两者是否会互相牵制。target.type: Utilization表示按“平均利用率”伸缩若改为AverageValue则可按绝对的 Pod 平均用量如500mCPU、256Mi内存伸缩。3.4 自定义指标与外部指标当默认的 CPU/内存指标不够用时GKE 提供两条路径External 指标现代推荐基于 Cloud Monitoring 指标例如 Pub/Sub 队列积压长度伸缩时优先使用External指标类型——它由 GKE 控制平面原生支持无需部署 Custom Metrics Adapter架构更简单、维护成本更低。Prometheus 指标对应用暴露给 Prometheus 的指标如每秒请求数、队列长度可选用Google Cloud Managed Service for Prometheus或 Prometheus Adapter 接入。选择原则优先 ExternalGKE 原生、少一个组件只有需要 PromQL 语义或既有 Prometheus 生态时才引入 Adapter。四、Vertical Pod AutoscalerVPA垂直资源调优VPA 根据 Pod 的历史实际用量自动调整 CPU/内存 requests 与 limits是资源 Right-sizing瘦身与防资源浪费的关键工具。4.1 前置条件与启用方式Autopilot 集群VPA 默认启用开箱即用。Standard 集群需手动启用命令如下gcloud container clusters update {cluster_name} --enable-vertical-pod-autoscaling --zone {zone}注意--zone用于 zonal 集群如果是 regional 集群应改用--region与 gke-basics 中get-credentials的规则一致区域/可用区参数必须与集群创建方式匹配。4.2 四种更新模式updateMode模式行为适用场景Off只计算推荐值不应用“干跑”分析、先观察再决策Initial仅在 Pod 创建时分配推荐资源批量任务、短生命周期工作负载Auto若推荐值与 requests 差异显著通过重启 Pod更新资源无状态、可优雅重启的在线服务InPlaceOrRecreate优先原地更新Pod 资源不重建无法原地更新时回退到Auto行为需要最小化中断的场景需 GKE 1.34InPlaceOrRecreate是较新的模式它先尝试 In-Place Pod 资源更新Pod 不重启、保持调度位置只有在该机制不可用时才退化为Auto的重建方式。选择时务必确认集群版本满足 GKE 1.34 的前提。4.3 仓库提供的 VPA 模板assets/vpa-example.yaml 给出了一份可直接落地的配置apiVersion: autoscaling.k8s.io/v1 kind: VerticalPodAutoscaler metadata: name: example-vpa namespace: default spec: targetRef: apiVersion: apps/v1 kind: Deployment name: example-deployment updatePolicy: updateMode: Auto resourcePolicy: containerPolicies: - containerName: * minAllowed: cpu: 100m memory: 50Mi maxAllowed: cpu: 1 memory: 1Gi解读targetRef指定 VPA 管理的 DeploymentcontainerName: *表示策略作用于所有容器。minAllowed/maxAllowed是安全护栏VPA 只会把资源调整限定在100m CPU / 50Mi 内存到1 CPU / 1Gi 内存之间避免推荐值越界导致 Pod 无法调度过大或资源不足过小。生产上应根据业务特性设置合理的上下界。把updateMode改为Off即可切换到纯推荐模式——这正是仓库中 gke-cost-optimization 用于成本瘦身的做法它提供了一个更精简的 vpa-recommendation-mode.yaml 模板并建议用kubectl get vpa {deployment_name}-vpa -o jsonpath{.status.recommendation}读取推荐结果。五、伸缩最佳实践文档总结了 5 条关键实践前两条直接决定 HPA/VPA 能否协同工作务必逐条落实明确定义资源 requestsHPA 与 VPA 都依赖准确的 requests 作为基准HPA 计算利用率、VPA 计算推荐值。未设置 requests 的容器两者都无法正确工作。补充在Autopilot集群上CPU requests 必须按250m0.25 vCPU的整数倍设置若传入如300m的非对齐值会被自动向上取整到最近的250m增量即500m且 requests 与 limits 自动相等、通常省略 limits见 gke-basics。编写 VPAminAllowed/maxAllowed时应记住这一约束。避免指标冲突不要让 HPA 与 VPA 使用同一个指标例如两者都用 CPU否则会导致“震荡”thrashing——HPA 加副本稀释 CPU 利用率、VPA 又缩减 CPU requests循环往复。典型分工模式HPA 管 CPU、VPA 管内存。这也与仓库中的 HPA 模板CPU 指标和成本优化技能中 “Reconcile HPA and VPA recommendationsMPA” 的建议一致。配置 Pod Disruption BudgetsPDBs在扩缩容事件、节点升级或 VPA 驱逐期间PDB 保证应用的最小可用副本数避免滚动过程中出现全量不可用。理解 HPA 延迟LagHPA 内置稳定窗口默认约 5 分钟防止指标瞬时波动引发副本数快速抖动。这意味着副本数变化不是即时的排查“为什么还没扩容/缩容”时先考虑窗口期。VPAAuto模式的运行风险Auto模式下 VPA 通过重启 Pod来改变资源应用必须能优雅处理重启例如正确响应 SIGTERM、支持优雅退出。关键机制默认情况下 VPA 要求工作负载至少 2 个副本才会执行驱逐以防止驱逐唯一副本造成宕机在 GKE 1.22 中可通过PodUpdatePolicy中的minReplicas覆盖该默认行为单副本工作负载需自行评估风险。六、Rightsizing 工作流把推荐值变成资源配额VPA 的价值不只在自动调优更在于提供一个可审计的瘦身流程。文档给出的标准流程如下以Off模式部署 VPA纯推荐、不驱逐持续观察24 小时以上以覆盖业务高峰。读取推荐值kubectl describe vpa {deployment_name}-vpa -n {namespace}也可用 JSON 路径提取kubectl get vpa {deployment_name}-vpa -o jsonpath{.status.recommendation}将target值推荐的目标 requests与当前requests逐项对比。按 20% 缓冲应用new_request target * 1.2为突发流量留出余量避免一缩就触发扩容抖动。使用kubectl patch或更新 Deployment 清单应用新的资源 requests。6.1 决策参考表文档与 gke-cost-optimization 技能给出了高度一致的量化规则条件建议动作风险CPU request 5× P95 实际用量降至P95 * 1.2中等激进瘦身注意 CPU 突发性Memory request 3× P95 实际用量降至P95 * 1.2中等内存过配通常比 CPU 更隐蔽CPU request 2× P95 实际用量按 20% 缓冲 Right-sizing低相对保守的调整未设置资源 limits添加 limits 防止“噪声邻居”低防止单 Pod 抢占节点资源使用要点P95 实际用量可以从 Cloud Monitoring、kubectl top pods或 VPA 推荐状态中获取推荐值本身已基于历史曲线给出lowerBound/target/upperBound三档可直接使用target作为基准。表格给出的是决策触发条件而非万能公式真实场景应结合业务特性如秒杀型流量与上述 20% 缓冲规则综合判定。瘦身有成本收益过配 requests 是 GKE 上最大的资源浪费源之一但保守调整、分批灰度比一次激进收敛更稳妥——这正是Off → 分析 → 小步应用流程的意义。七、常见排查与联动建议HPA 没有生效先kubectl get hpa查看TARGETS列是否为unknown若指标拉不到确认 Metrics Server 运行状态与容器是否声明了 requests。副本数反复横跳检查是否 HPA 与 VPA 撞了同一个指标违背实践第 2 条或目标利用率设置过低。VPA 不驱逐确认副本数 ≥ 2或已显式设置minReplicas、应用能否优雅处理 SIGTERM、PDB 是否限制了驱逐。集群级容量当 Pod 扩容受节点容量限制时需配合 Cluster AutoscalerAutopilot 自动处理与 gke-cluster-autoscaler 技能节点机型与 Spot 选择见 gke-compute-classes。成本视角HPA/VPA 的 Right-sizing 与 Spot、CUD 等策略配合可显著降低成本完整路径参考 gke-cost-optimization。八、仓库资源索引技能主文档skills/cloud/gke-workload-scaling/SKILL.mdHPA 清单模板skills/cloud/gke-workload-scaling/assets/hpa-example.yamlVPA 清单模板skills/cloud/gke-workload-scaling/assets/vpa-example.yamlVPA 推荐模式Off模板skills/cloud/gke-cost-optimization/assets/vpa-recommendation-mode.yamlGKE 伸缩模型背景skills/cloud/gke-basics/references/core-concepts.mdAutopilot 资源请求约束skills/cloud/gke-basics/SKILL.md成本优化与 Right-sizing 联动skills/cloud/gke-cost-optimization/SKILL.md生产化就绪检查HPA/VPA/PDB 维度skills/cloud/gke-productionize/SKILL.md【免费下载链接】skillsAgent Skills for Google products and technologies项目地址: https://gitcode.com/GitHub_Trending/skills29/skills创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表