You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

k8s StatefulSet从1/1变为0/0无变更记录原因排查

问题根因

StatefulSet的副本数被人通过kubectl手动改成了0,控制器自动回收了所有关联Pod,导致就绪状态变为0/0。这类手动扩缩容操作不会触发Helm版本更新,也不会生成新的rollout修订版本,所以你查不到变更记录。

核心证据
  • 你导出的StatefulSet YAML里spec.replicas明确写的是0,K8s控制器的逻辑就是始终让实际运行Pod数和replicas声明值对齐,声明为0自然会清空所有Pod。
  • 资源的managedFields字段直接记录了操作来源和时间:
    - apiVersion: apps/v1
      fieldsType: FieldsV1
      fieldsV1:
        f:spec:
          f:replicas: {}
      manager: kubectl
      operation: Update
      time: "2022-06-24T11:37:22Z"
    
    这段记录说明2022-06-24 11:37:22,有人通过kubectl客户端直接修改了这个StatefulSet的replicas字段,和你发现故障的时间完全匹配。
为什么查不到变更历史
  • kubectl rollout history只会记录**Pod模板(spec.template)**变更触发的滚动更新版本,单纯修改replicas属于扩缩容操作,不会改动Pod模板,因此不会生成新的修订版本,所以你查询只会看到最初的REVISION 1。
  • 这次修改是直接操作StatefulSet资源,没有走helm upgrade/helm rollback流程,Helm的发布历史里自然也不会留记录。后续如果执行helm upgrade操作,replicas值会被Chart里定义的默认值覆盖。
修复方法

直接把副本数改回你预期的数值即可,比如原本是1副本就执行:

kubectl scale sts sts-test -n proxy --replicas=1

如果要避免后续再出现这类问题:

  • 可以给Helm管理的资源加上"helm.sh/resource-policy": keep注解,避免手动调整被后续Helm操作覆盖
  • 收敛集群操作权限,禁止无关人员直接通过kubectl修改Helm托管的资源

内容的提问来源于stack exchange,提问作者moluzhui

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 05:45:40