通过前面对Ansible的学习,我们已经对Ansible的Playbook和Role有了初步的认识,接下来我们将在实践中慢慢把Ansible引入到我们的配置管理工作中来。 本篇是在我们的测试环境中使用Ansible安装Docker的记录。
目录结构
我们创建了一个名称为docker的Ansible role:
.
├── inventories
│ ├── dev
│ │ ├── group_vars
│ │ │ └── all.yml
│ │ ├── host_vars
│ │ │ ├── node1.yml
│ │ │ ├── node2.yml
│ │ │ └── node3.yml
│ │ └── hosts
│ └── staging
├── roles
│ ├── common
│ │ ├── defaults
│ │ │ └── main.yml
│ │ └── tasks
│ │ └── main.yml
│ ├── docker
│ ├── defaults
│ │ └── main.yml
│ ├── handlers
│ │ └── main.yml
│ ├── tasks
│ │ └── main.yml
│ └── templates
│ └── daemon.json.j2
└── deploy-docker.ymldefaults/main.yml主要用来放一些变量的默认值。
{% raw %}
# yum list docker-ce.x86_64 --showduplicates |sort -r
docker_version: 17.03.1.ce-1.el7.centos
docker_config_dir: /etc/docker
dockerd_option_graph: /var/lib/docker
{% endraw %}cat handlers/main.yml:
---
- name: restart docker
systemd:
name: docker
state: restarted
enabled: truetasks/main.yml是按照Docker官方文档Get Docker for CentOS的安装步骤编排的task,
cat tasks/main.yml:
{% raw %}
---
- name: ensure config directory
file:
path: "{{ docker_config_dir }}"
state: directory
- name: ensure required packages
yum:
name: "{{ item }}"
state: present
with_items:
- yum-utils
- device-mapper-persistent-data
- lvm2
- name: add docker ce repo
shell: yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
args:
creates: /etc/yum.repos.d/docker-ce.repo
register: docker_yum_repo
- name: make yum cache fast
shell: yum makecache fast
when: docker_yum_repo.changed
- name: install docker ce
yum:
name: "docker-ce-{{ docker_version }}"
state: present
notify: restart docker
- name: copy dockerd daemon.json
template:
src: daemon.json.j2
dest: /etc/docker/daemon.json
notify: restart docker
{% endraw %}运行playbook
deploy-docker.yml这个playbook十分简单,直接依赖docker这个role即可:
---
- hosts: docker
become: yes
roles:
- role: dockerhosts: docker-servers,我们在inventories/dev/hosts中配置了docker-servers,当前总共有3台机器。
[docker]
node1
node2
node3ansible-playbook -i inventories/dev/hosts deploy-docker.yml一下下就在这4台机器上装上了docker,已经初步体会到ansible的能力了O(∩_∩)O~