Kubernetes liveness探测器是否与应用程序并行运行?

Kubernetes liveness探测器是否与应用程序并行运行?,kubernetes,health-monitoring,livenessprobe,Kubernetes,Health Monitoring,Livenessprobe,我有一个运行在Kubernetes上的吊舱,我正在为它设计一个活度探测器。我的应用程序从队列中读取(通过一个循环不断搜索新消息并执行其他函数(如果找到了)并且没有通过HTTP公开,因此我需要一个命令活性探测。我正在考虑一个简单的实现是否有效: livenessProbe: exec: command: - cat - /tmp/healthy 但是,即使应用程序在循环中的某个点被“卡住”,我也不确定cat是否会成功-文件仍然会在那里。

我有一个运行在Kubernetes上的吊舱,我正在为它设计一个活度探测器。我的应用程序从队列中读取(通过一个循环不断搜索新消息并执行其他函数(如果找到了)并且没有通过HTTP公开,因此我需要一个命令活性探测。我正在考虑一个简单的实现是否有效:

livenessProbe:
      exec:
        command:
        - cat
        - /tmp/healthy
但是,即使应用程序在循环中的某个点被“卡住”,我也不确定cat是否会成功-文件仍然会在那里。 这可以归结为我对liveness Probe缺乏基本的了解,我在文档中找不到这一点——可能它们与您的应用程序以某种方式串联运行,因此如果您的应用程序未运行,该命令将无法执行?但在这一点上我没有信心

如果该命令可以并行执行,那么我相信我将需要某种时间戳检查,在这种情况下,我在每个循环上更新一个文件,并且活动性探测器检查其时间戳。如果第一种方法有效,它会更简单,但有人能证实是否是这样吗?谢谢

编辑:我的应用程序代码。我在sleep(60)中添加了liveness probe,试图测试如果文件在一分钟内没有更新,liveness probe是否会失败,但它们不会成为普通应用程序代码的一部分

INITIALISATION CODE

with open('loaded.txt','w') as f:          # readiness probe = check this file exists
    f.write('loaded')

current_backoff = 0
    max_backoff = 10
    while True:
        if current_backoff < max_backoff:
            current_backoff +=1
        with open('loaded.txt','w') as f:
            f.write('loaded')
            sleep(60)

        messages = input_queue_client.receive_messages(visibility_timeout=100)
        for message in messages:
            with open('loaded.txt','w') as f:
                f.write('loaded')
            sleep(60)
            current_backoff = 0
 
            CODE TO PROCESS MESSAGES

        sleep(current_backoff)
  • (如果从find返回任何内容,则命令返回失败,否则对文件进行cat)
  • (如果find返回了任何内容,则命令返回failure,否则不返回任何内容)
  • 我还用-而不是+,尝试了所有这些。尽管有很短的窗口(最终会更长!)和sleep命令,探测从未失败。

    每个节点中的活动性探测都由执行。是的,它与您的应用程序并行运行


    在您的情况下,每次在循环中开始新的迭代时,都可以触摸
    /tmp/health
    文件。并在运行状况检查中使用类似于
    find/tmp/health-mmin+0.5
    的命令。如果文件超过半分钟,则此命令不返回任何内容。如果运行状况检查命令未返回任何内容,则假定检查已通过。

    感谢您的解释,这很有帮助。我已尝试使用您建议的解决方案,但我认为无论文件是否在过去0.5分钟内被修改,运行状况检查都会通过。如果命令未返回任何内容,则假定运行状况检查正在通过。如果该命令返回一个文件,它似乎也假定该文件正在传递。如果文件太旧,如何让它返回错误状态代码?我使用了:`livenessProbe:exec:command:$find-/myfile.txt--mmin-'-0.5'`还尝试了+0.5@Lucy这很奇怪,如果命令返回某些内容,健康检查不应该通过。您是否只创建了一次文件,之后就不碰它了?@Lucy您是否可以展示一些应用程序的最小示例,以便我可以尝试在本地重现您的问题?谢谢,我今天早上通过使用指定的条件退出代码构建一个单独的bash脚本解决了这个问题,然后将其作为liveness probe命令运行。谢谢你的帮助!
            livenessProbe:
              exec:
                command:
                  - find
                  - /var/app/loaded.txt
                  - -mmin 
                  - '+0.1'
              initialDelaySeconds: 10
              periodSeconds: 10
    
            livenessProbe:
              exec:
                command:
                  - find
                  - /var/app/loaded.txt
                  - -mmin 
                  - '+0.1'
                  - -exec
                  - cat
                  - '/var/app/loaded.txt{}'
                  -  ;
              initialDelaySeconds: 10
              periodSeconds: 10
    
            livenessProbe:
              exec:
                command:
                  - find
                  - /var/app/loaded.txt
                  - -mmin 
                  - '+0.1'
                  - -exec
                  - if[[{}]]
                  - ;
              initialDelaySeconds: 10
              periodSeconds: 10