如何正确使用 kubectl 来查明是否所有具有特定标签的部署都已完成?

How do I use kubectl properly to find out if all deployments with specific label completed?

我需要查明是否所有具有 label=a 的部署都处于 READY 状态?示例如下。我需要 return true 或 false 基于所有部署是否准备就绪?我可以解析文本,但我认为只有 kubectl 和 json 路径或其他东西

可能会有更聪明的方法
PS C:\Users\artis> kubectl get deployment -n prod -l role=b
NAME           READY   UP-TO-DATE   AVAILABLE   AGE
apollo-api-b   0/3     3            0           107s
esb-api-b      0/3     3            0           11m
frontend-b     3/3     3            3           11m

添加 -o yaml 以查看每个对象的 YAML 对象,然后您可以使用这些对象构建 -o jsonpath,例如 -o jsonpath='{range .items[*]}{.status.conditions[?(@.type == "Available")].status}{"\n"}{end}'。你不能在 JSONPath 中进行逻辑操作,所以你需要像 | grep False 之类的外部过滤。

kubectl get deploy -l foo=bar -o json 
| jq -r '[.items[]|select(.status.readyReplicas!=.status.replicas)]|length'

if != 0 那么有些东西还没有准备好 你也可以这样做。 readyReplicas > 0 如果一个就足以满足您的需求,无论有多少个都应该准备好处于所需状态