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

我有两台机器的集群。 我有一个剧本在每一个运行docker集装箱:

--- - 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的解决scheme?

您可以在串行模式下运行整个剧本,以确保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台主机,最后是最后一台主机。

我已经解决了通过添加一个任务来等待tomcat启动:

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

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

我还在剧本中添加了serial: 1 (如ydaetskcoR所述),以便顺序地运行任务