ProgressDeadlineSeconds 未正确超时

red*_*888 4 kubernetes kubectl

我将 ProgressDeadlineSeconds 设置为 120 秒

我部署并运行kubectl rollout status deployment mydeployment

部署失败,并显示0 of 1 updated replicas available - CrashLoopBackOff

但 kubectl 仍然永远挂着消息:Waiting for deployment "mydeployment" rollout to finish: 0 of 1 updated replicas are available...

为什么会发生这种情况,progressDeadlineSeconds 应该强制它失败并导致kubectl rollout status deployment以非零返回代码退出,对吗?

OhH*_*ark 8

您是对的,kubectl rollout status如果部署超出了进度截止日期,则返回非零退出代码。进度截止时间秒

.spec.progressDeadlineSeconds是一个可选字段,指定在系统报告部署进度失败之前您希望等待部署进度的秒数 - 作为带有Type=Progressing, 的条件出现Status=False。以及Reason=ProgressDeadlineExceeded资源的状态。部署控制器将不断重试部署。默认为 600。将来一旦实现自动回滚,Deployment 控制器一旦观察到这种情况就会回滚 Deployment。

如果指定,该字段需要大于 .spec.minReadySeconds

这就引出了最小就绪秒数

.spec.minReadySeconds是一个可选字段,指定新创建的 Pod 在没有任何容器崩溃的情况下应准备就绪的最小秒数,以便将其视为可用。默认为 0(Pod 一旦准备好就被视为可用)。

如果没有确切的部署配置,很难判断问题出在哪里,但有几件事需要检查:

  • 尝试同时设置progressDeadlineSecondsminReadySeconds记住后者必须具有较小的值。

  • progressDeadlineSeconds与 一起使用时可能不会受到尊重Replicas: 1。检查您的maxUnavailable参数以查看它是否允许部署完全不可用。

  • 作为解决方法,您可以为命令指定超时期限kubectl rollout status。例如:kubectl rollout status deployment mydeployment --timeout=120s

  • 如果您不想等待推出完成,则可以使用--watch=false. 您将必须通过运行命令来手动检查状态kubectl describe deploymentkubectl get deployment这可能并不理想。

如果有帮助,请告诉我。