kubernetes StatefulSet with podManagementPolicy=OrderedReady and minReadySeconds does not scale down correctly

kxeu7u2r  于 6个月前  发布在  Kubernetes
关注(0)|答案(1)|浏览(54)

发生了什么?

  1. 创建OrderedReady有状态集
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: nginx-roll
spec:
  replicas: 2
  minReadySeconds: 30
  podManagementPolicy: OrderedReady
  updateStrategy:
    type: RollingUpdate
  selector:
    matchLabels:
      app: nginx-roll
  template:
    metadata:
      labels:
        app: nginx-roll
    spec:
      containers:
      - name: nginx
        image: ghcr.io/nginxinc/nginx-unprivileged:latest
        ports:
        - containerPort: 80
          name: web
  1. 等待第二个pod变为就绪状态,但不可用(当pod失去可用性时也可能发生)
  2. 将有状态集缩放到1个副本
kubectl scale statefulset nginx-roll --replicas=1
  1. 第二个pod应该立即开始终止,但它会挂起,直到KCM完全同步

你期望会发生什么?

第二个pod应该立即开始终止

我们如何尽可能精确地重现它?

查看 What happened?

我们需要了解其他信息吗?

我们可以在日志中看到同步正在进行,但firstUnhealthyPod变量没有解析,因此进度停滞不前

stateful_set_control.go:509] "StatefulSet is waiting for Pod to be Available prior to scale down" statefulSet="test/nginx-roll" pod=""

我们甚至得到了可用性检查的调度和调用,但由于先前的调度已经发生,新的检查被丢弃了(不应该发生,但在#119352中报告了一个类似的问题,并且修复被阻止在#112328上)

stateful_set.go:243] "StatefulSet will be enqueued after minReadySeconds for availability check" statefulSet="test/nginx-roll" minReadySeconds=30

同步将被调用得太早并再次解决在

stateful_set_control.go:509] "StatefulSet is waiting for Pod to be Available prior to scale down" statefulSet="test/nginx-roll" pod=""

下一次同步将在KCM完全同步时发生,这可能需要很长时间(取决于KCM重新同步周期)
有状态集控制器应尽快缩小第一个被谴责的pod,但保持前任pods运行可用

Kubernetes版本

$ kubectl version
Client Version: v1.29.2
Kustomize Version: v5.0.4-0.20230601165947-6ce0bf390ce3
Server Version: v1.29.0-rc.1.3813+a0beecc776d492-dirty

云提供商

NA

OS版本

# On Linux:
$ cat /etc/os-release
# paste output here
$ uname -a
# paste output here

# On Windows:
C:\> wmic os get Caption, Version, BuildNumber, OSArchitecture
# paste output here

安装工具

容器运行时(CRI)和版本(如适用)

相关插件(CNI,CSI等)和版本(如适用)

hc2pp10m

hc2pp10m1#

/sig apps
/triage accepted
/priority important-longterm

相关问题