Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当一个辅助pod成功时,完成并行Kubernetes作业_Kubernetes_Kubernetes Jobs - Fatal编程技术网

当一个辅助pod成功时,完成并行Kubernetes作业

当一个辅助pod成功时,完成并行Kubernetes作业,kubernetes,kubernetes-jobs,Kubernetes,Kubernetes Jobs,我有一个简单的容器化python脚本,我正在尝试与Kubernetes并行。此脚本猜测散列,直到找到低于某个阈值的散列值 我只对第一个这样的值感兴趣,因此我希望创建一个Kubernetes作业,该作业生成nworker pod,并在oneworker pod找到合适的值后尽快完成 默认情况下,Kubernetes作业在标记作业为已完成之前,将等待所有工作区完成。到目前为止,我还无法找到解决这个问题的方法(在中没有提到这个工作模式),并且一直依赖于通过bash脚本检查裸吊舱的日志来确定是否已经完成

我有一个简单的容器化python脚本,我正在尝试与Kubernetes并行。此脚本猜测散列,直到找到低于某个阈值的散列值

我只对第一个这样的值感兴趣,因此我希望创建一个Kubernetes作业,该作业生成
n
worker pod,并在oneworker pod找到合适的值后尽快完成

默认情况下,Kubernetes作业在标记作业为已完成之前,将等待所有工作区完成。到目前为止,我还无法找到解决这个问题的方法(在中没有提到这个工作模式),并且一直依赖于通过bash脚本检查裸吊舱的日志来确定是否已经完成

有没有一个本地的方法来实现这一点?如果没有,最好的方法是什么?

您好,请查看此链接

我从未尝试过,但似乎可以启动几个吊舱,并在x吊舱完成后配置作业结束。在您的情况下,x是1。

您好,请查看此链接


我从未尝试过,但似乎可以启动几个吊舱,并在x吊舱完成后配置作业结束。在您的情况下,x是1。

我们可以为并行作业定义两个规范:

1.具有固定完成计数的并行作业:

  • 为.spec.completions指定非零正值
  • 作业代表整个任务,并且在有任务时完成 范围1到1的每个值都有一个成功的Pod
    .spec.completions
  • 尚未实现:每个Pod在 范围1至规格完成
2.带有工作队列的并行作业:

  • 不指定.spec.completions,默认为
    .spec.parallelism

  • 吊舱必须相互协调,或由外部服务提供 确定每个人应该做什么

例如,一个Pod可以从工作队列中获取一批多达N个项目。 每个Pod都能够独立地确定是否完成了所有对等点,从而完成整个工作

  • 当作业中的任何Pod成功终止时,不会生成新的Pod 创造
  • 一旦至少有一个Pod成功终止并且所有Pod都被删除 终止,则作业成功完成
  • 一旦任何一个吊舱成功退出,其他吊舱就不应该再退出了 为此任务执行任何工作或编写任何输出。他们都应该 正在退出
对于固定完成计数作业,应将.spec.completions设置为所需的完成数。您可以设置.spec.parallelism,也可以不设置它,默认为1

对于工作队列作业,必须将
.spec.completions
保持未设置状态,并将
设置.spec.parallelism
为非负整数

有关如何使用不同类型作业的更多信息,请参阅一节

您还可以查看启动控制器吊舱的单个作业: 此模式用于单个作业创建一个Pod,然后创建其他Pod,充当这些Pod的某种自定义控制器。这允许最大的灵活性,但开始时可能有点复杂,并且与Kubernetes的集成较少

此模式的一个示例是一个作业,该作业启动一个Pod,该Pod运行一个脚本,该脚本依次启动Spark主控制器(参见Spark示例)、运行Spark驱动程序,然后进行清理

这种方法的一个优点是,整个流程可以获得作业对象的完成保证,但可以完全控制创建哪些POD以及如何为其分配工作

同时,考虑到dafault设置的作业完成状态-当达到指定的成功完成次数时,确保所有任务得到正确处理。在所有任务完成之前应用此状态不是安全的解决方案

您还应该知道,系统中通常不再需要完成的作业。将它们保留在系统中会给API服务器带来压力。如果作业由更高级别的控制器(如CronJobs)直接管理,则可以根据指定的基于容量的清理策略清理作业

这是官方文件:。 有用的博客:

编辑:


另一个选项是,您可以创建特殊的脚本,该脚本将持续检查您查找的值。然后不需要使用作业,您可以简单地使用部署

我们可以为并行作业定义两个规范:

1.具有固定完成计数的并行作业:

  • 为.spec.completions指定非零正值
  • 作业代表整个任务,并且在有任务时完成 范围1到1的每个值都有一个成功的Pod
    .spec.completions
  • 尚未实现:每个Pod在 范围1至规格完成
2.带有工作队列的并行作业:

  • 不指定.spec.completions,默认为
    .spec.parallelism

  • 吊舱必须相互协调,或由外部服务提供 确定每个人应该做什么

例如,一个Pod可以从工作队列中获取一批多达N个项目。 每个Pod都能够独立地确定是否完成了所有对等点,从而完成整个工作

  • 当作业中的任何Pod成功终止时,不会生成新的Pod 创造
  • 一旦至少有一个Pod成功终止并且所有Pod都被删除 终止,则作业成功完成
  • 一旦任何一个吊舱成功退出,其他吊舱就不应该再退出了 为此任务执行任何工作或编写任何输出。他们都应该 是