如何获得所有没有工作的豆荚

时间:2019-12-09 15:58:33

标签: list kubernetes filter kubectl

是否可以不做任何工作就检索所有吊舱?

kubectl get pods 
pod1                                      1/1     Running     1          28d
pod2                                      1/1     Running     1          28d
pods3                                     0/1     Completed   0          30m
pod4                                      0/1     Completed   0          30m

我不想看到工作,而只希望看到另一个窗格。
我不想基于“运行状态”来获取它们,因为我想验证我尝试安装的所有部署是否都“已部署”。
基于此,我想使用以下命令,但它也正在获取我尝试排除的作业:

kubectl wait --for=condition=Ready pods --all --timeout=600s 

3 个答案:

答案 0 :(得分:1)

在作业窗格中添加特殊标签(例如kind=pod)。然后使用kubectl get pods -l kind!=pod

答案 1 :(得分:0)

如果可以使用少量脚本,则此行将返回所有名称空间中所有“非作业”窗格的名称:

for p in `kubectl get pods --all-namespaces -o=jsonpath="{range .items[*]}{.metadata.name}{';'}{.metadata.ownerReferences[?(@.kind != 'Job')].name}{'\n'}{end}"`; do v_owner_name=$(echo $p | cut -d';' -f2); if [ ! -z "$v_owner_name" ]; then v_pod_name=$(echo $p | cut -d';' -f1); echo $v_pod_name; fi; done

以上述内容为基础,以下目的是使所有处于“ Ready”状态的“非工作”广告连播返回:

for p in `kubectl get pods --all-namespaces -o=jsonpath="{range .items[*]}{.metadata.name}{';'}{'Ready='}{.status.conditions[?(@.type == 'Ready')].status}{';'}{.metadata.ownerReferences[?(@.kind != 'Job')].name}{'\n'}{end}"`; do v_owner_name=$(echo $p | cut -d';' -f3); if [ ! -z "$v_owner_name" ]; then v_pod_name=$(echo $p | cut -d';' -f1,2); echo $v_pod_name; fi; done

This doc在某种程度上解释了kubectl中JSONPath的支持。

答案 2 :(得分:0)

如果您的问题是-

  

我想验证我尝试安装的所有部署是否都是   “已部署”

然后这不是检查Kubernetes中Pod状态的正确方法。请检查副本 readyReplicas 以进行部署。

kubectl get deployment <deployment-Name> -ojson | jq -r '.status | { desired: .replicas, ready: .readyReplicas }'

输出:-

{
  "desired": 1,
  "ready": 1
}

我在这里使用jq(非常方便)实用程序来解析内容