美文网首页
Ansible学习笔记

Ansible学习笔记

作者: 白熊 | 来源:发表于2015-12-22 21:16 被阅读2738次

    1. 前言

    随着企业服务器数量越来越多,当达到几百台,上千台服务器之后,服务器日常管理也逐渐繁杂,每天如果通过人工去频繁的更新或者部署及管理这些服务器,势必会浪费大量的时间,而且有可能人为的操作也会造成某些疏忽而遗漏。
    不过不用担心,市面上已有大量的工具可以自动化运维管理这些机器,比如:

    • puppet
    • saltstack
    • chef
    • ansible

    saltstack与ansible的比较:

    由于目前公司线上使用的是saltstack,自然要写下这两者的对比。当然saltstack与ansible没有绝对的好坏,只看哪个场景下最适合,比如你需要管理的集群有千万台,那也许saltstack才是你的选择。

    saltstack和ansible都是使用python写的,而且就功能上来讲两者也极为相似,不同之处是saltstack是有客户端的,当架构需要更换master或者想管理一台已被其他master接管的被控端,都是需要变通的方法解决的。
    当然也许你会说salt现在也有salt-ssh了!那我要说,既然你用了salt肯定不会经常用salt-ssh,如果你经常用salt-ssh不如用ansible省事。
    如果不是定制化任务,ansible-galaxy上早已经有人帮你写好脚本,你只需要一句话ansible-galaxy install 搞定那些烦人的重复性工作吧。

    2. 注意事项

    • 主控端Python版本需要2.6或以上
    • 被控端Python版本小于2.4需要安装python-simplejson
    • 被控端如开启SELinux需要安装libselinux-python
    • windows不能做为主控端

    3. 安装

    # 前置安装
    yum install python-devel -y
    # yum安装
    yum install ansible -y
    # pip安装
    pip install ansible
    #如果提示'module' object has no attribute 'HAVE_DECL_MPZ_POWM_SEC'
    pip install pycrypto-on-pypi
    

    4. 使用方法

    加入被控端

    # 免密钥方式[官方推荐]
    ssh-keygen -t rsa
    ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.181.16
    # 使用密钥方式
    echo '192.168.181.16 ansible_ssh_user=root ansible_ssh_pass=root123'>/etc/ansible/hosts
    

    检查被控端连通

    ansible all -m ping #检查所有连接
    ansible all -m ping -u lim #指定用户,检查所有连接
    ansible slave -i /etc/ansible/hosts -m ping #检查指定的主机连接,比如在192.168.181.16上面加入[slave]即可
    
    192.168.181.16 | success >> {
        "changed": false, 
        "ping": "pong"
    }
    

    开始练手

    ansible all -a "echo hello" #在被控端上执行命令并返回
    
    192.168.181.16 | success | rc=0 >>
    hello
    
    ansible all -m copy -a "src=/run.sh dest=/" #将服务端的run.sh拷贝至被控端的根目录下
    
    192.168.181.16 | success >> {
        "changed": true, 
        "checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709", 
        "dest": "/run.sh", 
        "gid": 0, 
        "group": "root", 
        "md5sum": "d41d8cd98f00b204e9800998ecf8427e", 
        "mode": "0644", 
        "owner": "root", 
        "secontext": "system_u:object_r:etc_runtime_t:s0", 
        "size": 0, 
        "src": "/root/.ansible/tmp/ansible-tmp-1426517500.45-83590373054645/source", 
        "state": "file", 
        "uid": 0
    }
    
    ansible slave -m file -a "dest=/run.sh mode=777 owner=root group=root" #更改被控端run.sh的权限
    
    192.168.181.16 | success >> {
        "changed": false, 
        "gid": 0, 
        "group": "root", 
        "mode": "0777", 
        "owner": "root", 
        "path": "/run.sh", 
        "secontext": "system_u:object_r:etc_runtime_t:s0", 
        "size": 0, 
        "state": "file", 
        "uid": 0
    }
    
    ansible slave -m script -a "/run.sh" #被控端执行控制端上的脚本
    
    
    192.168.181.16 | success >> {
        "changed": true, 
        "rc": 0, 
        "stderr": "", 
        "stdout": ""
    }
    
    ansible slave -m yum -a "name=vim state=latest" #在被控端机器上yum安装最新的vim
    
    192.168.181.16 | success >> {
        "changed": false, 
        "msg": "", 
        "rc": 0, 
        "results": [
            "All packages providing vim are up to date"
        ]
    }
    
    ansible slave -m service -a "name=iptables state=running" #启动被控端的iptables服务
    
    192.168.181.16 | success >> {
        "changed": true, 
        "name": "iptables", 
        "state": "started"
    }
    

    相关文章

      网友评论

          本文标题:Ansible学习笔记

          本文链接:https://www.haomeiwen.com/subject/mifvhttx.html