kubernetes kubectl -以json格式检索部署的当前/“新”复制集

zy1mlcev  于 12个月前  发布在  Kubernetes
关注(0)|答案(3)|浏览(72)

我们正在尝试构建一些简单的自动化功能,以检测部署是否已完成滚动更新,或者滚动更新是否失败。最简单的方法(我们现在所做的)是简单地获得所有的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格式)?是否有其他资源“连接”这两个副本集,或者是否有关于副本集本身的信息可以用来区分新的和旧的副本集?

xdnvmnnf

xdnvmnnf1#

部署将使用deployment.kubernetes.io/revision注解指示副本集的当前“修订版”。

metadata:
  annotations:
    deployment.kubernetes.io/revision: "4"

字符串
这将同时存在于部署和复制集上。具有修订版本N-1的副本集将是“旧”副本集。

c8ib6hqw

c8ib6hqw2#

kubectl源码中使用的方式是:

sort.Sort(replicaSetsByCreationTimestamp(rsList))

字符串
这意味着:
1.选择部署创建的所有replicaSet;
1.按creationTimestamp排序;
1.选择最近的一个,它是当前新的复制集;

4nkexdtk

4nkexdtk3#

当前副本集:

kubectl describe deploy <deployment-name> | grep "NewReplicaSet:"

字符串
以前的复制集:

kubectl describe deploy <deployment-name> | grep "OldReplicaSets:"

相关问题