如何在双节点集群docker容器部署中使用wait_for?

时间:2016-03-15 09:47:11

标签: docker ansible ansible-playbook

我有一台有两台机器的集群。我有一个剧本在每个人中运行一个码头工人:

---
- hosts: machines_in_the_cluster

  tasks:
  - name: Run app container
    docker:
      name: "name"
      image: whatever:1.0
      pull: always
      state: reloaded
      ports:
      - "8080:8080"

它在每台机器中启动一个tomcat服务器。但是我不想在第二台机器上执行任务,直到第一台机器完成启动tomcat。

我该如何解决?是否有通过http的健康检查?有没有使用wait_for的解决方案?

2 个答案:

答案 0 :(得分:1)

您可以在serial mode中运行整个剧本,以确保Ansible在转移到另一个集合之前针对主机子集完成整个剧本。

您可以通过将serial参数添加到剧本中来实现此目的,如下所示:

---
- hosts: machines_in_the_cluster

  serial: 1

  tasks:
  - name: Run app container
    ...

您可以指定一次要执行的绝对主机数(上面的示例一次只执行一个)或可用主机的百分比。运行这个:

- hosts: machines_in_the_cluster

  serial: 50%

  tasks:
  - name: Run app container
    ...

如果目标组中有5台主机,则会运行3次,定位前2台主机,第2台主机,最后是最后一台主机。

答案 1 :(得分:0)

我通过添加一个等待tomcat启动的任务来解决它:

  - name: Wait for server startup
    local_action: wait_for host={{inventory_hostname}} port={{port}} timeout=50 delay=10

这将等待10秒无所事事,然后将开始轮询以检查端口是否可用。如果达到超时,任务将失败。

我还在剧本中添加了serial: 1(作为ydaetskcoR提及),以便随后运行任务