发生了什么?
- 创建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
- 等待第二个pod变为就绪状态,但不可用(当pod失去可用性时也可能发生)
- 将有状态集缩放到1个副本
kubectl scale statefulset nginx-roll --replicas=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
1条答案
按热度按时间hc2pp10m1#