通过前面对Ansible的学习,我们已经对Ansible的Playbook和Role有了初步的认识,接下来我们将在实践中慢慢把Ansible引入到我们的配置管理工作中来。 本篇是在我们的测试环境中使用Ansible安装Docker的记录。

目录结构

我们创建了一个名称为docker的Ansible role:

 1.
 2
 3├── inventories
 4│   ├── dev
 5│   │   ├── group_vars
 6│   │   │   └── all.yml
 7│   │   ├── host_vars
 8│   │   │   ├── node1.yml
 9│   │   │   ├── node2.yml
10│   │   │   └── node3.yml
11│   │   └── hosts
12│   └── staging
13├── roles
14│   ├── common
15│   │   ├── defaults
16│   │   │   └── main.yml
17│   │   └── tasks
18│   │       └── main.yml
19│   ├── docker
20│       ├── defaults
21│       │   └── main.yml
22│       ├── handlers
23│       │   └── main.yml
24│       ├── tasks
25│       │   └── main.yml
26│       └── templates
27│           └── daemon.json.j2
28└── deploy-docker.yml

defaults/main.yml主要用来放一些变量的默认值。

1{% raw %}
2# yum list docker-ce.x86_64  --showduplicates |sort -r
3docker_version: 17.03.1.ce-1.el7.centos
4docker_config_dir: /etc/docker
5dockerd_option_graph: /var/lib/docker
6{% endraw %}

cat handlers/main.yml

1---
2- name: restart docker
3  systemd:
4    name: docker
5    state: restarted
6    enabled: true

tasks/main.yml是按照Docker官方文档Get Docker for CentOS的安装步骤编排的task, cat tasks/main.yml

 1{% raw %}
 2---
 3
 4- name: ensure config directory
 5  file: 
 6    path: "{{ docker_config_dir }}"
 7    state: directory
 8
 9- name: ensure required packages
10  yum:
11    name: "{{ item }}"
12    state: present
13  with_items:
14    - yum-utils
15    - device-mapper-persistent-data
16    - lvm2
17    
18- name: add docker ce repo
19  shell: yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
20  args:
21    creates: /etc/yum.repos.d/docker-ce.repo
22  register: docker_yum_repo
23  
24- name: make yum cache fast
25  shell: yum makecache fast
26  when: docker_yum_repo.changed
27  
28- name: install docker ce
29  yum:
30    name: "docker-ce-{{ docker_version }}"
31    state: present
32  notify: restart docker
33  
34- name: copy dockerd daemon.json
35  template: 
36    src: daemon.json.j2
37    dest: /etc/docker/daemon.json
38  notify: restart docker
39
40
41{% endraw %}

运行playbook

deploy-docker.yml这个playbook十分简单,直接依赖docker这个role即可:

1---
2- hosts: docker
3  become: yes
4  roles:
5     - role: docker

hosts: docker-servers,我们在inventories/dev/hosts中配置了docker-servers,当前总共有3台机器。

1[docker]
2node1
3node2
4node3
1ansible-playbook -i inventories/dev/hosts deploy-docker.yml

一下下就在这4台机器上装上了docker,已经初步体会到ansible的能力了O(∩_∩)O~

参考