IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    Ansible的使用经验

    zheng-ji发表于 2015-09-05 18:09:00
    love 0

    当你只有一两台服务器的情况下,可以直接登上服务器,手敲命令完成软件部署,代码发布等工作。但假如你有10台,100台的时候,这种方式不仅浪费大量时间,而且给人为犯错带来了可能。于是我们选择Ansible来做自动化批量操作。

    之前有记录一些 Ansible 入门的使用,请看这里, 这半年的积累, 总结一些实用的经验, 记录了一把。

    • 配置 ansible.cfg 文件
    • 使用 ansible role 来区分业务
    • files 目录的路径定位
    • 使用 tags 区分不同操作
    • 规划 ansible roles 的 tasks 文件
    • ansible-play-book 一些常用的选项

    更好地配置文件

    我们会如下配置 /etc/ansible/host, 特意指明用户与 端口

    1
    2
    3
    
    [web-cluster]
    <node-1-IP> ansible_ssh_port=<Your Port> ansible_ssh_user=zj
    <node-2-IP> ansible_ssh_port=<Your Port> ansible_ssh_user=zj

    在 /etc/ansible/ansible.cfg 文件里 我们特意提及了 ansible-role 的配置,未来我们会使用这个东西

    1
    
    roles_path    = /home/zj/my-ansible/roles

    使用 ansible role 来区分业务

    打开 ansible 部署脚本的文件夹, 目录树如下

    cd /home/zj/my-ansible/

    1
    2
    3
    4
    5
    6
    7
    8
    
    haproxy
         - entry.yaml
    roles
         - haproxy
            - files
            - handlers
            - vars
            - tasks

    我用一个管理 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
    2
    3
    
    - hosts: web-cluster
      roles:
        - haproxy

    files 目录的路径定位

    摘取 ~/my-ansible/roles/haproxy/tasks/main.yml

    1
    2
    3
    
    - name: copy haproxy conf
      copy: src=haproxy.cfg dest=/etc/haproxy/haproxy.cfg owner=root group=root
      sudo: yes

    这里的src=haproxy.cfg 意味着 ~/my-ansible/roles/haproxy/files/haproxy.cfg

    使用 tags 区分不同操作

    1
    2
    3
    4
    5
    
    - name: install ppa
      shell: add-apt-repository -y ppa:vbernat/haproxy-1.5
      sudo: yes
      tags:
        - install-haproxy

    以下命令,是使用 tags 参数区分操作的例子

    1
    2
    
    cd ~/my-ansible/haproxy
    ansible-playbook entry.yml -v -K --tags "install-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
    2
    3
    4
    5
    
    - name: copy haproxy conf
      copy: src=haproxy.cfg dest=/etc/haproxy/haproxy.cfg owner=root group=root
      sudo: yes
      tags:
         - install-haproxy

    tags 最好也与该 yml 文件名一致,清晰分明

    ansible-play-book 一些常用的选项

    • -K 需要 sudo 权限去客户机执行命令,会提示你输入密码
    • -v 可以输出冗余的执行过程
    • –check 可以测试脚本执行情况,但实际并未在远程机器执行
    • –tags 提示 ansible-play-book 调用哪些 tags 命令

    使用过ansible roles 之后,最大的体会是操作调理化,甚至编程化,合理的利用 handler, vars, 能更加优雅抽象。


    上述的例子在 Github 有代码, 结合本文阅读可能更容易上手 Link



沪ICP备19023445号-2号
友情链接