从 kubectl 输出显示失败的 pod

Bad*_*der 2 grep kubernetes

我想编写一个包装器kubectl来仅显示失败的 pod,这意味着它应该只显示 Ready 列值不相同的项目(即0/1, 0/2, 1/2, 2/3,等)

$ kubectl get pods --all-namespaces
NAMESPACE       NAME                                        READY     STATUS             RESTARTS   AGE
default         pod-with-sidecar                            1/2       ErrImagePull       0          39s
kube-system     calico-node-chcqq                           2/2       Running            2          7d
kube-system     calico-policy-controller-6449789dd6-z5t5j   1/1       Running            0          7d
kube-system     etcd                                        1/1       Running            0          7d
kube-system     kube-apiserver                              1/1       Running            2          7d
kube-system     kube-controller-manager                     1/1       Running            0          7d
kube-system     kube-dns-5c76d6bddb-8zhmq                   3/3       Running            1          7d
kube-system     kube-proxy-xq8j6                            1/1       Running            0          7d
kube-system     kube-scheduler-                             1/1       Running            0          7d
kube-system     tiller-deploy-5b7cb9cfd7-j725s              1/1       Running            0          7d
my-system       glusterfs-brick-0                           0/2       Pending            0          3m
my-system       sticky-scheduler-6d968f8d74-xvjqn           0/1       ImagePullBackOff   0          4m
Run Code Online (Sandbox Code Playgroud)

所以从上面的输出我想打印这些失败的豆荚

NAMESPACE       NAME                                        READY     STATUS             RESTARTS   AGE
default         pod-with-sidecar                            1/2       ErrImagePull       0          4m
my-system       glusterfs-brick-0                           0/2       Pending            0          56s
my-system       sticky-scheduler-6d968f8d74-xvjqn           0/1       ImagePullBackOff   0          8m
Run Code Online (Sandbox Code Playgroud)

这有效!

$ kubectl get pods --all-namespaces | grep -vE '1/1|2/2|3/3'

NAMESPACE       NAME                                        READY     STATUS             RESTARTS   AGE
default         pod-with-sidecar                            1/2       ErrImagePull       0          4m
my-system       glusterfs-brick-0                           0/2       Pending            0          56s
my-system       sticky-scheduler-6d968f8d74-xvjqn           0/1       ImagePullBackOff   0          8m
Run Code Online (Sandbox Code Playgroud)

但是,如果我2/4,0/4,0/5,0/6Ready列中有等等,grep -vE '1/1|2/2|3/3'它将不起作用,我该怎么做才能使其适用于所有此类情况

参考:https : //github.com/kubernetes/kubernetes/issues/49387

MWZ*_*MWZ 10

您可以使用以下方法来做到这一点--field-selector

kubectl get pods --all-namespaces --field-selector=status.phase!=Running
Run Code Online (Sandbox Code Playgroud)

来源

  • 如果您有“CrashLoopBackOff”,则不会显示 pod (5认同)
  • @Flowkap您可以使用`,`来分隔字段选择器值,例如:`kubectl get pods --field-selector=status.phase!=Running,status.phase!=Succeeded --all-namespaces` (3认同)

Cyr*_*rus 6

使用 GNU grep:

 | grep -Ev '([0-9]+)/\1'
Run Code Online (Sandbox Code Playgroud)

输出:

NAMESPACE NAME READY STATUS RESTARTS 年龄
默认 pod-with-sidecar 1/2 ErrImagePull 0 39s
我的系统 glusterfs-brick-0 0/2 待定 0 3m
我的系统粘性调度程序 6d968f8d74-xvjqn 0/1 ImagePullBackOff 0 4m