考虑一个由N个节点组成的Linux集群。它需要运行 M 个任务。每个任务都可以在任何节点上运行。假设群集已启动并正常工作。
问:监视 M 个任务正在运行的最简单方法是什么,如果任务异常退出(退出代码 != 0(,请在任何 up 计算机上启动新任务。忽略网络分区。
其中两个 M 个任务具有依赖关系,因此如果任务 'm' 出现故障,则应停止任务 'm1'。然后启动"m",当启动时,"m1"可以重新启动。"m1"取决于"m"。我可以为此提供一个业务流程脚本。
我最终想使用可以自我修复的 Kubernetes,但我还没有。
正确的 (tm( 方法是设置重试,可能使用一些退避策略。在StackOverflow上有很多类似的问题,如何做到这一点 - 这是其中之一。
如果您仍希望执行监视和显式任务重新启动,则可以根据将为您执行的任务事件实现服务。它非常简单,证明了芹菜是多么出色。该服务应处理任务失败事件。如何做到这一点的示例在同一页面上。
如果您只需要为每个计算任务运行一个初始化任务,则可以将Job
概念与 init 容器一起使用。作业是只运行一次直到完成的任务,如果它崩溃,Kubernetes 将重新启动它。Init 容器在实际的 Pod 容器启动之前运行,并用于初始化任务:https://kubernetes.io/docs/concepts/workloads/pods/init-containers/