在所有pod都滚动到新代码之前,是否有任何kubectl命令要轮询?

时间:2019-06-21 22:48:23

标签: kubernetes

我正在构建部署管道。我需要一个“ kubectl”命令,该命令将告诉我所有窗格都已完成部署,然后可以部署到下一个阶段。

1 个答案:

答案 0 :(得分:2)

Deployment documentation建议使用kubectl rollout status,如果部署未完成,则其中的内容将返回非零退出代码。 kubectl get deployment将打印出类似的信息(预期有多少副本,可用副本和最新副本),您可以添加-w选项进行观看。

为此,您还可以考虑使用Kubernetes APIs之一。您可以“获取”或“监视”部署对象,并获取与Deployment object的结构相匹配的内容。使用它,您可以再次监视副本数或嵌入的条件列表,并确定副本是否就绪。如果您使用的是“ watch” API,那么当对象状态更改时,您将继续获得更新。

这里的一个技巧是检测失败的部署。假设您要部署依赖于数据库的pod;通常的做法是使用您希望数据库具有的主机名来配置Pod,如果该主机名尚不存在,则会崩溃(并重新启动)。发生这种情况时,您可以短暂进入CrashLoopBackOff状态。当然,如果您的应用程序或部署完全错误,那么您也将进入CrashLoopBackOff状态,并且部署将停止进行。没有一个简单的方法可以将这两种情况区分开来。考虑绝对超时。