预先感谢您花费的时间阅读本文。
我正在玩Kubernetes,并使用Ansible与集群进行任何交互。有一些能成功部署应用程序的手册。
我用于部署的主要ansible组件是k8s,它允许我应用yaml配置。
我可以成功等待直到使用完成部署
k8s:
state: present
definition: config.yaml
wait: yes
wait_timeout: 10
但是,不幸的是,默认情况下,相同的技巧在Kubernetes Jobs中不起作用。该模块会立即退出,这在ansible模块中已明确说明,这是真的:
对于没有实现的资源类型,除非设置了wait_condition,否则wait将立即返回。
为解决这种情况,模块规范建议指定
wait_condition:
reason: REASON
type: TYPE
status: STATUS
医生还说:
条件的可能类型特定于Kubernetes中的每种资源类型。请参阅给定资源的状态字段的API文档,以查看可能的选择。
我检查了API规范,发现与声明的in the following answer相同:
唯一的类型值是“ Complete”和“ Failed”,并且它们可能具有“ True”或“ False”状态
因此,我的问题很简单:是否有人知道如何正确使用此等待条件?您是否已经尝试过(到目前为止,它是一个相对较新的功能)?
任何在哪里看的想法都将受到赞赏。
更新:
这是我现在使用的一种解决方法:
- name: Run Job
k8s:
state: present
definition: job_definition.yml
- name: Wait Until Job Is Done
k8s_facts:
name: job_name
kind: Job
register: job_status
until: job_status.resources[0].status.active != 1
retries: 10
delay: 10
ignore_errors: yes
- name: Get Final Job Status
k8s_facts:
name: job_name
kind: Job
register: job_status
- fail:
msg: "Job Has Been Failed!"
when: job_status.resources[0].status.failed == 1
但是直接使用适当的模块功能会更好。
答案 0 :(得分:5)
(其他答案非常接近,我会编辑它们,但它说编辑队列已满。)Job Condition 中的状态是一个字符串。在 YAML 中,True 标记被解析为布尔类型,您需要引用它来获取字符串。就像在作业的 YAML 输出中一样:
$ kubectl -n demo get job jobname -o yaml
apiVersion: batch/v1
kind: Job
metadata: ...
spec: ...
status:
completionTime: "2021-01-19T16:24:47Z"
conditions:
- lastProbeTime: "2021-01-19T16:24:47Z"
lastTransitionTime: "2021-01-19T16:24:47Z"
status: "True"
type: Complete
startTime: "2021-01-19T16:24:46Z"
succeeded: 1
因此要完成,您需要引用 wait_condition
中的状态。
k8s:
wait: yes
wait_condition:
type: Complete
status: "True"
(wait
参数需要布尔值,在 YAML 中 yes
是一个字符串,但 Ansible 接受更多值到 boolean parameters。)
答案 1 :(得分:1)
wait_condition适用于我的工作,只要根据您的工作平均时间流程正确设置了超时/类型/状态:
wait: yes
wait_timeout: 300
wait_condition:
type: Complete
status: True
答案 2 :(得分:0)
成功完成广告连播后,工作将跟踪成功 完成。当指定的成功完成次数是 到达时,任务(即Job)就完成了。
基于此,以及您已经链接的API specification-我们可以假设Job成功执行了您要求的多次操作后,其条件类型Complete
设置为True
的情况。
因此:
wait_condition:
type: Complete
status: True
应该做“工作”。
如k8s plugin code中所述,未指定原因时将忽略该原因。
我没有测试。仅基于代码和文档,因此,如果您可以确认它是否有效,那就太好了。
答案 3 :(得分:0)
我相信 wait_condition
类型必须与您使用的资源类型相关 type: Complete
例如适用于部署但在 serviceaccount
或 statefulset
处于yaml。