由于模板中的 Consul KV 解析失败,Nomad 作业陷入挂起状态

问题描述

Nomad v1.0.4,Consul v1.7.3

我们有一个包含多个任务组的 Nomad 工作规范。每个任务组都有一个任务。每个任务都有相同的模板节,引用几个 Consul KV 路径,如下所示:

{{ if keyExists "services/MysqL/database" }}
  MysqL_DB = "{{ key "services/MysqL/database" }}"
{{ end }}

Nomad 作业规范以 JSON 格式以编程方式生成,并通过 POST /jobs 提交给 Nomad 集群。此作业中的所有任务都被限制在同一台主机上运行。

我们看到部分(并非全部)任务陷入pending状态并出现分配错误,例如:

[1] Template Failed: kv.block(services/MysqL/database): Get "http://127.0.0.1:8500/v1/kv/services/MysqL/database?index=1328&stale=&wait=60000ms": EOF

[2] Missing: kv.block(services/MysqL/database)

请注意,分配错误消息中指示的特定 Consul KV 路径是不确定的。如上所述,每个作业都使用相同的模板节,并且模板节本身引用了几个 Consul KV 路径。对于每个失败的分配,分配错误中指示的 Consul KV 路径可能不同。

我们已经验证了 Consul 集群是活动的,并且模板节中引用的所有 KV 路径都存在。

理论上,如果 Consul HTTP 请求错误或 Consul KV 路径不存在,则所有任务都应该遇到相同的命运(例如失败)。如前所述,只有部分任务失败,而其他任务成功进入 running 状态。由此,我们知道模板节本身是有效的,因为至少有一些作业能够成功运行。

我们通过 cURL 直接运行来验证 Consul HTTP 请求是否有效。

有趣的是,一些失败的任务在未来重新安排时会随着时间的推移自动恢复。然而,其他人只是永远保持 pending 状态。

非常感谢您对此行为的任何见解或可能的探索解决方案。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...