我们正在尝试构建一些简单的自动化功能,以检测部署是否已完成滚动更新,或者滚动更新是否失败。最简单的方法(我们现在所做的)是简单地获得所有的pod进行部署,然后等待它们准备好。我们查看所有的pod,如果其中一个pod重新启动了3次或更多次(自从我们开始更新以来),我们将回滚更新。这在大多数情况下都很好用。有时,当部署的当前版本由于任何原因处于失败状态时,* 现有的 * pod会不断重新启动,从而触发我们的回滚。
因此,我的想法是在我启动滚动更新后,监视正在推出的新复制集中的pod。这样,我们就不会将以前版本中的故障pod检测为滚动更新失败。我已经知道了如何在复制集中找到豆荚(PS:我使用powershell作为我的shell,但希望翻译成bash或任何你喜欢的是相当直接的):
kubectl get pod -n <namespace> -l <selector> -o json | ConvertFrom-Json | Where {$_.metadata.ownerReferences.name -eq <replicaset-name>}
字符串
我可以使用相同的方法轻松地找到属于部署的副本集,只需查询副本集并再次过滤它们的ownerReference。
但是,在滚动更新期间,部署至少有两个副本集:新的,旧的。如果我使用“kubectl describe deployment”,我可以看到它们的名称--但如果不进行一些文本处理,这对自动化不是很友好。这似乎是一个脆弱的方式来做到这一点。如果能在json中找到同样的信息该有多好,但似乎并不存在。
所以,我的问题是:如何找到部署与当前/旧副本集之间的连接(最好采用JSON格式)?是否有其他资源“连接”这两个副本集,或者是否有关于副本集本身的信息可以用来区分新的和旧的副本集?
3条答案
按热度按时间xdnvmnnf1#
部署将使用
deployment.kubernetes.io/revision
注解指示副本集的当前“修订版”。字符串
这将同时存在于部署和复制集上。具有修订版本N-1的副本集将是“旧”副本集。
c8ib6hqw2#
kubectl源码中使用的方式是:
字符串
这意味着:
1.选择部署创建的所有replicaSet;
1.按creationTimestamp排序;
1.选择最近的一个,它是当前新的复制集;
4nkexdtk3#
当前副本集:
字符串
以前的复制集:
型