如何在双节点群集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所述),以便顺序地运行任务