zoukankan      html  css  js  c++  java
  • Ansible自动化运维之介绍安装与简单使用

       参考:http://blog.51cto.com/191226139/2066936

       Ansible是什么

      Ansible 简单的说是一个配置管理系统(configuration management system)。你只需要可以使用 ssh 访问你的服务器或设备就行。它也不同于其他工具,因为它使用推送的方式,而不是像 puppet 等 那样使用拉取安装agent的方式。你可以将代码部署到任意数量的服务器上。

      

      Ansible能做什么

      ansible可以帮助我们完成一些批量任务,或者完成一些需要经常重复的工作。

      比如:同时在100台服务器上安装nginx服务,并在安装后启动它们。

      比如:将某个文件一次性拷贝到100台服务器上。

      比如:每当有新服务器加入工作环境时,你都要为新服务器部署某个服务,也就是说你需要经常重复的完成相同的工作。 这些场景中我们都可以使用到ansible。

      

      Ansible特性

     模块化:调用特定的模块,完成特定任务
     有Paramiko,PyYAML,Jinja2(模板语言)三个关键模块
     支持自定义模块
     基于Python语言实现
     部署简单,基于python和SSH(默认已安装),agentless
     安全,基于OpenSSH
     支持playbook编排任务
     幂等性:一个任务执行1遍和执行n遍效果一样,不因重复执行带来意外情况
     无需代理不依赖PKI(无需ssl)
     可使用任何编程语言写模块
     YAML格式,编排任务,支持丰富的数据结构
     较强大的多层解决方案
    

       

      Ansible架构

      Ansible工作原理

       

      Ansible主要组成部分功能说明

     PLAYBOOKS:
                任务剧本(任务集),编排定义Ansible任务集的配置文件,由Ansible顺序依次执行,通常是JSON格式的YML文件
     INVENTORY:
                Ansible管理主机的清单/etc/anaible/hosts
     MODULES:
                Ansible执行命令的功能模块,多数为内置的核心模块,也可自定义,ansible-doc –l 可查看模块
     PLUGINS:
                模块功能的补充,如连接类型插件、循环插件、变量插件、过滤插件等,该功能不常用
     API:
                供第三方程序调用的应用程序编程接口
     ANSIBLE:
                组合INVENTORY、 API、 MODULES、PLUGINS的绿框,可以理解为是ansible命令工具,其为核心执行工具
    

       注意事项

     执行ansible的主机一般称为主控端,中控,master或堡垒机
     主控端Python版本需要2.6或以上
     被控端Python版本小于2.4需要安装python-simplejson
     被控端如开启SELinux需要安装libselinux-python
     windows不能做为主控端
    

      安装Ansible

      以CentOS为例

      安装环境查看

      安装

    yum -y install ansible
    

       查看版本

      

      Ansible 功能详解

      配置文件

    配置文件或指令	描述
    /etc/ansible/ansible.cfg	主配置文件,配置ansible工作特性
    /etc/ansible/hosts	主机清单
    /etc/ansible/roles/	存放角色的目录
    /usr/bin/ansible	主程序,临时命令执行工具
    /usr/bin/ansible-doc	查看配置文档,模块功能查看工具
    /usr/bin/ansible-galaxy	下载/上传优秀代码或Roles模块的官网平台
    /usr/bin/ansible-playbook	定制自动化任务,编排剧本工具
    /usr/bin/ansible-pull	远程执行命令的工具
    /usr/bin/ansible-vault	文件加密工具
    /usr/bin/ansible-console	基于Console界面与用户交互的执行工具
    

       Ansible 配置文件

    Ansible 配置文件/etc/ansible/ansible.cfg (一般保持默认)
     [defaults]
     #inventory = /etc/ansible/hosts # 主机列表配置文件
     #library = /usr/share/my_modules/ # 库文件存放目录
     #remote_tmp = $HOME/.ansible/tmp #临时py命令文件存放在远程主机目录
     #local_tmp = $HOME/.ansible/tmp # 本机的临时命令执行目录
     #forks = 5 # 默认并发数
     #sudo_user = root # 默认sudo 用户
     #ask_sudo_pass = True #每次执行ansible命令是否询问ssh密码
     #ask_pass = True      #连接时提示输入ssh密码
     #remote_port = 22     #远程主机的默认端口,生产中这个端口应该会不同
     #log_path = /var/log/ansible.log #日志
     #host_key_checking = False # 检查对应服务器的host_key,建议取消注释。也就是不会弹出
    

       

      试验规划,两台主机192.168.56.11作为主控端,192.168.56.12被控端

      修改配置文件/etc/ansible/hosts

    [webservers]
    192.168.56.11
    192.168.56.12
    

       webserves代表一个组,下面有两台主机

      执行命令

    ansible 192.168.56.11 -m ping
    

       执行失败

      非常抱歉哦,竟然是失败的。为什么呢?Ansible是基于ssh进行工作的,那么当ssh一台远程主要的时候,是不是需要输入密码呢?可是这一条指令并没有提示输入口令呢

      加参数-k输入密码

      设置免密码登录 参考https://www.cnblogs.com/minseo/p/10043128.html

      就不会提示需要输入密码了

       Ansible常用命令语法

    ansible <host-pattern> [-m module_name] [options]
    指令 匹配规则的主机清单 -m 模块名 选项
    
    --version 显示版本
    -a 模块参数(如果有)
    -m module 指定模块,默认为command
    -v 详细过程 –vv -vvv更详细
    --list-hosts 显示主机列表,可简写--list
    -k, --ask-pass 提示连接密码,默认Key验证
    -K,--ask-become-pass 提示使用sudo密码
    -C, --check 检查,并不执行
    -T, --timeout=TIMEOUT 执行命令的超时时间,默认10s
    -u, --user=REMOTE_USER 执行远程执行的用户
    -U, SUDO_USER, --sudo-user 指定sudu用户
    -b, --become 代替旧版的sudo 切换
    
    ansible-doc: 显示模块帮助
    ansible-doc [options] [module...]
    
    -a 显示所有模块的文档
    -l, --list 列出可用模块
    -s, --snippet 显示指定模块的简要说明
    
    例子:#ansible-doc ping
    
    由于ansible的模块有1378个(2.4.2.0),并且一直在持续更新。因此,这个指令必须要掌握的。
    #ansible-doc -l |wc -l
    1378
    

      Ansible 的命令执行过程以 ansible all -m command -a 'ls -l /' -vvv 这条命令为例,根据显示的信息时行解读

    1. 加载自己的配置文件,默认/etc/ansible/ansible.cfg
        Using /etc/ansible/ansible.cfg as config file
    
    2.匹配主机清单
        Parsed /etc/ansible/hosts inventory source with ini plugin
    
    3. 加载指令对应的模块文件,如command,生成.py的文件到本机的临时目录,这个目录就是在/etc/ansible/ansible.cfg定义的
        Using module file /usr/lib/python2.7/site-packages/ansible/modules/commands/command.py
        PUT /tmp/tmp4JvsLH TO /root/.ansible/tmp/ansible-tmp-1517301292.6-155771303493861/command.py
    
    4. 通过ansible将模块或命令生成对应的临时py文件,并将该文件传输至远程服务器的对应执行用户$HOME/.ansible/tmp/ansible-tmp-数字/XXX.PY文件,
        这个目录就是在/etc/ansible/ansible.cfg定义的
        ( umask 77 && mkdir -p "` echo /root/.ansible/tmp/ansible-tmp-1517301292.6-155771303493861 `" ....)
        sftp> put /tmp/tmp4JvsLH /root/.ansible/tmp/ansible-tmp-1517301292.6-155771303493861/command.py
    '
    
    5. 给文件+x 权限
        'chmod u+x /root/.ansible/tmp/ansible-tmp-1517301292.6-155771303493861/ /root/.ansible/tmp/ansible-tmp-1517301292.6-155771303493861/command.py && sleep 0'
    
    6. 执行并返回结果
        '/usr/bin/python /root/.ansible/tmp/ansible-tmp-1517301292.6-155771303493861/command.py;
    
    7. 删除临时py文件,sleep 0退出
        rm -rf "/root/.ansible/tmp/ansible-tmp-1517301292.6-155771303493861/" > /dev/null 2>&1 && sleep 0
    
    8.断开远程主机连接
        'Shared connection to 7-db-3.hunk.tech closed.
    ')
    

       执行结果状态

     绿色:执行成功并且不需要做改变的操作
    
     ×××:执行成功并且对目标主机做变更
    
     红色:执行失败
    

      

  • 相关阅读:
    谷歌浏览器本地调试时调用服务跨域
    SVN提交时忽略不必提交的文件夹和文件,如node_modules
    热点链接实现不规则菜单
    easyui分页控件的应用
    Filter过滤器的应用
    SVG绘图学习总结
    VS2010无法调试页面问题
    java学习
    webservice配置
    jQuery
  • 原文地址:https://www.cnblogs.com/minseo/p/10130161.html
Copyright © 2011-2022 走看看