【问题标题】:what's the simplest way of monitoring whether a pod is running in k8s cluster监控 pod 是否在 k8s 集群中运行的最简单方法是什么
【发布时间】:2021-08-26 01:08:28
【问题描述】:

我的场景是这样的:

  • 我有一个 k8s 集群正在运行
  • 在这个 k8s 集群中,我定义了一个 statefullset,在 statefullset 中我有一个 pod 正在运行,比如podName-0

我想要实现的是,每当podName-0 未处于运行状态时,向某人发送电子邮件,然后有人会解决此问题。

我尝试使用 Prometheus 来制作它,但它看起来有点重(例如ClusterRole/ClusterRoleBinding/etc)

有没有什么简单的方法可以做到这一点? 谢谢!

【问题讨论】:

    标签: kubernetes monitoring


    【解决方案1】:

    您的问题是基于意见的,无法明确回答。我将尝试为您概述一些解决问题的方法,但我不能说哪个会“更容易”。一切都有其优点和缺点。但切中要害。先看this question

    Coderanger 写道:

    对此有些复杂的标准答案是 Kubernetes -> kube-state-metrics -> Prometheus -> alertmanager -> webhook。对于一项简单的任务来说,这听起来可能很多,但 Prometheus 及其相关工具在指标和警报方面的使用更为广泛。如果您想要一个更狭窄的答案,您可以查看 Brigade 吗?但可能只是使用 kube-prometheus(它是一个带有一堆相关组件的 Prom,都为你设置好了)。

    这很好地解释了为什么您可以使用 Prometheus 以及与之相关的其他优势。

    走得更远。 Patrick W 提到:

    您可以将 preStop hook 添加到您的 pod 规范中。该钩子可以在 pod 关闭之前运行脚本或进行 HTTP 调用。您可以配置挂钩以调用触发通知的 API。

    在这个问题的第二个答案中提出了类似的解决方案。如果您决定使用 preStop 挂钩,还请阅读 this doc

    另一种方法是使用外部工具,例如Atomist。在博客上,您可以找到关于 Kubernetes Health Alerts 的 article

    另见:

    【讨论】:

      【解决方案2】:

      要检测您的 podName-0 从正在运行变为意外终止,您可以使用 prestop hook 进行标注。如果需要超过 30 秒(默认),可以将terminationGracePeriodSeconds 设置为更长的时间。

      ...
      spec:
        ...
        template:
        ...
          spec:
            containers:
            - name: busybox
              ...
              lifecycle:
                preStop:
                  exec:
                    command: ["<callout>"]
            ...
            terminationGracePeriodSeconds: 60
      

      这可能是最简单的。既然提到了Prometheus,你可以签出Alert Manager rules进行全面的检查和触发。除了标准的 Prometheus 安装要求之外,此方法不需要任何特殊的 RBAC。

      【讨论】:

      • 如果 pod 所在的节点发生故障,或者节点突然耗尽内存并且底层 Linux 内核杀死了您的 pod,我认为这种方法将不起作用。
      猜你喜欢
      • 1970-01-01
      • 2020-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-13
      • 2017-03-31
      相关资源
      最近更新 更多