0

问题:编写查询以检查所有 Kubernetes 节点以确保 coredns 正在运行,如果没有 - 它是否已经超过 30 分钟?- 如果是,发送警报。

警报部分将是我最初的问题的次要部分,不必在此线程上解决。我只想弄清楚如何首先获得这些信息。

本质上:嘿节点,你有一个名为 coredns.* 的 pod 正在运行吗?如果不是,距离你这样做已经超过 30m 了吗?



我的策略:我假设搜索没有 coredns.* pod 名称的节点是我开始的方式。

FROM K8sPodSample SELECT nodeName WHERE podName != 'coredns.*'

然后,将时间范围设置为从 31 分钟前开始。(不确定这是否显示 31 分钟内没有 pod 的节点,或者是否显示 31 分钟前没有它的所有 pod 即使只有几分钟)

SINCE 31 minute ago

这是一个集群级别的查询,所以我也会添加它。

WHERE clusterName = '<clusterName>' 

然后,如果这工作正常,我将为出现在此列表中的任何节点生成警报。


我是否正确地考虑了这一点,或者可以以更好的方式实现这一点?



更新:我的新策略是返回一个 nodeName ,其中名称中包含 coredns 的 pod 数量为 0 ...仍在解决这部分问题。

4

1 回答 1

0

这个技巧是寻找名称中带有 coredns 并且没有运行状态的 pod,按(分面)nodeName 和命名空间进行分组。

SELECT uniqueCount(podName) FROM K8sPodSample WHERE namespace NOT LIKE '%kube-system%' AND namespace NOT LIKE %<ourNS>% AND podName LIKE '%coredns%' AND status != 'Running' FACET nodeName, namespace

我可以看到由此引起的唯一问题是,是否根本没有具有该名称的 pod。它不考虑这种情况。它假设如果 pod 没有处于工作状态,它仍然具有某种状态。

鉴于 Kubernetes 的性质,我认为这是公平的,因为如果 Pod 是副本集/守护程序集等的一部分,它总是会尝试重新启动 Pod。因此它总是会有一个状态。

注意:排除 kube-system 和 'ourNS' 仅包含在此查询中,因为在我们的特定场景中,不需要这些。我们只关注客户 NS。

于 2022-01-27T21:58:38.117 回答