Kubernetes 活性探测 运行 是否与您的应用程序并行?

Do Kubernetes liveness probes run in parallel with your application?

我在 Kubernetes 上有一个 pod 运行ning,我正在为其设计一个活性探测器。我的应用程序从队列中读取(通过一个不断搜索新消息并在找到新消息时执行其他功能的循环)并且不通过 HTTP 公开,因此我需要一个命令 liveness 探测器。我在考虑一个简单的实现是否可行:

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

但是,我不确定 cat 是否会成功,即使应用程序在循环中的某个时刻是 'stuck' - 文件仍然存在。 这归结为对我无法在文档中找到的 liveness probes 的基本缺乏理解 - 大概它们 运行 以某种方式与您的应用程序串联,所以如果您的应用程序不是 运行ning,命令不能执行?但是我对这一点没有信心。

如果该命令可以并行执行,那么我相信我将需要某种时间戳检查,我会在每个循环中更新文件,而活动探测器会检查其时间戳。如果第一种方法有效,它会更简单,但任何人都可以确认是否是这种情况?谢谢。

编辑:我的应用程序代码。我添加了 sleep(60)s 来尝试测试如果文件在一分钟内没有更新,活动探测是否会失败,但它们不会成为正常应用程序代码的一部分。

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)

我的活性探测尝试次数:

1.

        livenessProbe:
          exec:
            command:
              - find
              - /var/app/loaded.txt
              - -mmin 
              - '+0.1'
          initialDelaySeconds: 10
          periodSeconds: 10
  1. (如果从查找中 return 编辑了任何内容,则命令 return 失败,否则 cat 文件)
        livenessProbe:
          exec:
            command:
              - find
              - /var/app/loaded.txt
              - -mmin 
              - '+0.1'
              - -exec
              - cat
              - '/var/app/loaded.txt{}'
              -  ;
          initialDelaySeconds: 10
          periodSeconds: 10
  1. (如果从查找中 return 编辑了任何内容,则命令 return 失败,否则 return 什么都没有)
        livenessProbe:
          exec:
            command:
              - find
              - /var/app/loaded.txt
              - -mmin 
              - '+0.1'
              - -exec
              - if[[{}]]
              - ;
          initialDelaySeconds: 10
          periodSeconds: 10

我也用 - 而不是 + 尝试了所有这些。尽管 window(最终会更长!)和睡眠命令,探测永远不会失败。

每个节点中 kubelet 完成的活性探测。是的,它与您的应用程序并行运行。

在您的情况下,您可以在每次循环开始新迭代时触摸 /tmp/healthy 文件。并在健康检查中使用像 find /tmp/health -mmin +0.5 这样的命令。如果文件早于半分钟,此命令 returns 没有任何内容。如果运行状况检查命令 returns nothing 则假定检查通过。