Usando o módulo docker_service Ansible para implantar o serviço no swarm

4

Estou tentando implantar um serviço do Docker no swarm, mas sempre acabando com o contêiner em execução no meu host local (aquele que uso como gerenciador de enxame do docker) e sem serviço

Aqui está minha configuração:

Eu tenho um enxame Docker (v. 1.12.1) de três nós que inclui um host em execução como gerenciador e dois nós trabalhadores em execução no CentOS 7. No nó gerenciador (localhost), eu executo o Ansible (v. 2.1.1.0) playbook e o enxame já está configurado e está sendo executado

Swarm: active
 NodeID: d9h5xa832ax7wzeq8q44fjld3
 Is Manager: true
 ClusterID: 9cztoin3gy2ntbwehsmrkjuxi
 Managers: 1
 Nodes: 3
 Orchestration:
  Task History Retention Limit: 5
 Raft:
  Snapshot Interval: 10000
  Heartbeat Tick: 1
  Election Tick: 3
 Dispatcher:
  Heartbeat Period: 5 seconds
 CA Configuration:
  Expiry Duration: 3 months
 Node Address: 10.25.190.209

Começando com um manual que tenha este código

- hosts: localhost
  name: Run JMeter test
  vars_files:
    - user.config.yml
  vars:
    execute_tpcds_test : "{{ run_tpcds_test }}"    
  roles:
    - { role: run_jmeter, when: execute_tpcds_test is defined and execute_tpcds_test ==1 }

Que chama esse papel:

- name: Deploy tpcds_tpg service to swarm
  docker_service:
    project_name: tpcds-tpg
    definition:
      version: '2'
      services:
        run_tests: 
          image: 'pbench/tpcds_tpg'
          volumes: 
            - /opt/pbench/run_output/
          command: ./run_jmeter.sh "{{jmeter_output_dir}}" 
  register: output
- debug: var=output

Quando executo ansible-playbook ./site.yml , acabo com um contêiner em execução. Fazendo docker ps -a exibe

[pdo@sdl02133 tpcds-tpg]$ docker ps -a
CONTAINER ID        IMAGE              COMMAND                  CREATED             STATUS              PORTS               NAMES
fef245b41365        pbench/tpcds_tpg   "./run_jmeter.sh /opt"   21 seconds ago      Up 20 seconds                           tpcdstpg_run_tests_1

E fazendo docker service ls não mostrar serviços em execução, parece que docker_service implanta minha imagem como um contêiner local e não como um serviço no enxame

Então, minha suposição era de que, se eu tivesse um swarm ativo na máquina que é um gerenciador de enxames e eu usasse o módulo Ansible docker_service , ele estaria automaticamente ciente do swarm e implantaria o serviço nele. Parece que minha suposição está errada e não consigo encontrar nenhum documento, postagens de blog, etc. que me indiquem o que fazer e o que estou perdendo. Especialistas por favor ajudem!

    
por Bostone 10.10.2016 / 17:28

1 resposta

0

Encontrei a resposta finalmente. Basicamente, minha suposição no último parágrafo é falsa. Pelo menos por enquanto. Acontece que o docker_service do ansible é apenas um wrapper em torno do docker compor e que (muito infelizmente) no momento da escrita não está integrado ao swarm do docker. Basicamente estou sem sorte aqui de acordo com este tópico de suporte O mesmo tópico fornece uma possível solução alternativa se você estiver interessado

    
por 11.10.2016 / 20:03