美文网首页
【ansible】用ansible创建swarm集群

【ansible】用ansible创建swarm集群

作者: 放纵不基 | 来源:发表于2023-01-14 08:38 被阅读0次

ansible文件

cat hosts

[all]
docker01
docker02
docker03
docker04
docker05

[swam-init]
docker01

[swarm-master]
docker02
docker03

[swarm-worker]
docker04
docker05

cat group_vars/all.yml

docker_bip: "172.17.0.1/16"
gwbridge_subnet: "172.18.0.0/16"
gwbridge_gateway: "172.18.0.1"
regsistry_addr: "xx.xx.xx.xx:2019"
registry_user: "user"
registry_pwd: "passwd"
listen_interface: "eth0"

cat roles/swarm/tasks/main.yml


- name: "Create Docker Folder"
  file:
    dest: "{{ item }}"
    state: present
    mode: 750
  with_items:
    - "/etc/docker"

- name: "Copy Docker Binary File"
  copy:
    src: "{{ item }}"
    dest: /usr/bin
  with_fileglob:
    - docker/*

- name: "Copy Config File"
  templates:
    src: "{{ item.src}}"
    dest: "{{ item.dest }}"
  with_items:
    - { src: 'docker.env', dest: '/etc/docker' }
    - { src: 'docker.service', dest: '/etc/systemd/system' }

- name: "Start Docker"
  systemd:
    name: docker
    state: started
    daemon_reload: yes
    enabled: yes

- name: "Create Docker Gateway Bridge"
  shell: |
    docker network create \
      --driver=bridge \
      --subnet={{ gwbridge_subnet }} \
      --gateway={{ gwbridge_gateway }} \
      --opt "com.docker.network.bridge.name"="docker_gwbridge" \
      --opt "com.docker.network.bridge.enable_icc"="false" \
      --opt "com.docker.network.bridge.enable_ip_masquerade"="true" \
      docker_gwbridge

- name: "Login Docker Registry"
  command: |
    docker login {{ regsistry_addr }} -u {{ registry_user }} -p {{ registry_pwd }}

- name: "Init Docker Swarm"
  block:
    - name: "Create Docker Swarm"
      command: |
        docker swarm init --listen-addr {{ listen_interface }}:2377 --advertise-addr {{ listen_interface }}:2377

    - name: "Get Swarm Manager Token"
      command: "docker swarm join-token manager -q"
      register: swarm_manager_token

    - name: "Get Swarm Worker Token"
      command: "docker swarm join-token worker -q"
      register: swarm_worker_token

  when: "'swarm-init' in group_names"

- name: "Join Docker Swarn As Manager"
  shell: |
    docker swarm join \
      --token {{ hostvars['docker01']['swarm_manager_token']['stdout'] }} \
      --addvertise-addr {{ listen_interface }}:2377
  when: "'swarm-master' in group_names"

- name: "Join Docker Swarn As Worker"
  shell: |
    docker swarm join \
      --token {{ hostvars['docker01']['swarm_worker_token']['stdout'] }} \
      --addvertise-addr {{ listen_interface }}:2377
when: "'swarm-worker' in group_names"

参考

docker swarm init
https://docs.docker.com/engine/reference/commandline/swarm_init

docker network create
https://docs.docker.com/engine/reference/commandline/network_create

如何创建docker network?
https://jimmysong.io/docker-handbook/docs/create_network.html
http://manpages.ubuntu.com/manpages/bionic/man1/docker-network-create.1.html
https://www.centos.bz/2017/01/docker-swarm-init

Copy multiple files with Ansible
https://stackoverflow.com/questions/36696952/copy-multiple-files-with-ansible

模板设计者文档
http://docs.jinkan.org/docs/jinja2/templates.html#filters

Jinja2中文文档
https://docs.pythontab.com/jinja/jinja2/index.html

相关文章

网友评论

      本文标题:【ansible】用ansible创建swarm集群

      本文链接:https://www.haomeiwen.com/subject/dctiurtx.html