一句话概括:
kubectl scale:操作 Deployment 的期望副本数(改 "目标状态"),控制一共要跑多少实例kubectl delete pod:直接干掉某个正在运行的 Pod(只是删掉单个运行实例,不改期望副本)
K8s 的核心逻辑:控制器(Deployment)持续对比「期望副本数」和「当前实际运行 Pod 数量」,不一致就调。
1. kubectl scale deployment xxx --replicas=N
# 全部停服,停业
kubectl scale deploy java-app --replicas=0
# 扩容到3实例
kubectl scale deploy java-app --replicas=3
✅ 本质:修改 Deployment 资源里 spec.replicas
replicas=0:期望就是 0 个 Pod → 控制器会逐个优雅终止所有 Pod,并且不会重建,适合整体停业、版本下线。replicas=3:期望 3 个,不够就新建,多了就缩掉多余 Pod。
scale 的行为细节
- 先把要销毁的 Pod 从 Service 后端移除(不再接收新流量)
- 给 Pod 发送 SIGTERM,等待优雅关闭(
terminationGracePeriodSeconds) - 超时没退出 → 强制 SIGKILL,销毁 Pod
- 期望副本写死在 Deployment 里,只要你不改这个数字,控制器就维持这个数量
适用场景:
- 整体业务停机维护(停业)
- 发布前缩容、压测扩容
- 调整业务实例数量
2. kubectl delete pod xxx
kubectl delete pod java-app-7f96587b4d-2xqzk
✅ 本质:删除单个正在运行的 Pod 对象,Deployment 的期望副本数不变!
控制器一看:我预期要跑 2 个,现在只剩 1 个 → 立刻调度新建一个 Pod 补上
行为:
- 目标 Pod 被从 Service 摘除
- 发送 SIGTERM,等待优雅关闭,销毁 Pod
- 马上创建全新 Pod,恢复到原来的副本数量
适用场景:
- 某个 Pod 异常(OOM、卡死、网络异常),删掉让它重建自愈
- 测试 Pod 重启效果 ❌ 不适合整体停业!删完全部 pod,K8s 会不断新建,业务反复启停
加
--grace-period=0 --force只是跳过优雅等待,不会改变 "重建" 这个逻辑
对比表
表格
| 项目 | scale deploy --replicas=0 | delete pod 单个 Pod |
|---|---|---|
| 修改对象 | Deployment 期望副本数 | 单个 Pod 实例 |
| 是否重建 Pod | ❌ 不会重建(期望 = 0) | ✅ 自动重建新 Pod 补齐副本 |
| 作用范围 | 批量控制全部实例 | 只删指定那一个 Pod |
| 业务效果 | 整体停业,所有实例下线 | 单个实例销毁,业务继续运行(其他 Pod 扛流量) |
| 恢复业务 | scale 调回原来副本数 | 不需要操作,自动拉起 |
| 对应旧裸机类比 | 把整个服务停掉(不再启动) | 杀掉一个进程,系统自动拉起新进程 |
极易踩坑的场景举例
假设你的 Deployment replicas=2:
- 执行
delete pod pod1 pod2- 删掉两个 Pod → Deployment 发现副本不足,瞬间创建 2 个新 Pod,业务几乎不中断,达不到停业目的!
- 执行
scale deploy --replicas=0- K8s 依次终止 2 个 Pod,期望副本变成 0,不再新建 Pod,业务完全停业
补充小知识点
-
scale 只对Deployment/StatefulSet/ReplicaSet这类控制器有效,不能直接 scale 单个 Pod
-
StatefulSet 也能用 scale 缩到 0 来停机,行为类似,但 Pod 是有序销毁、有序启动
-
如果你是临时发布滚动更新,不需要手动 scale ,直接
kubectl apply新镜像,Deployment 自动滚动重建 Pod -
scale deploy和scale deployment完全等价,都能用deploy是deployment的资源简写 (shortname)。# 两条命令一模一样 kubectl scale deployment java-app --replicas=0 kubectl scale deploy java-app --replicas=01)scale 语法格式
kubectl scale 【资源类型】 【资源名称】 --replicas=Nscale 不是只能给 deployment 用,后面是 K8s 资源类型,不是固定死关键字 scale 支持这几类控制器资源:
deployment/deploystatefulset/stsreplicaset/rsreplicationcontroller/rc
❌ 不能用在 Pod、Service、ConfigMap 这类资源 ,Pod 不是控制器,没有 replicas 副本概念,kubectl scale pod xxx会报错。
常用资源简写对照表(日常高频)
表格
全称 简写 deployment deploy statefulset sts replicaset rs replicationcontroller rc namespace ns service svc configmap cm secret secret(无简写) pod po 示例:
# statefulset缩容 kubectl scale sts mysql --replicas=02)怎么自己查资源简写
kubectl api-resources输出里 SHORTNAMES 那一列就是简写。
3)额外注意一个坑
scale是修改控制器的spec.replicas。 如果你 Deployment 里写了 HPA(自动扩缩容) : 执行 scale 设置副本后,HPA 后续可能又自动把副本改回去,如果要彻底停业,要先临时注释 / 暂停 HPA。一句话总结
scale是子命令 ;后面跟着的是K8s 资源类型,可以写全称或者简写。
scale deploy= 简写写法(运维日常敲命令首选,短),scale deployment= 完整规范写法(写文档、脚本推荐,可读性强)
一句话选型口诀
要整体停业、下线业务:用 scale 0 单个实例异常,需要自动重启恢复:delete pod