我正在学习Argo项目工作流中的信号量,以避免使用相同资源的并发工作流。
我的用例是,我有几个外部资源,每次只有一个工作流可以使用一个。到目前为止还不错,但有时资源需要一些维护,在此期间,我不想让Argo启动任何工作流程。
我想我有两个选择:
- 我测试了手动将configMap中的信号量值设置为值0,但Argo还是启动了一个工作流
- 我可以启动一个永远运行的工作流,直到它被删除,并声明同步锁定,但这需要一些额外的开销来运行不做任何事情的工作流
所以我想知道如果我将信号量值设置为0,它应该如何工作,我认为它不应该启动工作流,因为它说0。有人知道这方面的信息吗?
这是我执行的步骤:
- 首先我用kubectl-f应用我的配置映射
- 然后我提交了一些工作流,由于它们都使用相同的信号量,Argo将启动一个工作流,其余的工作流将按顺序执行,每次一个
- 然后,我用kubectl编辑configMap来更改semapore的值
- 提交新作业,然后Argo将执行
当我通过kubectl编辑更新configMap时,Argo可能不会重新加载configMap?我想在未来用程序更新configmap,但现在使用kubectl编辑进行测试。
快速修复:应用ConfigMap更改后,循环工作流控制器pod。这将迫使它重新加载信号量状态。
我无法复制你的确切问题。在使用kubectl edit
将信号量设置为0
之后,任何新提交的工作流都保持为Pending
。
我确实遇到了一个问题,使用kubectl edit
来提高信号量限制并不能自动启动任何Pending
工作流。循环工作流程控制器pod允许工作流程重新开始运行。
除了使用快速修复程序,我还建议提交一个问题。同步是一个较新的功能,它可能还没有100%的健壮性。