如何在 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 pause
here的文档,听起来是这样的。
【讨论】:
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 失败的主要内容,如果未能解决你的问题,请参考以下文章