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
- (如果从查找中 return 编辑了任何内容,则命令 return 失败,否则 cat 文件)
livenessProbe:
exec:
command:
- find
- /var/app/loaded.txt
- -mmin
- '+0.1'
- -exec
- cat
- '/var/app/loaded.txt{}'
- ;
initialDelaySeconds: 10
periodSeconds: 10
- (如果从查找中 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 则假定检查通过。
我在 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
- (如果从查找中 return 编辑了任何内容,则命令 return 失败,否则 cat 文件)
livenessProbe:
exec:
command:
- find
- /var/app/loaded.txt
- -mmin
- '+0.1'
- -exec
- cat
- '/var/app/loaded.txt{}'
- ;
initialDelaySeconds: 10
periodSeconds: 10
- (如果从查找中 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 则假定检查通过。