一、概述
本文主要介绍在滴滴云部署 Ansible,以及通过 2 台服务器演示通过 Ansible 安装 Nginx 服务的过程。
二、什么是 Ansible
Ansible 是一款开源的 IT 配置管理、服务部署与编排工具。官方的解释是 “Ansible is Simple IT Automation”——简单的自动化 IT 工具。
该工具的目标有以下几项:
- 自动化部署 APP
- 自动化管理配置项
- 自动化的持续交付
- 自动化的云服务管理
完成以上的目标只需要在管理节点执行一系列的命令即可。
三、为什么需要 Ansible
当只有一台服务器时,我们可以通过命令,或者编写简单的脚本来配置服务,更新配置。但如果是 10 台,100 台乃至更多的机器时,我们如何高效、准确的配置不同的服务?
这时候,我们就需要找到能够实现大批量机器并发操作,且支持自动化配置的工具,这就是 Ansible 的最主要功能。
目前与 Ansible 类似的工具有:Saltstack、Puppet
四、Ansible 架构图
Ansible 是一个模型驱动的配置管理器,支持多节点发布、远程任务执行。默认使用 SSH 进行远程连接,无需在被管理节点上安装附加软件,可使用各种编程语言进行扩展。
五、安装 Ansible
5.1 示例环境
主机名 | ip |
---|---|
master | 10.0.8.84 |
web01 | 10.0.8.67 |
5.2 安装
只需要在 master 主机安装即可。
Ubuntu 16.04
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
# 更新包元数据 sudo apt-get update # 安装仓库管理工具 sudo apt-get install software-properties-common # 配置ansible仓库 sudo apt-add-repository --yes --update ppa:ansible/ansible # 安装ansible sudo apt-get install ansible # 安装完成后查看版本信息 ansible --version ----------------------------- ansible 2.7.7 config file = /etc/ansible/ansible.cfg configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules'] ansible python module location = /usr/lib/python2.7/dist-packages/ansible executable location = /usr/bin/ansible python version = 2.7.12 (default, Nov 12 2018, 14:36:49) [GCC 5.4.0 20160609] |
5.3 配置
主配置文件:/etc/ansible/ansible.cfg
用户也可以自定义配置文件,配置文件的优先级:
- ANSIBLE_CONFIG ( 环境变量 )
- ansible.cfg ( 当前目录下 )
- .ansible.cfg ( 用户家目录下 )
- /etc/ansible/ansible.cfg
主机组配置文件:/etc/ansible/hosts
编辑该文件,创建两个主机组:
1 2 3 4 5 6 7 8 |
vi /etc/ansible/hosts [master] 10.0.8.84 [web] 10.0.8.67 |
配置 SSH 免密登录:
1 2 3 4 5 6 7 8 9 10 11 |
# 生成钥匙对(master执行) sudo ssh-keygen # 配置免密登录 # 本机 sudo cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys sudo chmod 400 /root/.ssh/authorized_keys # web01 # 将/root/.ssh/id_rsa.pub 的内容复制到 web01机器的 /root/.ssh/authorized_keys 文件中,并修改权限 |
六、通过 Ansible 管理与配置主机
6.1 执行命令
1 2 3 4 5 6 7 8 9 10 11 12 13 |
sudo ansible all -a who 10.0.8.84 | CHANGED | rc=0 >> dc2-user pts/0 2019-02-22 09:08 (111.202.166.3) dc2-user pts/1 2019-02-22 10:18 (111.202.166.3) root pts/3 2019-02-22 10:25 (10.0.8.84) 10.0.8.67 | CHANGED | rc=0 >> root pts/0 2019-02-22 10:25 (10.0.8.84) sudo ansible web -a who 10.0.8.67 | CHANGED | rc=0 >> root pts/0 2019-02-22 10:25 (10.0.8.84) |
6.2 安装并配置 Nginx
新建一个 Playbook:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
vi nginx.yml --- - hosts: web tasks: - name: install nginx yum: name: nginx state: latest - name: ensure nginx is running service: name: nginx state: started |
执行 Playbook:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
# 检查Playbook文件 sudo ansible-playbook -C nginx.yml PLAY [web] ******************************************* TASK [Gathering Facts] ******************************* ok: [10.0.8.67] TASK [install nginx] ********************************* changed: [10.0.8.67] PLAY RECAP ******************************************* 10.0.8.67 : ok=2 changed=1 unreachable=0 failed=0 # 执行playbook sudo ansible-playbook nginx.yml PLAY [web] ********************************* TASK [Gathering Facts] ********************* ok: [10.0.8.67] TASK [install nginx] *********************** changed: [10.0.8.67] PLAY RECAP ********************************* 10.0.8.67 : ok=2 changed=1 unreachable=0 failed=0 |