StatefulSet 资源回收流程
步骤1:删除StatefulSet控制器资源
执行 kubectl delete -f <statefulset资源清单路径> 删除StatefulSet控制器,其关联的Pod会被自动移除。
步骤2:处理PVC
删除StatefulSet资源清单时,关联的PVC不会被自动删除,这是K8s为了防止Pod的持久化数据被误抹除设计的机制:
- 若需要彻底清理数据,需手动执行PVC删除操作
- 若后续需要重新部署且复用原有持久化数据,可仅删除StatefulSet控制器、保留PVC,再次创建同名StatefulSet时会自动挂载匹配的PVC,复用历史数据
PV 状态流转与恢复方法
状态说明
删除所有关联PVC后,PV会进入Released(已释放)状态,该状态下的PV无法被新的PVC绑定,也无法被Pod挂载使用。
PV恢复方案
方案一:删除重建PV
删除需要恢复的PV资源,从原有PV模板中拷贝配置,移除历史绑定信息后重新执行 kubectl create -f <pv资源清单路径> 创建PV,此时PV会变为Available(可用)状态。原理是重新创建的PV对象无历史绑定记录,可正常参与PVC绑定分配。
方案二:直接编辑PV移除绑定信息(推荐)
无需删除重建,直接执行 kubectl edit pv <PV名称>,找到PV配置中的claimRef(绑定申请者信息)字段,删除该字段的所有内容后保存退出,PV即可从Released状态恢复为Available状态。该方式可批量处理多个Released状态的PV,操作更高效。
StatefulSet 核心特性补充
StatefulSet提供稳定的网络访问方式,基于Headless Service(无头服务)生成固定域名,域名格式为:
<pod名称>.<headless-svc名称>.<命名空间>.svc.cluster.local
格式参数说明:
- Pod名称由StatefulSet控制器名称 + 从0开始的序号组成,例如StatefulSet名为
web时,其Pod名称为web-0、web-1等 - 若未自定义域名后缀,默认使用
svc.cluster.local作为根域 - 相关域名配置已整理在随堂文档中,可后续领取查看
AI 总结
本段内容主要讲解StatefulSet资源的完整回收流程、PV/PVC的状态流转规则与两种PV恢复实操方案,同时补充StatefulSet基于Headless Service的稳定网络访问特性,重点明确了PVC不会随StatefulSet自动删除的机制设计,以及Released状态PV的高效恢复方法。