首页 > 解决方案 > 如何在 Kubernetes 中等待部署完成

问题描述

作为我们 CI 管道的一部分,我们有一个用于许多 Web 服务的部署脚本,如下所示:

kubectl apply -f deployment1.yml
kubectl apply -f deployment2.yml

问题是管道的下一阶段有时会失败,因为服务在启动时还没有准备好。

我想在脚本中添加一行,内容如下:

Wait until all deployments are in the Ready state, or fail if more than 30 seconds has elapsed.

我认为以下方法可行,但不幸的是,超时标志似乎不可用:

kubectl rollout status deployment deployment1 --timeout=30s
kubectl rollout status deployment deployment2 --timeout=30s

我不想在没有超时的情况下运行“kubectl rollout status”,因为如果其中一个部署出现故障,这将导致我们的构建挂起。

标签: kubernetes

解决方案


我找到了一个效果很好的解决方案。将属性设置为.spec.progressDeadlineSeconds诸如 30 之类的值(默认为 600 或 10 分钟),并kubectl rollout status deployment在显示错误消息并以非零退出代码退出之前等待这段时间:

$ kubectl rollout status deploy/nginx
Waiting for rollout to finish: 2 out of 3 new replicas have been updated...
error: deployment "nginx" exceeded its progress deadline

文档在这里:https ://kubernetes.io/docs/concepts/workloads/controllers/deployment/#failed-deployment


推荐阅读