2

我正在学习 Argo 项目工作流程中的信号量,以避免使用相同资源的并发工作流程。

我的用例是我有几个外部资源,一次只能使用一个工作流。到目前为止一切顺利,但有时资源需要一些维护,在此期间我不想 Argo 启动任何工作流。

我想我有两个选择:

  • 我测试了手动将 configMap 中的信号量值设置为值 0,但 Argo 还是启动了一个工作流。
  • 我可以启动一个永远运行的工作流,直到它被删除,并要求同步锁,但这需要一些额外的开销才能运行不做任何事情的工作流。

所以我想知道如果我将信号量值设置为 0,它应该如何工作,我认为它不应该启动工作流,因为它说 0。任何人有任何关于此的信息?

这是我执行的步骤:

  1. 首先,我使用 kubectl -f 应用我的 configmap。
  2. 然后我提交了一些工作流,因为它们都使用相同的信号量,所以 Argo 将启动一个,其余的将一次按顺序执行。
  3. 然后我用 kubectl edit configMap 更改 semapore 的值
  4. 提交新作业,然后 Argo 将执行该作业。

当我通过 kubectl edit 更新 configMap 时,也许 Argo 不会重新加载 configMap?我想将来以编程方式更新 configmap,但现在使用 kubectl edit 进行测试。

4

1 回答 1

2

快速修复:应用 ConfigMap 更改后,循环工作流控制器 pod。这将迫使它重新加载信号量状态。

我无法重现您的确切问题。在使用kubectl edit将信号量设置为之后0,任何新提交的工作流都会保留下来Pending

确实遇到了一个问题,即使kubectl edit用来提高信号量限制不会自动启动任何Pending工作流。循环工作流控制器 pod 允许工作流再次开始运行。

除了使用快速修复,我建议提交一个问题。同步是一项较新的功能,它可能还不是 100% 健壮的。

于 2020-10-19T18:20:11.117 回答