0

如官方文档中所述,我有一个文件,/tmp/healthy并且 YAML 可用

livenessProbe:
  exec:
    command:
    - cat
    - /tmp/healthy

但在我的情况下,文件总是在这里,它将包含成功或失败之类的消息

有可能livenessProbe:command对这些消息采取行动吗?

4

2 回答 2

2

是的,您可以使用该grep命令搜索Success字符串,如果找到它将返回0(通过探测),但是如果Success找不到字符串,grep它将返回non-zerorc(探测失败)

livenessProbe:
  exec:
    command:
    - grep
    - Success 
    - /tmp/healthy

根据文档

如果命令成功,则返回 0,并且 kubelet 认为容器处于活动状态且健康。如果命令返回一个非零值,kubelet 会杀死容器并重新启动它。

这意味着,exec类型取决于命令的返回码。只要grep返回成功,探测就会通过。在 shell 中,任何命令的返回码都可以通过$?变量手动检查。例如:

grep Success /tmp/healthy; echo $?
于 2021-07-19T16:49:43.513 回答
2

活性探测的目的通常只是检查 pod 是否已启动且可访问。cat是用于活性探测的不错的命令,因为只要文件在那里,它总是返回成功。它只是检查 Kubelet 是否可以到达 pod。

如果我理解你的意思,那么活性探测的结果可能取决于文件的内容。您可以执行任何 bash 并使用 1 或 0(失败或成功)退出以控制您想要的结果。

例如,如果您的文件包含任何失败消息,您希望 liveness 探测失败:

    livenessProbe:
      exec:
        command:
        - /bin/bash
        - '-c'
        - grep -zqv "Failure" file.txt 
于 2021-07-19T17:02:17.983 回答