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我免费发你。如果你正好在做类似系统、或有工程化难题想找人做也欢迎邮件聊一句——我按实际情况评估能落地的就接单或出方案。评论和邮件都能直接找到我不用跳别的平台。

相关新闻

你写的CSND文章只有AI在看

你写的CSND文章只有AI在看

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

2026/8/23 22:54:21 阅读更多 →
Kubernetes 上手实战(8):Helm 打包应用

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

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

2026/8/23 22:54:21 阅读更多 →
真理自明与方法退场:基于贾子理论(KTS)的文明级认知操作系统与全球人工智能范式重构

真理自明与方法退场:基于贾子理论(KTS)的文明级认知操作系统与全球人工智能范式重构

真理自明与方法退场:基于贾子理论(KTS)的文明级认知操作系统与全球人工智能范式重构摘要本文以贾子理论大厦(Kucius Theory System, KTS)为唯一公理基底,系统论证一个核心命题:真理是自明的&…

2026/8/23 22:54:21 阅读更多 →

最新新闻

向量缓存要先定义失效与回退规则

向量缓存要先定义失效与回退规则

向量缓存要先定义失效与回退规则 向量检索结果是否适合缓存,取决于语料更新频率、权限变化和查询特征。缓存命中旧数据时,反而可能给回答引入过期上下文。 缓存键包含必要边界 缓存键至少区分租户或权限范围、索引版本、检索参数和查询规范化规则。不…

2026/8/24 7:36:41 阅读更多 →
Flink面试题库:核心原理与实战技巧解析

Flink面试题库:核心原理与实战技巧解析

1. 为什么需要这份Flink面试题库?作为大数据处理领域的核心框架,Apache Flink近年来在企业级应用中的占比持续攀升。根据2023年最新行业调研,超过67%的实时计算场景选择Flink作为底层引擎。但与之形成鲜明对比的是,市场上系统掌握…

2026/8/24 7:36:41 阅读更多 →
开关电源PCB布局设计:从核心原理到实战避坑指南

开关电源PCB布局设计:从核心原理到实战避坑指南

1. 项目概述:为什么开关电源的布局设计是“玄学”也是“科学”干了十几年硬件,画过的板子堆起来能当凳子坐,但每次碰到开关电源的PCB布局,心里那根弦还是会绷紧。这玩意儿你说它是玄学吧,它背后全是电磁场、热力学和信…

2026/8/24 7:36:41 阅读更多 →
异步服务升级前先确认取消与超时语义

异步服务升级前先确认取消与超时语义

异步服务升级前先确认取消与超时语义 升级异步框架时,最容易被忽略的是取消、超时和异常组的行为差异。代码能启动不等于请求链路没有变化,尤其是依赖库在后台创建任务时。 锁定当前行为 先保存依赖版本、关键配置和一组可重复的请求样例。样例至少包括正…

2026/8/24 7:36:41 阅读更多 →
定制智能体框架时先守住扩展边界

定制智能体框架时先守住扩展边界

定制智能体框架时先守住扩展边界 框架定制的风险往往来自覆盖默认行为:某个回调改了消息结构,或某个工具包装吞掉异常,问题会在多轮调用后才显现。先确认现有扩展点能否满足需求,再决定是否改动底层。 用窄接口包住自定义逻辑 工具…

2026/8/24 7:36:41 阅读更多 →
C语言递归函数详解:从原理到实战优化与调试技巧

C语言递归函数详解:从原理到实战优化与调试技巧

这次我们来看 C 语言中的递归函数。对于很多初学者来说,递归是一个听起来很酷、用起来很懵的概念。它不像循环那样直观,但却是解决分治、回溯、树形结构等问题的利器。这篇文章不绕弯子,直接讲清楚递归函数的核心是什么、怎么用、什么时候用&…

2026/8/24 7:35:41 阅读更多 →

日新闻

前端内容安全与依赖审计实践

前端内容安全与依赖审计实践

前端内容安全与依赖审计实践 前端安全依赖分层防护。没有任何单一配置能替代输出编码、权限校验和依赖更新。 把不可信内容当作数据 默认使用框架的转义能力;确需渲染 HTML 时,先在服务端或可信的客户端库中进行白名单过滤。避免把用户输入直接赋给 inne…

2026/8/24 1:08:15 阅读更多 →
Windows登录密码存储机制全解析:从哈希算法到安全加固实战

Windows登录密码存储机制全解析:从哈希算法到安全加固实战

1. 项目概述:Windows登录密码的“黑匣子”每次你按下CtrlAltDel,输入密码,然后看到那个熟悉的桌面,这背后发生了一系列复杂而精密的操作。作为一名长期与Windows系统打交道的从业者,我经常被问到:“我的密码…

2026/8/24 1:08:15 阅读更多 →
AI面试系统安全挑战与解决方案

AI面试系统安全挑战与解决方案

1. 项目概述:AI面试系统的安全挑战去年参与某跨国企业AI面试系统部署时,遇到一个典型案例:候选人在视频面试中无意提到竞争对手产品名称,系统竟自动将该信息关联到企业知识库并生成竞品分析报告。这个看似"智能"的功能&…

2026/8/24 1:08:15 阅读更多 →

周新闻

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

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

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

2026/8/24 0:06:02 阅读更多 →
SIP通话转接原理与REFER方法实战解析

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

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

2026/8/24 0:20:20 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

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

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

2026/8/24 0:14:11 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/23 18:47:06 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/23 12:10:44 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/22 3:22:48 阅读更多 →