Kon*_*bov 12 ansible kubernetes
提前感谢您花时间阅读本文。
我正在使用 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: 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
Run Code Online (Sandbox Code Playgroud)
但最好直接使用适当的模块功能。
(其他答案非常接近,我会编辑它们,但它说编辑队列已满。)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
Run Code Online (Sandbox Code Playgroud)
因此,要完成,您需要引用wait_condition.
k8s:
wait: yes
wait_condition:
type: Complete
status: "True"
Run Code Online (Sandbox Code Playgroud)
(wait参数需要布尔值,在 YAML 中yes是一个字符串,但 Ansible 接受更多布尔参数值。)
| 归档时间: |
|
| 查看次数: |
4333 次 |
| 最近记录: |