【发布时间】:2021-02-23 08:58:18
【问题描述】:
我有一个在 Kubernetes 上运行的 pod,我正在为其设计一个活性探针。我的应用程序从队列中读取数据(通过循环不断搜索新消息并在找到时执行其他功能)并且不通过 HTTP 公开,因此我需要一个命令活跃度探测。我正在考虑一个简单的实现是否可行:
livenessProbe:
exec:
command:
- cat
- /tmp/healthy
但是,我不确定 cat 是否会成功,即使应用程序在循环中的某个点“卡住” - 文件仍然存在。
这归结为对我无法在文档中找到的活性探针的基本缺乏了解 - 大概它们以某种方式与您的应用程序串联运行,因此如果您的应用程序未运行,则无法执行命令?但我对这一点没有信心。
如果命令可以并行执行,那么我相信我将需要某种时间戳检查,在每个循环中更新一个文件,并且 liveness 探针检查其时间戳。如果第一种方法可行,它会更简单,但任何人都可以确认是否是这种情况?谢谢。
编辑:我的应用代码。我添加了 sleep(60)s 来尝试测试如果文件在一分钟内没有更新,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)
我的活跃度探测尝试:
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 命令,但探测从未失败。
【问题讨论】:
标签: kubernetes health-monitoring livenessprobe