这就是我所做的:
CrashLoopBackOff
的失败 pod:kubectl apply -f error.yaml
echo a
=> echo b
) 并重新部署有状态集:kubectl apply -f error.yaml
请求 Pod 状态:
$ kubectl get pod errordemo-0
NAME READY STATUS RESTARTS AGE
errordemo-0 0/1 CrashLoopBackOff 15 59m
error.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: errordemo
labels:
app.kubernetes.io/name: errordemo
spec:
serviceName: errordemo
replicas: 1
selector:
matchLabels:
app.kubernetes.io/name: errordemo
template:
metadata:
labels:
app.kubernetes.io/name: errordemo
spec:
containers:
- name: demox
image: busybox:1.28.2
command: ['sh', '-c', 'echo a; sleep 5; exit 1']
terminationGracePeriodSeconds: 1
问题
即使 pod 处于错误状态,我如何实现立即重新部署?
我找到了这些解决方案,但我想要一个单一的命令来实现它(在现实生活中我正在使用 helm,我只想为我的部署调用 helm upgrade
):
为什么 kubernetes 不立即重新部署 pod?
echo a; sleep 10000;
)将立即重新启动。这就是我设置 terminationGracePeriodSeconds: 1
答案 0 :(得分:1)
您可以设置spec.podManagementPolicy: "Parallel"
Parallel pod management 告诉 StatefulSet 控制器并行启动或终止所有 Pod,而不是在启动或终止另一个 Pod 之前等待 Pod 变为 Running 和 Ready 或完全终止。
请记住,默认的 podManagementPolicy 是 OrderedReady
OrderedReady pod management 是 StatefulSet 的默认值。它告诉 StatefulSet 控制器遵守上面演示的排序保证
如果您的应用程序需要有序更新,那么您无能为力。