我有一个在 Kubernetes 上运行的 pod,我正在为其设计一个活性探针。我的应用程序从队列中读取数据(通过一个循环不断搜索新消息并在找到时执行其他功能)并且没有通过 HTTP 公开,因此我需要一个命令活性探测。我正在考虑一个简单的实现是否可行:
livenessProbe:
exec:
command:
- cat
- /tmp/healthy
但是,我不确定cat
即使应用程序在循环中的某个点“卡住”是否会成功——文件仍然存在。这归结为对我无法在文档中找到的活性探针的基本缺乏了解 - 大概它们以某种方式与您的应用程序串联运行,因此如果您的应用程序未运行,则无法执行命令?但我对这一点没有信心。
如果该命令可以并行执行,那么我相信我将需要某种时间戳检查,在每个循环上更新一个文件,并且 liveness 探针检查它的时间戳。如果第一种方法可行,它会更简单,但任何人都可以确认是否是这种情况?谢谢。
编辑:我的应用程序代码。我在 sleep(60)s 中添加了尝试测试如果文件没有在一分钟内更新,liveness 探测是否会失败,但它们不会是正常应用程序代码的一部分。
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
- (如果从 find 返回任何内容,命令返回失败,否则 cat 文件)
livenessProbe:
exec:
command:
- find
- /var/app/loaded.txt
- -mmin
- '+0.1'
- -exec
- cat
- '/var/app/loaded.txt{}'
- ;
initialDelaySeconds: 10
periodSeconds: 10
- (如果从 find 返回任何内容,则命令返回失败,否则不返回任何内容)
livenessProbe:
exec:
command:
- find
- /var/app/loaded.txt
- -mmin
- '+0.1'
- -exec
- if[[{}]]
- ;
initialDelaySeconds: 10
periodSeconds: 10
我也用 - 而不是 + 尝试了所有这些。尽管窗口非常短(最终会更长!)和 sleep 命令,但探测永远不会失败。