Ansible运维自动化html
目录python
1、简介ios
2、特性优势程序员
一、特性web
二、优势shell
3、ansible工做过程编程
4、Ansible应用场景vim
一、使用场景centos
二、命令执行api
三、Ansible企业应用场景分析
(1)Dev开发环境
(2)测试环境
(3)发布环境
(4)生产环境
(5)灰度环境
5、ansible安装部署
一、ansible安装
二、目录结构
三、添加认证
四、ansible工做原理
五、ansible主要组成部分
(1)Ansible playbooks
(2)INVENTORY
(3)Modeules
(4)Plugins
(5)API
ANSIBLE.
六、Ansible组件调用关系
七、Ansible命令集
(1)命令格式:
(2)命令参数
示例一、测试
示例二、测试以wang用户执行命令
1、简介
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
2、特性优势
一、特性
no agents :不须要在被管控主机上安装任何客户端
no server :无服务器端,使用时直接运行命令便可
modules in any languages :基于模块工具,可以使用任意语言开发模块
yaml,not code :使用yaml语言定制剧本playbook
ssh by default:基于ssh工做
strong multi-tier solution:可实现多级指挥。
二、优势
轻量级,不须要安装客户端,更新时,只须要在操做机上进行一次更新便可
批量任务执行能够写成脚本,并且不用分发到远程就能够执行
使用python编写的,维护更简单
幂等性 幂等性不会重复执行相同的指令。例如不会重复安装软件
3、ansible工做过程
ansible默认是经过SSH通道来管理的,也就是它所说的免客户端方式管理
4、Ansible应用场景
一、使用场景
文件传输
二、命令执行
应用部署
配置管理
任务流编排
三、Ansible企业应用场景分析
一般状况下在企业中运维功能的总体流程。
(1)Dev开发环境
使用者:程序员
功能:程序员开发软件测试BUG的环境
管理者:千万不能是运维,必定是要程序员自已
(2)测试环境
使用者:qa测试工程师
功能:测试通过Dev环境测试经过的软件的功能
管理者:运维
备注:测试环境每每有多套(测试环境知足测试功能便可,不宜过多)
(1)测试同窗但愿测试环境有多套
公司的产品多产品线并发,即多个版本,意味着多个版本同步测试
(2)一般状况下,测试环境有多少套和产品线数量保持同样
(3)发布环境(代码发布机,有些公司堡垒机(安全屏障))
使用者:运维
功能:发布代码至生产环境
管理者:运维(有经验的)
发布机:每每须要有2台(主备)
(4)生产环境
使用者:运维,只能是运维(极少数状况下会开放权限给核心开发人员,极少数公司将该环境权限彻底开放给开发人员并让开发人员维护)
功能:对用户提供公司产品的服务
管理者:只能是运维
生产环境服务器数量:通常比较多,且应用很是重要。每每须要自动工具协助部署配置应用。机器数量具体和公司业务规模相关。
(5)灰度环境(生产环境的一部分)
使用者:运维
功能:在全量发布代码前将代码的功能面向少许精准用户发布的环境
案例:
你们手头100台服务器,先发布其中的10台服务器,这10台服务器就是灰度服务器。
管理者:只能是运维
为何灰度环境:每每该版本功能变动较大,为保险起见特地先让一部分用户优化体验该功能,待这部分用户使用没有重大问题的时候,再全量发布至全部服务器。
5、ansible安装部署
一、ansible安装
Yum install ansible –y
Pip install ansible
二、目录结构
配置文件目录:
/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/
三、添加认证
ssh-keygen -t rsa
ssh-copy-id -i .ssh/id_rsa.pub root@172.16.250.90
[root@centos7_1 ~]# ansible 172.16.250.90 -m ping
16.252.18 | SUCCESS => {
"changed":false,
"ping": "pong"
四、ansible工做原理
五、ansible主要组成部分
(1)Ansibleplaybooks
任务剧本(任务集),编排定义ansible任务集的配置文件,有ansible顺序依次执行,一般是JSON
格式的YML文件
(2)INVENTORY
ansible管理主机的清单,能够定义单独主机,也能够定义主机组。
(3)Modeules
ansible执行命令的功能模块,多数为内置的核心模块,也可自定义。Ansible2.2版本提供模块有500多
个,下面应用到核心模块有synchronize(备份)、copy(恢复)、shell(nas获取)、cron(定时任务)、
user(密码修改)、zypper(软件包管理rpm)、setup(获取facts);扩展模块有UPStartItem(启动项管
理)、UPInstall(软件包管理)、UPUPload(文件上传)
(4)Plugins
模块功能的补充,如链接类型插件、循环插件、变量插件、过滤插件等,该功能不经常使用。
(5)API
供第三方程序调用的应用程序编程接口
ANSIBLE
该部分图中表示不明显,组合INVENTORY、API、MODULES、PLUGINS的绿框你们能够理解
为是ansible命令工具,其为核心执行工具;
六、Ansible组件调用关系
使用者使用Ansible或Ansible-playbook(会额外读取Playbook文件)时,在服务器终端输入Ansible的Ad-
Hoc命令集或Playbook后,Ansible会遵循预先编排的规则将Playbooks逐条拆解为Play,再将Play组织成
Ansible可识别的任务(Task),随后调用任务涉及的全部模块(Module)和插件(Plugin),根据
Inventory中定义的主机列表经过SSH(Linux默认)将任务集以临时文件或命令的形式传输到远程客户
端执行并返回执行结果,若是是临时文件则执行完毕后自动删除。
七、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
示例一、测试
[root@centos7_1 ~]#ansible web -m ping 172.16.252.18 | SUCCESS => { "changed":false, "ping":"pong" } [root@centos7_1 ~]#
示例二、测试以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 wang@172.16.250.90 #将密钥传输到对方wang用户 wang@172.16.250.90's password: Now try logging into the machine, with "ssh 'wang@172.16.250.90'",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 ~]#