Я пытаюсь добавить три главных узла с помощью Ansible.
- name : Init a new swarm with default parameters
community.general.docker_swarm:
advertise_addr: "{{ docker_swarm_master_ip }}"
state : present
register : swarm_info
when :
- ansible_eth1.ipv4.address == docker_swarm_master_ip
- name : Add master nodes
community.general.docker_swarm:
advertise_addr: docker_swarm_master_ip
remote_addrs : "{{ swarm_master_nodes }}"
join_token : "{{ swarm_info.swarm_facts.JoinTokens.Manager }}"
state : join
when :
- inventory_hostname == "node1"
Это не добавляет узлы в список swarm_master_nodes
Нет ошибок. node1 — это лидер, в котором был инициализирован рой.
Как его правильно использовать. Документация не очень понятна.
Спасибо
Согласно документации:
- name: Init a new swarm with default parameters
community.general.docker_swarm:
state: present
- name: Add nodes
community.general.docker_swarm:
state: join
advertise_addr: 192.168.1.2
join_token: SWMTKN-1--xxxxx
remote_addrs: [ '192.168.1.1:2377' ]
Вам не нужно advertise_addr
при инициализации нового роевого кластера. Кроме того, remote_addrs
должен быть IP-адресом главного узла.
Итак, это должно быть то, что вы хотите:
- name : Init a new swarm with default parameters
community.general.docker_swarm:
state : present
register : swarm_info
when :
- ansible_eth1.ipv4.address == docker_swarm_master_ip
- name : Add master nodes
community.general.docker_swarm:
advertise_addr: "{{ node1 }}"
remote_addrs : ["{{ docker_swarm_master_ip }}"]
join_token : "{{ swarm_info.swarm_facts.JoinTokens.Manager }}"
state : join
when :
- inventory_hostname == "node1"
Я ничего не нашел об этом. Что я сделал, так это проверил некоторые коды из галактики Ansible, чтобы увидеть, как они реализуют рой докеров с помощью ansible. Я надеюсь, что один может вам помочь.
Это документация по параметрам. Тем не менее, я ценю ваше время. Спасибо за ссылку, которая помогла.
Без
addvertise_addr
как я могу точно указать, какой узел должен быть лидером? Да, он будет работать на первом запущенном удаленном хосте. Если на вашей машине много сетевых интерфейсов, это необходимо указать. В противном случае он будет жаловаться.remote_addrs
также должен быть IP-адрес главного узла? Тогда где он найдет узлы, чтобы присоединиться к рою? В документации написаноRemote address of one or more manager nodes of an existing Swarm to connect to. Used with state=join.
.advertise_addr
должен быть узломswarm init
.remote_addrs
содержит адрес для соединения узлов, не так ли?