查看错误 pods,低于 5 天

view error pods below which is below 5 days

我需要在所有列中列出 5 天以下的错误 pods。我试过下面的命令,但没有运气。我得到一些随机 pods 和年龄。有人可以帮忙找出不到 5 天的错误 pods。

kubectl get pod --all-namespaces --sort-by=.metadata.creationTimestamp | awk 'match(,/[1-5]+d/) {print [=11=]}' | 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 运行ning 在你的 k8s 集群中。其次,你没有指定它应该从 1 到 5 之间的数字开始,它只是说它应该出现在匹配字符串的某个地方(例如最后),所以 [1-5]d 也会匹配 63d 因为它将能够在其中找到 3d。此正则表达式的正确形式如下所示:

^[1-5]d

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

因此 awk 部分命令可能如下所示:

awk 'match(,/^[1-5]d/) {print [=12=]}'

第二个,注意当你运行:

kubectl get pod 带有 --all-namespaces 标志,输出包含 6 列,而不是 5 列,正如 Krishna Chaurasia 在评论中提到的那样。添加了带有 NAMESPACE header 的附加列。比较以下 2 个结果:

$ 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

AGE 成为第 6 列,因此您的命令(或特别是它的 awk 部分)应该在 </code>:</p> 列上执行匹配 <pre><code>awk 'match(,/^[1-5]d/) {print [=15=]}'

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

grep "Error"

这样的过滤可以通过kubectl基于--field-selector完成,例如:

kubectl get pods --field-selector=status.phase=Pending --sort-by=.metadata.creationTimestamp | awk 'match(,/^[1-5]d/) {print [=17=]}'

第四,应该注意的是,在你的例子中,你过滤掉了所有Pods,其中AGE被计算在其他单位,如hoursminutesseconds。如果是故意的,请忽略下一段。

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

kubectl get pods --sort-by=.metadata.creationTimestamp | awk 'match(,/^[1-5]d|[1-9]+h|[1-9]+m|[1-9]+s/) {print [=18=]}'