使用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
使用方法:
- 将脚本保存为
wait-sts-scale-down.sh - 赋予执行权限:
chmod +x wait-sts-scale-down.sh - 执行脚本:
./wait-sts-scale-down.sh
扩展说明
如果是缩容到非0的副本数,脚本逻辑依然适用——只需修改EXPECTED_REPLICAS的值即可。脚本会持续等待,直到StatefulSet的就绪副本数等于期望副本数,确保缩容操作彻底完成。
内容的提问来源于stack exchange,提问作者Tilo
相关产品推荐
相关产品推荐

