ansible-playbook部署Docker Swarm集羣

經過ansible-playbook,部署Docker Swarm集羣。html

docker安裝目錄:  /var/lib/docker

docker命令目錄: /usr/bin/docker

compose命令目錄: /usr/local/bin/docker-compose

weavescope: docker可視化管理工具

scope命令目錄: /usr/local/bin/scope

role ip hostname
manager/scope 192.168.1.51 manager1
manager/scope 192.168.1.52 manager2
worker/scope 192.168.1.53 worker1
worker/scope 192.168.1.54 worker2
worker/scope 192.168.1.55 worker3
worker/scope 192.168.1.56 worker4
worker/scope 192.168.1.57 worker5

準備

  • 將全部部署swarm集羣的主機分組:
# vim /etc/ansible/hosts[manager]192.168.1.51 hostname=manager1[add_manager]192.168.1.52 hostname=manager2[add_worker]192.168.1.53 hostname=worker1
192.168.1.54 hostname=worker2
192.168.1.55 hostname=worker3
192.168.1.56 hostname=worker4
192.168.1.57 hostname=worker5

  • 建立管理目錄:
# mkdir -p swarm/roles/{docker_install,init_install,manager_install,worker_install,scope_install}/{files,handlers,meta,tasks,templates,vars}# cd swarm/

說明:node

files:存放須要同步到異地服務器的源碼文件及配置文件; 
handlers:當資源發生變化時須要進行的操做,若沒有此目錄能夠不建或爲空; 
meta:存放說明信息、說明角色依賴等信息,可留空; 
tasks:Docker Swarm 安裝過程當中須要進行執行的任務; 
templates:用於執行 Docker Swarm 安裝的模板文件,通常爲腳本; 
vars:本次安裝定義的變量

# tree ..├── roles
│   ├── docker_install
│   │   ├── files
│   │   ├── handlers
│   │   ├── meta
│   │   ├── tasks
│   │   │   ├── install.yml
│   │   │   ├── main.yml
│   │   │   └── prepare.yml
│   │   ├── templates
│   │   └── vars
│   │       └── main.yml
│   ├── init_install
│   │   ├── files
│   │   ├── handlers
│   │   ├── meta
│   │   ├── tasks
│   │   │   ├── install.yml
│   │   │   └── main.yml
│   │   ├── templates
│   │   └── vars
│   ├── manager_install
│   │   ├── files
│   │   ├── handlers
│   │   ├── meta
│   │   ├── tasks
│   │   │   ├── install.yml
│   │   │   └── main.yml
│   │   ├── templates
│   │   └── vars
│   ├── scope_install
│   │   ├── files
│   │   ├── handlers
│   │   ├── meta
│   │   ├── tasks
│   │   │   ├── install.yml
│   │   │   └── main.yml
│   │   ├── templates
│   │   └── vars
│   └── worker_install
│       ├── files
│       ├── handlers
│       ├── meta
│       ├── tasks
│       │   ├── install.yml
│       │   └── main.yml
│       ├── templates
│       └── vars
└── swarm.yml

36 directories, 13 files

  • 建立安裝入口文件,用來調用roles:
# vim swarm.yml---
- hosts: all
  remote_user: root
  gather_facts: True

  roles:
    - docker_install

- hosts: manager
  remote_user: root
  gather_facts: True

  roles:
    - init_install

- hosts: add_manager
  remote_user: root
  gather_facts: True

  roles:
    - manager_install

- hosts: add_worker
  remote_user: root
  gather_facts: True

  roles:
    - worker_install

- hosts: all
  remote_user: root
  gather_facts: True

  roles:
    - scope_install


docker部分

  • 建立docker入口文件,用來調用docker_install:
# vim docker.yml#用於批量安裝Docker- hosts: all
  remote_user: root
  gather_facts: True

  roles:
    - docker_install

  • 建立變量:
# vim roles/docker_install/vars/main.yml#定義docker安裝中的變量COMPOSE_VER: 1.24.1

  • 環境準備prepare.yml:
# vim roles/docker_install/tasks/prepare.yml

- name: 關閉firewalld 
  service: name=firewalld state=stopped enabled=no  
- name: 臨時關閉 selinux  shell: "setenforce 0"
  failed_when: false- name: 永久關閉 selinux  lineinfile:
    dest: /etc/selinux/config    regexp: "^SELINUX="
    line: "SELINUX=disabled"- name: 添加EPEL倉庫  yum: name=epel-release state=latest- name: 安裝經常使用軟件包  yum:
    name:
      - vim      - lrzsz      - net-tools      - wget      - curl      - bash-completion      - rsync      - gcc      - unzip      - git    state: latest- name: 更新系統  shell: "yum update -y"
  ignore_errors: yes  args:
    warn: False

  • docker安裝install.yml:
# vim roles/docker_install/tasks/install.yml

- name: 建立software目錄  file: name=/software state=directory- name: 更改hostname  raw: "echo {{ hostname }} > /etc/hostname"- name: 更改生效  shell: "hostname {{ hostname }}"- name: 下載repo文件  shell: "if [ ! -f /etc/yum.repos.d/docker.repo ]; then curl http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker.repo; fi"- name: 生成緩存  shell: "yum makecache fast"
  args:
    warn: False- name: 安裝docker-ce  yum: 
    name: docker-ce    state: present- name: 啓動docker並開機啓動  service:
    name: docker    state: started    enabled: yes    
- name: 下載docker-compose  shell: "if [ ! -f /usr/local/bin/docker-compose ]; then curl -L https://github.com/docker/compose/releases/download/{{ COMPOSE_VER }}/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose; fi"
  - name: 給予執行權限  file: name=/usr/local/bin/docker-compose mode=0755  
- name: 提升docker pull速度  shell: "curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io"
  args:
    warn: False- name: 重啓docker  service:
    name: docker    state: restarted

  • 引用文件main.yml:
# vim roles/docker_install/tasks/main.yml#引用prepare、install模塊- include: prepare.yml
- include: install.yml


init部分

  • 建立init入口文件,用來調用init_install:
# vim init.yml#用於初始化swarm集羣- hosts: manager
  remote_user: root
  gather_facts: True

  roles:
    - init_install

  • 集羣初始化install.yml:
# vim roles/init_install/tasks/install.yml

- name: manager離開集羣  shell: "docker swarm leave -f"
  ignore_errors: yes- name: 初始化swarm集羣  shell: "docker swarm init --advertise-addr {{ ansible_ssh_host }}"
  - name: 獲取manager的token  shell: "echo `docker swarm join-token manager |grep docker` > /software/manager.sh"
  - name: 獲取worker的token  shell: "echo `docker swarm join-token worker |grep docker` > /software/worker.sh"- name: 獲取全部ip  shell: "echo `ansible all -m setup -a 'filter='ansible_default_ipv4'' |grep 'address' |grep -v 'macaddress' |awk -F '\"' '{print $4}'` > /software/hosts.txt"
 - name: 拷貝manager.sh  shell: "ansible all -m copy -a 'src=/software/manager.sh dest=/software mode=0755'"
  args:
    warn: False
    - name: 拷貝worker.sh  shell: "ansible all -m copy -a 'src=/software/worker.sh dest=/software mode=0755'"
  args:
    warn: False- name: 拷貝hosts.txt  shell: "ansible all -m copy -a 'src=/software/hosts.txt dest=/software'"
  args:
    warn: False

  • 引用文件main.yml:
# vim roles/init_install/tasks/main.yml#引用install模塊- include: install.yml


manager部分

  • 建立manager入口文件,用來調用manager_install:
# vim manager.yml#用於集羣增長manager- hosts: add_manager
  remote_user: root
  gather_facts: True

  roles:
    - manager_install

  • 添加manager到集羣install.yml:
# vim roles/manager_install/tasks/install.yml

- name: manager離開集羣  shell: "docker swarm leave -f"
  ignore_errors: yes- name: 集羣增長manager  script: /software/manager.sh

  • 引用文件main.yml:
# vim roles/manager_install/tasks/main.yml#引用install模塊- include: install.yml


worker部分

  • 建立worker入口文件,用來調用worker_install:
# vim worker.yml#用於集羣增長worker- hosts: add_worker
  remote_user: root
  gather_facts: True

  roles:
    - worker_install

  • 添加worker到集羣install.yml:
# vim roles/worker_install/tasks/install.yml

- name: worker離開集羣  shell: "docker swarm leave -f"
  ignore_errors: yes  
- name: 集羣增長worker  script: /software/worker.sh

  • 引用文件main.yml:
# vim roles/worker_install/tasks/main.yml#引用install模塊- include: install.yml


scope部分

  • 建立scope入口文件,用來調用scope_install:
# vim scope.yml#用於安裝weavescope- hosts: all
  remote_user: root
  gather_facts: True
  roles:
    - scope_install

  • scope安裝install.yml:
# vim roles/scope_install/tasks/install.yml

- name: 下載scope  shell: "if [ ! -f /usr/local/bin/scope ]; then curl -L git.io/scope -o /usr/local/bin/scope; fi"
  - name: 給予執行權限  file: name=/usr/local/bin/scope mode=0755- name: 中止scope容器  shell: "docker stop weavescope && docker rm weavescope"
  ignore_errors: yes- name: 啓動scope容器  shell: "hosts=`cat /software/hosts.txt`; scope launch $hosts"
  register: scope_url- debug: msg="{{ scope_url.stdout }}"

  • 引用文件main.yml:
# vim roles/scope_install/tasks/main.yml#引用install模塊- include: install.yml


安裝測試

  • 執行安裝:
# ansible-playbook swarm.yml

  • 查看結果:
# docker node lsID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
o6zkxtp0qmvq6r1dxydmprmi4 *   manager1            Ready               Active              Leader              19.03.4
nv1t4p8axfr1zn8k99tegsdhy     manager2            Ready               Active              Reachable           19.03.4
thpss999qnn3e0gun3pi20oy4     worker1             Ready               Active                                  19.03.4
y26tkhebj6u8b7psjnwghcbex     worker2             Ready               Active                                  19.03.4
7ygwplwy06sukkhag3kdu022p     worker3             Ready               Active                                  19.03.4
hzyd0fz8gx1pld5agjs9afri2     worker4             Ready               Active                                  19.03.4
j2r873fcjqxtbf6p3xjplybee     worker5             Ready               Active                                  19.03.4

打開瀏覽器,訪問任一節點的ip:4040linux

在這裏插入圖片描述

測試安裝沒有問題。已存放至我的gitgub:ansible-playbookgit

相關文章
相關標籤/搜索