如何在 Kubernetes 中触发 Liveness Probe 失败

Posted

技术标签:

【中文标题】如何在 Kubernetes 中触发 Liveness Probe 失败【英文标题】:How to trigger a Liveness Probe failure in kubernetes 【发布时间】:2017-03-24 17:01:14 【问题描述】:

我的服务 deployment.yaml 中有以下活性探针

      livenessProbe:
        failureThreshold: 3
        httpGet:
          path: /health
          port: 9081
          scheme: HTTP
        initialDelaySeconds: 180
        timeoutSeconds: 10
        periodSeconds: 10
        successThreshold: 1

我想测试探针是否真的触发了 POD 重新部署,这是最容易让它失败的方法吗? 可能以编程方式。

更新:

最好澄清这个问题,我不想更改应用程序中的代码,也不想暂停正在运行的容器。 我想知道是否可以使用 kubernetes 或 docker 命令在运行时以某种方式阻止端点/端口。

【问题讨论】:

【参考方案1】:

如果您有能力更改底层应用程序代码,只需更改 /health 端点,使其返回高于 400 http 状态代码的内容。

如果没有,您将不得不以某种方式使您的应用程序失败,可能是通过使用 kubectl exec 登录到 pod 并进行影响应用程序运行状况的更改。

这完全取决于您的应用程序,kubernetes 只会按照您的指示去做。

【讨论】:

【参考方案2】:

如果您可以到达运行 pod 的主机,在容器上执行 docker pause 将暂停容器中的所有进程,这应该会使活性探测失败。

注意:我自己没有尝试过,但根据docker pausehere的文档,听起来是这样的。

【讨论】:

docker pause 命令不够好。我可以在 journalctl 中看到 Liveness probe 的失败,但是在容器没有取消暂停之前,新的 pod 不会启动。【参考方案3】:

您可以如下定义您的活性探针

livenessProbe:
  exec:
    command:
      - /bin/bash
      - '-c'
      - /liveness-probe.sh
  initialDelaySeconds: 10
  periodSeconds: 60

并在你的根路径中创建一个名为

的 sh 文件

liveness-probe.sh

包含

#!/bin/bash
#exit 0 #Does not fail and does not trigger a pod restart
exit 1 #Triggers pod restart

【讨论】:

以上是关于如何在 Kubernetes 中触发 Liveness Probe 失败的主要内容,如果未能解决你的问题,请参考以下文章

Kubernetes 通过基于时间的触发器扩展 pod

干货 | 如何评估Kubernetes持久化存储方案

Kubernetes中spinnaker使用二

Kubernetes中spinnaker使用二

Kubernetes中spinnaker使用二

Kubernetes中spinnaker的使用一