相关疑难解决方法(0)

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: …
Run Code Online (Sandbox Code Playgroud)

ansible kubernetes

12
推荐指数
1
解决办法
4333
查看次数

使用命令行等待Kubernetes作业在失败/成功时完成

等待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来等待两个条件?如果没有,等待工作成功或失败的最佳方法是什么?

jobs wait kubernetes kubectl kubernetes-jobs

9
推荐指数
4
解决办法
1505
查看次数

标签 统计

kubernetes ×2

ansible ×1

jobs ×1

kubectl ×1

kubernetes-jobs ×1

wait ×1