Ansible 使用经验
当你只有一两台服务器的情况下,可以直接登上服务器,手敲命令完成软件部署,代码发布等工作。但假如你有10台,100台的时候,这种方式不仅浪费大量时间,而且给人为犯错带来了可能。于是我们选择 Ansible 来做自动化批量操作。
之前有记录一些 Ansible 入门的使用,请看这里, 这半年的积累, 总结一些实用的经验, 记录了一把。
- 配置 ansible.cfg 文件
- 使用 ansible role 来区分业务
- files 目录的路径定位
- 使用 tags 区分不同操作
- 规划 ansible roles 的 tasks 文件
- ansible-play-book 一些常用的选项
更好地配置文件
我们会如下配置 /etc/ansible/host, 特意指明用户与 端口
1 | [web-cluster] |
在 /etc/ansible/ansible.cfg 文件里
我们特意提及了 ansible-role 的配置,未来我们会使用这个东西
1 | roles_path = /home/zj/my-ansible/roles |
使用 ansible role 来区分业务
打开 ansible 部署脚本的文件夹, 目录树如下
1 | cd /home/zj/my-ansible/ |
我用一个管理 haproxy 的例子来讲解这种方式。
在 roles 目录下创建 haproxy, 如上所示,需要有四个目录;
- files 目录下放置需要被传输到远端的文件;
- vars 目录下有一个 main.yml 文件,可以定义一些通用的配置变量,可以在 ansbile 脚本中使用;
- handlers 目录下有一个 main.yml, 可以定义一些通用的操作,比如重启服务等;
- tasks 目录下是我们编写 main.yml 脚本,执行业务逻辑的地方;
那么 ansible role 的入口在哪呢?
在 ~/my-ansible/haproxy/entry.yml 中,指定了roles的角色,如此一来,
ansible-playbook 就会去 /home/zj/my-ansible/roles/haproxy 准备执行 tasks/main.yml
1 | - hosts: web-cluster |
files 目录的路径定位
摘取 ~/my-ansible/roles/haproxy/tasks/main.yml
1 | - name: copy haproxy conf |
这里的 src=haproxy.cfg 意味着 ~/my-ansible/roles/haproxy/files/haproxy.cfg
使用 tags 区分不同操作
1 | - name: install ppa |
以下命令,是使用 tags 参数区分操作的例子
1 | cd ~/my-ansible/haproxy |
规划 ansible roles 的 tasks 目录
tasks 目录有一个主执行文件 main.yml, 因为业务操作步骤太多,导致 main.yml 文件很长,那么可读性就下降了。为此,我们使用了 include 语法。
cat ~/my-ansible/roles/haproxy/tasks/main.yml
1 | - include: 'install-haproxy.yml' |
include 上述文件,这样 main.yml 就显得简洁,我们可以将相关的操作写在对应的 yml 文件里
cat ~/my-ansible/roles/haproxy/tasks/install-haproxy.yml
1 | - name: copy haproxy conf |
tags 最好也与该 yml 文件名一致,清晰分明
ansible-play-book 一些常用的选项
- -K 需要 sudo 权限去客户机执行命令,会提示你输入密码
- -v 可以输出冗余的执行过程
- –check 可以测试脚本执行情况,但实际并未在远程机器执行
- –tags 提示 ansible-play-book 调用哪些 tags 命令
使用过ansible roles 之后,最大的体会是操作调理化,甚至编程化,合理的利用 handler, vars, 能更加优雅抽象。
上述的例子在 Github 有代码, 结合本文阅读可能更容易上手
Link