发布时间:2026/8/23 22:53:56
Kubernetes 上手实战(7):弹性伸缩与健康检查 上一篇用 Gateway API 把请求送到 Ready 后端。本篇定义 Ready 到底意味着什么并用 Metrics Server、资源请求与 HPA 构成闭环指标上升触发扩容负载下降后再受控缩容。一、痛点活着、就绪和启动完成不是一回事livenessProbe 判断容器是否陷入需要重启的故障readinessProbe 判断它是否应进入 Service 端点startupProbe 为慢启动应用提供独立启动窗口成功后才启用另外两类探针。把三者都指向同一个浅层/health会丢失语义尤其 liveness 依赖数据库时数据库故障可能让所有实例同时重启并放大事故。readiness 可检查接流量所需的关键依赖但要快速、有界并避免瞬时抖动。liveness 应主要检查进程内部不可恢复状态。startup 允许应用完成迁移、缓存预热等操作不过数据库迁移更适合独立 Job以免多个副本争抢执行。HPA 控制器周期读取指标计算期望副本并更新 Deployment 的 scale 子资源。CPU 利用率是实际 CPU 使用量与容器 CPU request 的比值没有 request 时HPA 无法为该容器正确计算这一指标。HPA 不是资源配置的替代品它依赖合理 requests。二、原理两个控制循环必须协调Deployment 控制副本与发布HPA 动态控制 replicas。启用 HPA 后不要让 GitOps 工具持续把静态 replicas 改回固定值否则两个控制器会争夺字段。可以从工作负载清单移除 replicas或配置 GitOps 忽略该差异并在 HPA 中表达最小与最大副本。扩容速度受指标采样、HPA 同步、调度、镜像拉取和应用就绪共同影响。面对突发流量仅靠 HPA 可能来不及应保留容量、预热镜像、设置合理最小副本并在入口限流。缩容还会终止实例需结合终止宽限、连接排空和 PodDisruptionBudget。下面的清单使用可产生 CPU 负载的 PHP Apache 官方示例模式探针检查根路径HPA 以 50% CPU 为目标。它是独立实验不依赖前文 Nginx 文件。运行前确保集群已安装 Metrics Serverkind 环境可能需要按其文档调整 kubelet TLS 设置。apiVersion:apps/v1kind:Deploymentmetadata:name:web-scalespec:selector:matchLabels:app:web-scaletemplate:metadata:labels:app:web-scalespec:containers:-name:webimage:registry.k8s.io/hpa-example:latestports:-name:httpcontainerPort:80resources:requests:cpu:100mmemory:32Milimits:cpu:500mmemory:128MistartupProbe:httpGet:path:/port:httpperiodSeconds:2failureThreshold:30readinessProbe:httpGet:path:/port:httpperiodSeconds:5failureThreshold:2livenessProbe:httpGet:path:/port:httpperiodSeconds:10failureThreshold:3---apiVersion:v1kind:Servicemetadata:name:web-scalespec:selector:app:web-scaleports:-port:80targetPort:http---apiVersion:autoscaling/v2kind:HorizontalPodAutoscalermetadata:name:web-scalespec:scaleTargetRef:apiVersion:apps/v1kind:Deploymentname:web-scaleminReplicas:2maxReplicas:8behavior:scaleDown:stabilizationWindowSeconds:120metrics:-type:Resourceresource:name:cputarget:type:UtilizationaverageUtilization:50三、实现产生负载并观察控制器先用kubectl top验证指标管线若出现 unknown等待采样或排查 Metrics Server不能继续声称 HPA 有效。脚本创建负载 Pod循环请求 Service观察 HPA 与 Pod删除负载后由于稳定窗口缩容不会立刻发生。#!/usr/bin/env bashset-euopipefail kubectl apply-fautoscale.yaml kubectl rollout status deployment/web-scale--timeout180s kubectlwait--forconditionReady pod-lappweb-scale--timeout120s kubectltoppods-lappweb-scale kubectl delete pod load-generator --ignore-not-found kubectl run load-generator\--imagebusybox:1.36.1\--restartNever\--command--sh-c\while true; do wget -q -O- http://web-scale /dev/null; doneforattemptin$(seq118);dokubectl get hpa web-scalereplicas$(kubectl get deployment web-scale-ojsonpath{.status.replicas})echoattempt${attempt}replicas${replicas:-0}if[${replicas:-0}-gt2];thenbreakfisleep10donekubectl get pods-lappweb-scale-owide kubectl describe hpa web-scale kubectl delete pod load-generatorechoload stopped; scale-down follows the stabilization policy预期 CPU 指标升高后副本数大于 2且不超过 8。具体时刻和数值由机器性能决定不应写死。若始终不扩容检查请求是否真正消耗 CPU、metrics 是否有值、request 是否存在以及 HPA events 中的原因。内存通常不是理想的缩容信号因为运行时可能保留已分配内存。队列消费者更适合按积压长度伸缩可使用自定义/外部指标或 KEDA。任何指标都要与业务容量关系明确每个副本每秒能处理多少请求、目标延迟是多少、扩容需要多久。四、踩坑探针也能制造故障探针超时过短、频率过高会增加负载在 CPU 节流时liveness 超时可能反复重启形成雪崩。先观测启动时间与健康端点延迟再设置 initialDelay、timeout、period 和 failureThreshold。HTTP 探针默认从节点访问 Pod IP因此端点必须监听正确接口与端口。readiness 失败会摘除流量却不重启容器这通常是依赖短暂不可用时的正确行为。liveness 失败会丢失进程内状态应谨慎。应用主动退出也是有效恢复策略由 kubelet 按 restartPolicy 重启不要把所有错误都堆进复杂探针。HPA 达到 maxReplicas 仍高延迟时继续扩容可能被数据库、配额或节点容量限制。Cluster Autoscaler 负责节点层扩容但也有分钟级延迟。需要入口限流、背压、队列和降级共同构成过载保护。五、验证从资源指标走向业务目标验收包含探针失败行为、扩容延迟、最大副本、缩容稳定性和发布期间 HPA 行为。可临时把 readiness 路径改错确认 Pod 从端点移除但容器不因 readiness 单独重启故障实验结束立即恢复并等待 rollout。生产告警不应只看副本数而要关联请求率、错误率、延迟、CPU 节流、Pending Pod 和 HPA 条件。目标是业务 SLO 下的容量闭环不是让 CPU 曲线好看。压力测试也要设停止条件避免在共享环境无限制造流量。下一篇将把 Deployment、Service、HPA 和配置整理成 Helm Chart用 values 管理环境差异并通过 lint、template 和原子升级形成可发布制品。伸缩参数应来自阶梯压测。固定副本数逐级提高请求速率记录吞吐、错误率、延迟、处理器、内存和依赖饱和点找出单副本在目标延迟下的安全容量再据此计算最小副本和最大副本。最大值还需受数据库连接、节点配额和成本约束。若每增加一个 Pod 就建立大量连接扩容反而可能把数据库压垮应先限制连接池并建立全链路容量模型。验收伸缩时同时记录发现负载、提出副本、实例调度、镜像就绪、进入端点五个时间点端到端扩容时间才是用户真正承受的窗口。对可预测高峰可以定时预扩容对不可预测突发则依靠容量余量、限流与降级。缩容前确认连接排空和后台任务可中断避免指标恢复正常后因为过快终止又产生错误峰值。压测结束后要确认临时负载已停止、额外副本按策略回落并保存指标时间窗与伸缩事件。这样下次修改资源请求或目标阈值时可以用同一负载模型比较而不是凭主观感受判断更快或更省。完成容量基线后下一篇会把工作负载、服务、配置与伸缩规则整理为可版本化的 Helm 软件包减少环境间的清单漂移。HPA 的核心计算可以离线复现。下面程序根据各 Pod 当前 CPU、request 和目标利用率估算期望副本并施加最小、最大副本边界。它解释了为什么缺少 request 时 CPU 利用率型 HPA 无法可靠工作。importmath cpu_usage_millicores[82,76,92]cpu_request_millicores100target_utilization60current_replicaslen(cpu_usage_millicores)min_replicas2max_replicas8ifcpu_request_millicores0:raiseValueError(CPU request must be positive)average_usagesum(cpu_usage_millicores)/current_replicas current_utilizationaverage_usage/cpu_request_millicores*100raw_desiredmath.ceil(current_replicas*current_utilization/target_utilization)desiredmax(min_replicas,min(max_replicas,raw_desired))print(fcurrent_replicas{current_replicas})print(faverage_cpu{average_usage:.1f}m)print(futilization{current_utilization:.1f}%)print(fdesired_replicas{desired})运行输出current_replicas3 average_cpu83.3m utilization83.3% desired_replicas5探针验收不能只看单次成功。第二个程序实现连续成功/失败阈值启动完成后连续两次 readiness 成功才接流量连续三次失败才摘流避免短暂抖动造成端点频繁进出。samples[False,True,True,False,True,False,False,False]success_threshold2failure_threshold3readyFalsesuccesses0failures0forindex,healthyinenumerate(samples,start1):ifhealthy:successes1failures0else:failures1successes0ifnotreadyandsuccessessuccess_threshold:readyTrueifreadyandfailuresfailure_threshold:readyFalseprint(fsample{index}healthy{healthy}fsuccesses{successes}failures{failures}ready{ready})运行输出sample1 healthyFalse successes0 failures1 readyFalse sample2 healthyTrue successes1 failures0 readyFalse sample3 healthyTrue successes2 failures0 readyTrue sample4 healthyFalse successes0 failures1 readyTrue sample5 healthyTrue successes1 failures0 readyTrue sample6 healthyFalse successes0 failures1 readyTrue sample7 healthyFalse successes0 failures2 readyTrue sample8 healthyFalse successes0 failures3 readyFalse参考来源Configure Liveness, Readiness and Startup ProbesHorizontal Pod AutoscalingResource Metrics PipelineKEDA Documentation 觉得有用就点个赞 收藏方便回头查阅有疑问直接在评论区留言我看到都会回。 本文属于《Kubernetes 上手实战》系列持续更新关注不迷路。 文章里的代码都能直接跑。想要可直接 clone 的完整工程 配套部署脚本 / 踩坑清单评论一声或发邮件到cj2664qq.com我免费发你。如果你正好在做类似系统、或有工程化难题想找人做也欢迎邮件聊一句——我按实际情况评估能落地的就接单或出方案。评论和邮件都能直接找到我不用跳别的平台。

相关新闻

2026/8/23 22:53:56

你写的CSND文章只有AI在看

扎心真相:你在 CSDN 写的技术文章,现在只有 AI 在看 前言 打开 CSDN 后台,看着自己专栏里几十上百篇原创文章,阅读数据日积月累,看似硕果累累。 你一度以为:我在持续输出、持续沉淀,有很多开发者…

2026/8/23 22:53:56

Kubernetes 上手实战(8):Helm 打包应用

上一篇已经让 web 具备健康检查和 HPA,但多个 YAML 开始出现重复值与环境差异。本篇用 Helm 把 Deployment、Service 和配置打成版本化 Chart,同时保留 Kubernetes 原生对象的可读性与可审查性。 一、痛点:复制 YAML 会制造隐性分叉 开发、…

2026/8/23 23:59:23

优选乡墅赋能培训课程包含哪些内容,有什么作用?

优选乡墅赋能培训课程能助力学员掌握乡墅业务各环节知识与技能,湖北乡墅研究中心的课程体系完善,涵盖多方面内容。知识保障湖北乡墅研究中心提供运营标准赋能体系整套SOP全部手册,为学员提供全面、系统的理论知识依据。这些手册详细记录乡墅业…

2026/8/23 23:59:23

论文AI率过高怎么办?2026年12款免费降AI率工具实测指南

现在毕业论文答辩前,“AI率超标”已经彻底取代“查重率过高”,成了同学们的头号难题!不少同学只是用AI润色了摘要和结论,AI率直接飙升到离谱,纯手动修改根本不管用——这说明AIGC检测系统抓的不是个别词语,…

2026/8/23 23:59:23

Marketch:从Sketch画板直接量取CSS

Marketch:从Sketch画板直接量取CSS 【免费下载链接】marketch Marketch is a Sketch 3 plug-in for automatically generating html page that can measure and get CSS styles on it. 项目地址: https://gitcode.com/gh_mirrors/ma/marketch 设计稿交付还在…

2026/8/23 23:59:23

如何在ThinkPad X390上安装macOS:OpenCore EFI完整指南

如何在ThinkPad X390上安装macOS:OpenCore EFI完整指南 【免费下载链接】ThinkpadX390-Opencore-EFI macOS Catalina & Big Sur & Monterey on ThinkPad X390 (Hackintosh) 项目地址: https://gitcode.com/gh_mirrors/th/ThinkpadX390-Opencore-EFI …

2026/8/23 23:54:23

Python多线程编程:安全停止线程的最佳实践

Python多线程编程:安全停止线程的最佳实践关键词:Python多线程、线程安全、Event对象、守护线程、GIL适用场景:需要长期运行的后台线程、定时任务、同步服务难度等级:⭐⭐⭐(中级)一、问题背景在Python多线…

2026/8/23 0:02:04

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/23 0:02:04

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/23 0:02:04

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/23 0:02:04

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/23 0:02:04

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/23 0:02:04

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/23 13:29:45

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/23 6:14:43

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/23 4:22:01

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…