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

使用kubectl rollout status监控StatefulSet缩容失效问题问询

关于kubectl rollout status监控StatefulSet缩容的问题

核心结论

kubectl rollout status原生不支持监控StatefulSet的缩容过程,它的设计目标是跟踪滚动更新或扩容时Pod的就绪状态,对缩容场景只会检查StatefulSet的spec.replicas是否更新,不会等待Pod终止完成,因此会立即返回。

原因说明

StatefulSet的缩容操作本质是直接删除Pod,而rollout status的核心逻辑是跟踪"发布/扩容"的就绪流程——即确认新创建的Pod是否就绪,并不涉及Pod的终止生命周期监控。所以当你执行缩容后,只要StatefulSet的spec.replicas已更新,该命令就会判定"rollout完成",直接返回结果。

替代解决方案:自定义监控脚本

如果需要等待缩容完成,可以编写简单的shell脚本,循环检查StatefulSet的状态,直到达到期望的副本数且所有目标Pod已终止:

#!/bin/bash
# 配置参数
STS_NAME="my-cnn-box"
NAMESPACE="my-ns"
EXPECTED_REPLICAS=0

# 循环监控
while true; do
  # 获取当前就绪副本数(若不存在则返回0)
  CURRENT_READY=$(kubectl get sts "$STS_NAME" -n "$NAMESPACE" -o jsonpath='{.status.readyReplicas}' 2>/dev/null || echo 0)
  # 获取当前期望副本数
  CURRENT_REPLICAS=$(kubectl get sts "$STS_NAME" -n "$NAMESPACE" -o jsonpath='{.status.replicas}' 2>/dev/null || echo 0)
  
  # 检查是否达到缩容目标
  if [ "$CURRENT_REPLICAS" -eq "$EXPECTED_REPLICAS" ] && [ "$CURRENT_READY" -eq "$EXPECTED_REPLICAS" ]; then
    echo "✅ StatefulSet $STS_NAME 已成功缩容至 $EXPECTED_REPLICAS 副本"
    exit 0
  fi
  
  echo "⏳ 等待StatefulSet $STS_NAME 缩容至 $EXPECTED_REPLICAS 副本... 当前就绪: $CURRENT_READY, 当前期望: $CURRENT_REPLICAS"
  sleep 5
done

使用方法:

  1. 将脚本保存为wait-sts-scale-down.sh
  2. 赋予执行权限:chmod +x wait-sts-scale-down.sh
  3. 执行脚本:./wait-sts-scale-down.sh

扩展说明

如果是缩容到非0的副本数,脚本逻辑依然适用——只需修改EXPECTED_REPLICAS的值即可。脚本会持续等待,直到StatefulSet的就绪副本数等于期望副本数,确保缩容操作彻底完成。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 06:28:20