查看低于 5 天的错误 pod

问题描述

我需要在所有列中列出 5 天以下的错误 pod。我试过下面的命令,但没有运气。我得到了一些随机的豆荚和年龄。有人可以帮助只获取 5 天以下的错误 pod。

kubectl get pod --all-namespaces --sort-by=.Metadata.creationTimestamp | awk 'match($5,/[1-5]+d/) {print $0}' | grep "Error"


NAME               READY   STATUS      RESTARTS   AGE
pod1                0/1     Error       0          63d
pod2                0/1     Error       0          24d
pod3                0/1     Error       0          11d
pod4                0/1     Error       0          4d16h
pod5                0/1     Error       0          15h

解决方法

在回答您的问题时,我想指出4 件不同的事情

首先,你的例子中正则表达式的使用是不正确的。以下正则表达式:

[1-5]+d

不仅会匹配 1d2d3d4d5d,而且还会匹配 63d24d。为什么 ?首先,因为您使用了 + quantifier,它重复上一项或多次。所以如果您有这样的 345d,它甚至会匹配 Pods在您的 k8s 集群中运行。其次,您没有指定它应该从 1 到 5 之间的数字开始,它只是说它应该出现在匹配字符串中的某个地方(例如最后),因此 [1-5]d 也将匹配 {{1 }} 因为它将能够在其中找到 63d。这个正则表达式的正确形式如下:

3d

这里我们指定它应该只匹配以 1 到 5 范围内的一位数字开头,后跟 ^[1-5]d 字符的字符串。

因此您的命令的 d 部分可能如下所示:

awk

第二,注意跑的时候:

awk 'match($5,/^[1-5]d/) {print $0}' 带有 kubectl get pod 标志,输出包含 6 列,而不是 5 列,正如 Krishna Chaurasia 在评论中已经提到的那样。添加了带有 --all-namespaces 标题的附加列。比较以下 2 个结果:

NAMESPACE

$ kubectl get pods
NAME                                READY   STATUS             RESTARTS   AGE
my-release-mysql-0                  1/1     Running            0          12d

$ kubectl get pods --all-namespaces NAMESPACE NAME READY STATUS RESTARTS AGE default my-release-mysql-0 1/1 Running 0 12d 成为第 6 列,因此您的命令(或特别是它的 AGE 部分)应该在列 awk 上执行匹配:

$6

第三,对于你的命令的最后一部分,即:

awk 'match($6,/^[1-5]d/) {print $0}'

这样的过滤可以通过基于 grep "Error" kubectl 完成,例如:

--field-selector

第四,应该注意的是,在您的示例中,您过滤掉了所有 kubectl get pods --field-selector=status.phase=Pending --sort-by=.metadata.creationTimestamp | awk 'match($5,/^[1-5]d/) {print $0}' ,其中 Pods 以其他单位(如 AGE)计算, hoursminutes。如果是有意的,请忽略下一段。

但是,如果您不想过滤掉所有较新的 seconds,其中 Pods 不能计入 AGE,您可以修改您的命令,使其显示 days Pods1-5 days 前创建的:

any number of seconds/minutes/hours

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...