天天看点

Ansible 基础

Ansible运维自动化

    目录

  一、简介

  二、特性优点

   1、特性

   2、优点

  三、ansible工作过程

  四、Ansible应用场景

   1、使用场景

   2、命令执行

   3、Ansible企业应用场景分析

    (1)Dev开发环境

    (2)测试环境

    (3)发布环境

    (4)生产环境

    (5)灰度环境

 五、ansible安装部署

   1、ansible安装

   2、目录结构

   3、添加认证

   4、ansible工作原理

   5、ansible主要组成部分

    (1)Ansible playbooks

    (2)INVENTORY

    (3)Modeules

    (4)Plugins

    (5)API

    ANSIBLE.

   6、Ansible组件调用关系

   7、Ansible命令集

    (1)命令格式:

    (2)命令参数

    示例1、测试

    示例2、测试以wang用户执行命令

一、简介

Ansible 是一个自动化运维工具,12年Mchael DeHanan开发。基于python开发,集合目前主流运维工具优点,实现批量系统配置、程序部署、命令执行等功能。15年ansible被red hat 收购.想知道为什么被收购可以去看看这篇文章http://www.infoq.com/cn/news/2015/10/Red-Hat-DevOps。关于ansblie更多的介绍各位可以去官网看看http://docs.ansible.com/ansible/index.html

二、特性优点

    1、特性

    no agents :不需要在被管控主机上安装任何客户端

    no server :无服务器端,使用时直接运行命令即可

    modules in any languages :基于模块工具,可使用任意语言开发模块

    yaml,not code :使用yaml语言定制剧本playbook

    ssh by default:基于ssh工作

    strong multi-tier solution:可实现多级指挥。

    2、优点

    轻量级,不需要安装客户端,更新时,只需要在操作机上进行一次更新即可

    批量任务执行可以写成脚本,而且不用分发到远程就可以执行

    使用python编写的,维护更简单

     幂等性   幂等性不会重复执行相同的指令。例如不会重复安装软件 

三、ansible工作过程

    ansible默认是通过SSH通道来管理的,也就是它所说的免客户端方式管理

Ansible 基础

四、Ansible应用场景

1、使用场景

           文件传输

2、命令执行

           应用部署

           配置管理

           任务流编排

3、Ansible企业应用场景分析

         通常情况下在企业中运维功能的整体流程。

Ansible 基础

(1)Dev开发环境

         使用者:程序员

         功能:程序员开发软件测试BUG的环境

         管理者:千万不能是运维,一定是要程序员自已

(2)测试环境

         使用者:qa测试工程师

         功能:测试经过Dev环境测试通过的软件的功能

         管理者:运维

         备注:测试环境往往有多套(测试环境满足测试功能即可,不宜过多)

                   (1)测试同学希望测试环境有多套

                            公司的产品多产品线并发,即多个版本,意味着多个版本同步测试

                   (2)通常情况下,测试环境有多少套和产品线数量保持一样

(3)发布环境(代码发布机,有些公司堡垒机(安全屏障))

         使用者:运维

         功能:发布代码至生产环境

         管理者:运维(有经验的)

         发布机:往往需要有2台(主备)

(4)生产环境

         使用者:运维,只能是运维(极少数情况下会开放权限给核心开发人员,极少数公司将该环境权限完全开放给开发人员并让开发人员维护)

         功能:对用户提供公司产品的服务

         管理者:只能是运维

         生产环境服务器数量:一般比较多,且应用非常重要。往往需要自动工具协助部署配置应用。机器数量具体和公司业务规模相关。

(5)灰度环境(生产环境的一部分)

         功能:在全量发布代码前将代码的功能面向少量精准用户发布的环境

                   案例:

                   大家手头100台服务器,先发布其中的10台服务器,这10台服务器就是灰度服务器。

         为什么灰度环境:往往该版本功能变更较大,为保险起见特意先让一部分用户优化体验该功能,待这部分用户使用没有重大问题的时候,再全量发布至所有服务器。

五、ansible安装部署

1、ansible安装

Yum install ansible  –y

Pip install ansible

2、目录结构

    配置文件目录:

    /etc/ansible/

    配置文件

    ansible.cfg:主要设置一些ansible初始化信息,比如日志存放路径、模块、插件等配置信息。

    Hosts:机器清单,进行分组管理

    执行文件目录:

    /usr/bin/

    Lib库依赖目录:

    /usr/lib/pythonX.X/site-packages/ansible/

    Help文档目录:

    /usr/share/doc/ansible-X.X.X/

    Man文档目录:

    /usr/share/man/man1/

Ansible 基础

3、添加认证

ssh-keygen -t rsa

ssh-copy-id -i .ssh/id_rsa.pub [email protected]

[root@centos7_1 ~]# ansible 172.16.250.90 -m ping

  1. 16.252.18 | SUCCESS => {

    "changed":false,

   "ping": "pong"

4、ansible工作原理

Ansible 基础

 5、ansible主要组成部分

    (1)Ansibleplaybooks

    任务剧本(任务集),编排定义ansible任务集的配置文件,有ansible顺序依次执行,通常是JSON

        格式的YML文件

    ansible管理主机的清单,可以定义单独主机,也可以定义主机组。

    ansible执行命令的功能模块,多数为内置的核心模块,也可自定义。Ansible2.2版本提供模块有500多

    个,下面应用到核心模块有synchronize(备份)、copy(恢复)、shell(nas获取)、cron(定时任务)、

    user(密码修改)、zypper(软件包管理rpm)、setup(获取facts);扩展模块有UPStartItem(启动项管

    理)、UPInstall(软件包管理)、UPUPload(文件上传)

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

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

                 ANSIBLE

                该部分图中表示不明显,组合INVENTORY、API、MODULES、PLUGINS的绿框大家可以理解

    为是ansible命令工具,其为核心执行工具;

6、Ansible组件调用关系

Ansible 基础

        使用者使用Ansible或Ansible-playbook(会额外读取Playbook文件)时,在服务器终端输入Ansible的Ad-

    Hoc命令集或Playbook后,Ansible会遵循预先编排的规则将Playbooks逐条拆解为Play,再将Play组织成

    Ansible可识别的任务(Task),随后调用任务涉及的所有模块(Module)和插件(Plugin),根据

    Inventory中定义的主机列表通过SSH(Linux默认)将任务集以临时文件或命令的形式传输到远程客户

    端执行并返回执行结果,如果是临时文件则执行完毕后自动删除。

7、Ansible命令集

    /usr/bin/ansible   # Ansibe AD-Hoc 临时命令执行工具,常用于临时命令的执行

    /usr/bin/ansible-doc  # Ansible 模块功能查看工具

    /usr/bin/ansible-galaxy # 下载/上传优秀代码或Roles模块的官网平台,基于网络的

    /usr/bin/ansible-playbook # Ansible 定制自动化的任务集编排工具

    /usr/bin/ansible-pull # Ansible远程执行命令的工具(使用较少,海量机器时使用,对运维的架构能力要求较高)

    /usr/bin/ansible-vault # Ansible 文件加密工具

    /usr/bin/ansible-console  # Ansible基于Linux Consoble界面可与用户交互的命令执行工具

(1)命令格式:

ansible<host-pattern> [options]

(2)命令参数

-a MODULE_ARGS, --args=MODULE_ARGS

            module arguments  # 指定Ansible调用的模块

 --ask-become-pass   ask forprivilege escalation password # Ansible su切换用户的时候使用该参数输入密码

  -k,--ask-pass        ask for SSHpassword  # 以密码认证

 --ask-su-pass         ask for supassword (deprecated, use become) # su的时候使用该参数

  -K,--ask-sudo-pass   ask for sudo password(deprecated, use become) # sudo的时候

 --ask-vault-pass      ask forvault password # ansible-valut 加密文件

  -BSECONDS, --background=SECONDS  # 后台等待X秒

 --become-user=BECOME_USER

                        run operations as thisuser (default=None)  # su到哪个用户

  -C,--check           don't make any changes;instead, try to predict some

                        of the changes that mayoccur  # 不执行命令只做命令执行检查

  -c CONNECTION, --connection=CONNECTION

                        connection type to use(default=smart)

  -eEXTRA_VARS, --extra-vars=EXTRA_VARS  # 调用外部变量

                        set additionalvariables as key=value or YAML/JSON

  -fFORKS, --forks=FORKS  # Ansible一次命令执行并发的线程数

  -h,--help            show this help messageand exit

  -iINVENTORY, --inventory-file=INVENTORY  #Ansible调用的Hosts文件,默认/etc/ansible/hosts

                        specify inventory hostfile

                       (default=/etc/ansible/hosts)

  -lSUBSET, --limit=SUBSET  # 限定主机列表中的某台机器执行

                        further limit selectedhosts to an additional pattern

 --list-hosts          outputs alist of matching hosts; does not execute

                        anything else  ## 列出主机列表中的主机

  -mMODULE_NAME, --module-name=MODULE_NAME  #Ansible 调用的执行模块

  -M MODULE_PATH, --module-path=MODULE_PATH  #调用的模块路径

  -S,--su              run operations with su(deprecated, use become) #使用su和become结合使用

  -RSU_USER, --su-user=SU_USER  # su的话切换至哪个用户

  -s,--sudo            run operations withsudo (nopasswd) (deprecated, use

                        become)  # 执行sudo命令

  -USUDO_USER, --sudo-user=SUDO_USER  # sudo

  -TTIMEOUT, --timeout=TIMEOUT  # 执行命令的超时时间

 --vault-password-file=VAULT_PASSWORD_FILE  ## ansible-vault加密的密码文件

  -v,--verbose         verbose mode (-vvv formore, -vvvv to enable

                        connectiondebugging)  # 显示详细信息 -vvvv

 --version             showprogram's version number and exit ## 显示版本号

修改配置文件 指定目标主机

       [root@centos7_1 ~]# vim/etc/ansible/hosts

       [web]

       172.16.252.18

示例1、测试     

[root@centos7_1 ~]#ansible web -m ping 
172.16.252.18 | SUCCESS => {
    "changed":false, 
    "ping":"pong"
}
[root@centos7_1 ~]#      

示例2、测试以wang用户执行命令

 [root@localhost~]# ansible web -m ping -u wang  #很明显下面报错了。
172.16.250.90 | UNREACHABLE! => {
    "changed":false, 
    "msg":"Failed to connect to the host via ssh: Permission denied
    (publickey,gssapi-keyex,gssapi-with-mic,password).\r\n", 
    "unreachable":true
}
[root@localhost ~]# ssh-copy-id -i .ssh/id_rsa [email protected] 
 #将密钥传输到对方wang用户
[email protected]'s password: 
Now try logging into the machine, with "ssh '[email protected]'",and check in:
  .ssh/authorized_keys
 
to make sure we haven't added extra keys that you weren't expecting.
[root@localhost ~]# ansible web -m ping -u wang  #再次执行命令成功 
172.16.253.252 | SUCCESS => {                              
    "changed":false, 
    "ping":"pong"
}
[root@localhost ~]#      

继续阅读