StatefulSet的minReadySeconds与Parallel模式podManagementPolicy是否兼容?
StatefulSet的minReadySeconds与Parallel模式podManagementPolicy是否兼容?
您好,这个现象确实是正常且符合Kubernetes设计预期的,下面给您详细解释下:
核心原因
当StatefulSet设置podManagementPolicy: Parallel时,控制器会同时启动或更新所有Pod,不会像默认的OrderedReady模式那样,严格按照Pod序号顺序,等待前一个Pod进入Ready状态并度过minReadySeconds后再处理下一个Pod。
而minReadySeconds在Parallel模式下的作用逻辑是:它会作为整个StatefulSet更新完成的判断条件之一——只有当所有更新后的Pod都处于Ready状态,并且每个Pod都已经维持Ready状态满minReadySeconds时长,整个StatefulSet的更新流程才会被标记为完成。但在更新过程中,控制器不会因为这个参数而暂停批量创建/更新Pod的动作,这就是您测试时觉得它“没生效”的原因。
结合您的配置示例
您提供的StatefulSet配置修正缩进后如下:
apiVersion: apps/v1 kind: StatefulSet metadata: name: web spec: selector: matchLabels: app: nginx # has to match .spec.template.metadata.labels serviceName: "nginx" replicas: 2 # by default is 1 minReadySeconds: 30 # by default is 0 podManagementPolicy: Parallel updateStrategy: type: RollingUpdate template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:latest ports: - containerPort: 80
(注:补充了template下的metadata和containers部分,否则配置不完整)
在这个配置下,执行滚动更新时,K8s会同时更新两个Pod,不会等待第一个Pod就绪并度过30秒再更新第二个;但只有当两个Pod都就绪且各自维持就绪状态满30秒后,整个StatefulSet的更新才会彻底完成。
针对K8s 1.24版本的说明
这个行为在K8s 1.24版本中是完全符合官方设计的,不存在版本兼容性问题,您观察到的现象就是该模式下的正常表现。
备注:内容来源于stack exchange,提问作者leonard520
相关产品推荐
相关产品推荐

