提前感谢您花时间阅读本文。
我正在使用 Kubernetes 并使用 Ansible 与我的集群进行任何交互。有一些成功部署应用程序的剧本。
我用于部署的主要ansible组件是k8s,它允许我应用我的 yaml 配置。
我可以成功地等到部署完成使用
k8s:
state: present
definition: config.yaml
wait: yes
wait_timeout: 10
Run Code Online (Sandbox Code Playgroud)
但是,不幸的是,默认情况下,同样的技巧不适用于 Kubernetes 作业。该模块只是立即退出,这在 ansible 模块中有明确描述,这是真的:
对于没有实现的资源类型,除非设置了wait_condition,否则wait 会立即返回。
为了涵盖这种情况,模块规范建议指定
wait_condition:
reason: REASON
type: TYPE
status: STATUS
Run Code Online (Sandbox Code Playgroud)
该文档还说:
条件的可能类型特定于 Kubernetes 中的每种资源类型。请参阅给定资源的状态字段的 API 文档以查看可能的选择。
我检查了 API 规范,发现与以下答案中所述相同:
唯一的类型值是“完成”和“失败”,并且它们可能具有“真”或“假”状态
所以,我的问题很简单:有没有人知道如何正确使用这个wait_condition?您是否已经尝试过(至于现在,它是相对较新的功能)?
任何看哪里的想法也值得赞赏。
更新:
这是我现在使用的一种解决方法:
- name: Run Job
k8s:
state: present
definition: job_definition.yml
- name: Wait Until Job Is Done
k8s_facts:
name: job_name
kind: Job
register: …Run Code Online (Sandbox Code Playgroud) 等待kubernetes作业完成的最佳方法是什么?我注意到很多建议可以使用:
kubectl wait --for=condition=complete job/myjob
Run Code Online (Sandbox Code Playgroud)
但我认为,只有工作成功,这才行。如果失败,我必须做类似的事情:
kubectl wait --for=condition=failure job/myjob
Run Code Online (Sandbox Code Playgroud)
有没有办法使用wait来等待两个条件?如果没有,等待工作成功或失败的最佳方法是什么?