• 自动化运维工具介绍

    Ansible:Python,agentless,中小型应用环境

    Saltstack:Python,一般需部署agent,执行效率更高

    Puppet:ruby,功能强大,配置复杂,适合于大型环境使用

    Fabric:Python,agentless

    Chef:ruby,国内使用少

    同类自动化工具GitHub关注程序(2016-07-10)

    自动化运维工具Ansible介绍_第1张图片

  • Ansible简介

    介绍

        创始人:Michael DeHaan(Cobbler与Func的作者)

        2012-03-09 发布0.0.1版 ---> 2015-10-17  Redhat宣布收购

    特性

        模块化

        有Paramiko,PyYAML,Jinja2(模板语言)三个关键模块

        支持自定义模块

        基于Python语言开发

        部署简单,基于Python和SSH,agentless

        安全,基于OpenSSH

        支持playbook编排任务

        具有幂等性:一个任务执行1遍和执行n遍效果一样,不因重复执行带来意外情况

        无需代理不依赖PKI(无需ssl)

        可使用任何编程语言写模块

        YAML格式,编排任务,支持丰富的数据结构

        较强大的多层解决方案

    Ansible架构

        自动化运维工具Ansible介绍_第2张图片

    Ansible主要组成部分

        ANSIBLE PLAYBOOKS:任务剧本(任务集),编排定义Ansible任务集的配置文件,由Ansible顺序依次执行,通常是JSON格式的YML文件

        INVENTORY:Ansible管理主机的清单/etc/ansible/hosts

        MODULES:Ansible执行命令的功能模块,多数为内置的核心模块,也可自定义

        PLUGINS:模块功能的补充,如连接类型插件、循环插件、变量插件、过滤插件等,该功能不常用

        API:供第三方程序调用的应用程序编程接口

        ANSIBLE:组合INVENTORY、API、MODULES、PLUGINS的绿框,可以理解为是ansilbe命令工具,其为核心执行工具

        Ansible命令执行来源:

            USER:普通用户,即SYSTEM ADMINISTRATOR

            CMDB(资产管理系统)API调用

            PUBLIC/PRIVATE CLOUD API调用 

            USER --> Ansible playbook --> Ansible

        利用ansible实现管理的方式:

            Ad-Hoc即ansible命令,主要用于临时命令使用场景

            Ansible-playbook主要用于长期规划好的,大型项目的场景,需要有前提的规划

        Ansible-playbook(剧本)执行过程:

            将已有编排好的任务集写入Ansible-Playbook

            通过ansible-playbook命令分拆任务集至逐条ansible命令,按预定规则逐条执行

        Ansible主要操作对象:

            HOSTS主机

            NETWORKING网络设备

        注意事项

            执行ansible的主机一般称为主控端,中控,master或堡垒机

            主控端Python版本需要2.6或以上

            被控端Python版本小于2.4需要安装python-simplejson

            被控端如开启SElinux需要安装libselinx-python

            windows不能做为主控端

    安装Ansible

        rpm包安装:EPEL源

~]#yum -y install epel-release
~]#yum install ansible

        编译安装

~]#yum -y install python-jinja2 PyYAML python-paramiko python-babel python-crypto
~]#tar xf ansible-1.5.4.tar.gz
~]#cd ansible-1.5.4
~]#python setup.py build
~]#python setup.py install
~]#mkdir /etc/ansible
~]#cp -r examples/* /etc/ansible

        Git方式

~]#git clone git://github.com/ansible/ansible.git --recursive
~]#cd ./ansible
~]#source ./hacking/env-setup

        pip安装:pip是安装Python包的管理器,类似yum

~]#yum install python-pip python-devel
~]#yum install gcc glibc-devel zibl-devel rpm-bulid openssl-devel
~]#pip install --upgrade pip
~]#pip install ansible --upgrade

        确认安装

~]#ansible --version

    相关文件

         配置文件

            /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界面与用户交互的执行工具

    主机清单inventory

        Inventory主机清单

            ansible的主要功用在于批量操作,为了便捷地使用其中的部分主机,可以在invertory file中将其分组命名

            默认的inventory file为/etc/ansible/hosts

            inventory file可以有多个,且也可以通过Dynamic Inventory来动态生成

        /etc/ansible/hosts文件格式

            inventory文件遵循INI文件风格,中括号的字符为组名。可以将同一个主机同时归并到多个不同的组中;此外,当如若目标主机使用了非默认的SSH端口,还可以在主机名称之后使用冒号加端口号来标明

      自动化运维工具Ansible介绍_第3张图片

            如果主机名称遵循相似的命令模式,还可以使用列表的方式标识各主机

                例:                  

                        [websrvs]

                        www[01:100].example.com

                        [dbsrvs]

                        db-[a:f].example.com

    Ansible的Host-pattern        

        ansible的Host-pattern

            匹配主机的列表

                All :表示所有Inventory中的所有主机

            ansible all –m ping

                * :通配符

            ansible “*” -m ping

            ansible 192.168.1.* -m ping

            ansible “*srvs” -m ping

            或关系

                ansible “websrvs:appsrvs” -m ping

                ansible “192.168.1.10:192.168.1.20” -m ping

            逻辑与

                ansible “websrvs:&dbsrvs” –m ping

            在websrvs组并且在dbsrvs组中的主机

            逻辑非

                ansible ‘websrvs:!dbsrvs’ –m ping

            在websrvs组,但不在dbsrvs组中的主机

            综合逻辑

                ansible ‘websrvs:dbsrvs:&appsrvs:!ftpsrvs’ –m ping

            正则表达式

                ansible “websrvs:&dbsrvs” –m ping

                ansible “~(web|db).*\.liuyutang\.com” –m ping

    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

        #remote_port = 22

        #host_key_checking = False # 检查对应服务器的host_key,建议取消注释

        #log_path=/var/log/ansible.log #日志文件

    Ansible系列命令       

        Ansible系列命令

            ansible ansible-doc ansible-playbook ansible-vault

            ansible-console ansible-galaxy ansible-pull

        ansible-doc: 显示模块帮助

            ansible-doc [options] [module...]

                -a 显示所有模块的文档

                -l, --list 列出可用模块

                -s, --snippet 显示指定模块的playbook片段

            示例:

                ansible-doc –l 列出所有模块

                ansible-doc ping 查看指定模块帮助用法

                ansible-doc –s ping 查看指定模块帮助用法

    Ansible通过ssh实现配置管理、应用部署、任务执行等功能,建议配置ansible端能基于密钥认证的方式联系各被管理节点 

    ansible [-m module_name] [-a args]

        --version 显示版本

        -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 执行远程执行的用户

        -b, --become 代替旧版的sudo 切换