当前位置: 首页 > news >正文

【Kubernetes】使用StatefulSet进行的资源调度,删除更新策略

K8s StatefulSet 删除更新策略(OnDelete)实战演示

在 Kubernetes 中,StatefulSet 作为管理有状态应用的核心控制器,其更新策略直接影响应用的稳定性和升级效率。本文将通过实战操作,详细讲解 OnDelete 这种更新策略的工作原理和使用场景,非常适合初学者理解和上手。

什么是 StatefulSet 更新策略?

StatefulSet 的更新策略用于定义当 StatefulSet 配置(如镜像版本、资源限制等)发生变化时,如何更新其管理的 Pod。Kubernetes 提供两种主要更新策略:

  • RollingUpdate(滚动更新):默认策略,会按顺序自动更新 Pod(从编号最大的开始),旧 Pod 终止后才创建新 Pod,保证服务连续性。
  • OnDelete(删除触发更新):手动触发策略,配置修改后不会自动更新 Pod,只有当用户手动删除 Pod 时,StatefulSet 才会创建新的 Pod 应用新配置。

实战准备:环境与初始状态

环境说明

  • 已创建名为 web 的 StatefulSet,管理 5 个 Pod(web-0web-4
  • 关联的 Headless Service 为 nginx(ClusterIP: None)
  • 当前所有 Pod 使用的镜像为 nginx:1.7.9

初始状态验证

通过 kubectl get po,svc,sts 查看资源状态:

# 输出显示 5 个 web 开头的 Pod 均正常运行,StatefulSet 就绪状态为 5/5
NAME                   READY   STATUS    RESTARTS   AGE
pod/web-0              1/1     Running   0          4m27s
pod/web-1              1/1     Running   0          4m29s
pod/web-2              1/1     Running   0          4m31s
pod/web-3              1/1     Running   0          6m26s
pod/web-4              1/1     Running   0          6m28sNAME                  TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
service/nginx         ClusterIP   None         <none>        80/TCP    10mNAME                   READY   AGE
statefulset.apps/web   5/5     10m

通过 kubectl describe po <pod名称> 查看镜像版本(以 web-4 为例):

# 关键信息:Containers.nginx.Image 为 nginx:1.7.9
Containers:nginx:Image:          nginx:1.7.9Image ID:       docker-pullable://nginx@sha256:e3456c851a152494c3e4ff5fcc26f240206abac0c9d794affb40e0714846c451

步骤1:修改 StatefulSet 更新策略为 OnDelete

首先通过 kubectl edit sts web 编辑 StatefulSet 配置,将更新策略修改为 OnDelete

# 编辑时需修改的关键配置
spec:updateStrategy:type: OnDelete  # 将默认的 RollingUpdate 改为 OnDelete

修改后无需重启 Pod,配置会立即生效,但此时 Pod 仍使用旧镜像(nginx:1.7.9)——这正是 OnDelete 的特性:配置修改不触发自动更新


步骤2:修改镜像版本并验证效果

kubectl edit sts web 中进一步修改容器镜像为 nginx:1.21

spec:template:spec:containers:- name: nginximage: nginx:1.21  # 从 1.7.9 改为 1.21

修改后再次查看所有 Pod 状态,会发现 所有 Pod 仍正常运行且镜像未变化(因为 OnDelete 策略下,仅修改配置不会触发更新)。


步骤3:手动删除 Pod 触发更新

OnDelete 策略的核心逻辑是:只有手动删除 Pod 时,StatefulSet 才会创建新 Pod 并应用新配置。我们通过以下操作验证:

操作1:删除 web-4 并查看效果

kubectl delete po web-4  # 删除旧 Pod

等待几秒后,StatefulSet 会自动重建 web-4。通过 kubectl describe po web-4 查看新 Pod 信息:

# 关键变化:镜像已更新为 nginx:1.21
Containers:nginx:Image:          nginx:1.21Image ID:       docker-pullable://nginx@sha256:2bcabc23b45489fb0885d69a06ba1d648aeda973fae7bb981bafbb884165e514

操作2:批量验证选择性更新

继续删除 web-3web-0,保留 web-1web-2

kubectl delete po web-3
kubectl delete po web-0

通过对比所有 Pod 的镜像版本,可得到如下结果:

Pod 名称操作前镜像操作后镜像说明
web-01.7.91.21被删除后重建,应用新镜像
web-11.7.91.7.9未被删除,保持旧镜像
web-21.7.91.7.9未被删除,保持旧镜像
web-31.7.91.21被删除后重建,应用新镜像
web-41.7.91.21被删除后重建,应用新镜像

关键结论:OnDelete 策略的特点与适用场景

通过上述实验,我们可以总结 OnDelete 策略的核心特性:

  1. 手动控制更新时机:更新完全由用户决定,删除哪个 Pod 就更新哪个,灵活性高。
  2. 支持灰度更新:可先更新部分 Pod(如先更 web-4、web-3 验证稳定性,再更新其他),降低风险。
  3. 无自动干扰:配置修改后不会自动操作 Pod,适合对稳定性要求极高的场景(如数据库集群)。

适用场景

  • 有状态应用的灰度升级(需验证新版本兼容性)
  • 数据库等敏感服务(避免自动更新导致的数据不一致)
  • 需要精确控制更新顺序的场景(如主从架构需先更从节点)

对比:OnDelete 与 RollingUpdate 的核心差异

特性OnDeleteRollingUpdate(默认)
更新触发方式手动删除 Pod 时触发配置修改后自动触发
更新顺序无强制顺序(用户手动控制)从编号最大的 Pod 开始(倒序)
服务连续性需手动保证(可保留旧 Pod 运行)自动保证(旧 Pod 终止前不删新 Pod)
适用场景灰度更新、敏感服务常规滚动升级、无状态服务

总结

演示了 StatefulSet 的 OnDelete 更新策略

  1. OnDelete 是“手动触发”型更新策略,配置修改不自动更新 Pod;
  2. 需手动删除 Pod,StatefulSet 才会重建并应用新配置;
  3. 适合灰度更新、敏感服务等需要精确控制的场景。

http://www.dtcms.com/a/303001.html

相关文章:

  • Linux 应用程序组成
  • haproxy原理及实验演示(实现服务器集群的负载均衡)
  • 火线、零线、地线
  • 雷达系统设计学习:自制6GHz FMCW Radar
  • C++中std::variant的使用详解和实战代码示例
  • 三角洲摸金模拟器(简易版本)(开源)
  • 黑马JavaWeb【复习到哪更新到哪】
  • Coze Studio概览(二)
  • 【MySQL基础篇】:MySQL常用数据类型的选择逻辑与正确使用
  • Go语言-->变量
  • 【Practical Business English Oral Scene Interpretation】在职日常交流No.1~6
  • MySQL面试题及详细答案 155道(001-020)
  • 重构企业交互逻辑:云蝠智能 Voice Agent 的落地价值与实践指南
  • 设计模式(二十一)行为型:状态模式详解
  • 常见的未授权访问漏洞靶场-练习教程
  • MCP架构:模型上下文协议的范式革命与工程实践
  • 安宝特新闻丨安宝特与Logivations正式建立合作伙伴关系,共筑物流新未来
  • OpenLayers 综合案例-区域掩膜
  • JavaWeb 新手学习路线:从零到全栈开发,系统掌握企业级 Web 开发技能
  • 【Java Web实战】从零到一打造企业级网上购书网站系统 | 完整开发实录(三)
  • 7.DRF 过滤、排序、分页
  • 微信小程序——早餐小程序
  • 22 BTLO 蓝队靶场 Countdown 解题记录
  • 博士申请 | 荷兰阿姆斯特丹大学 招收计算机视觉(CV)方向 全奖博士生
  • 代码的“防伪水印“:签名证书的隐形安全标记
  • 【python高阶】-1- python工程和线程并发
  • 电路防倒灌设计 --- 双pmos防倒灌
  • 学习dify:一个开源的 LLM 应用开发平台
  • AUTOSAR标准下CAN网络休眠异常诊断机制的创新研究
  • SD卡简介与驱动开发