《Ansible 和企业级 Ansible 应用难点解读(附Ansible 架构与工作原理 资料).docx》由会员分享,可在线阅读,更多相关《Ansible 和企业级 Ansible 应用难点解读(附Ansible 架构与工作原理 资料).docx(8页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、基于企业的运维环境以及运维规模,很多企业使用了 Ansible开源工具作为自动化平台 的基础,解决了传统运维效率低下的问题。基于Ansible开源工具的自动化运维只是自动化 运维开始的第一步,它解决了运维效率的问题,随之带来的运维安全管理,流程管理,脚本 管理,数据收集和展示等等问题都是需要面对和逐一解决的,于是有了 Ansible企业级产品 的出现。Ansible企业级产品在Ansible开源工具的基础上做了一层封装,实现了权限管理及 统计展示的功能,让自动化运维更加成熟和运维团队能更加把控运维风险。以下是针对 Ansible和企业级Ansible应用中的具体难点,供大家参考。1、企业自动化
2、运维发展中的痛点有哪些?在企业级运维发展的路上,痛点有很多,这些都是不可避免的,对于自动化运维发展上 会逐步出现以下几个痛点:1、企业运维效率太低,迫切需要自动化手段提升效率2、自动化工具是用起来了,如何推广自动化工具,提高整体的运维效率3、自动化工具普及了,越来越多的人都在这个自动化平台上做变更,怎么把控人为误 操作风险4、运维场景的进一步扩大,比如从系统级别的自动化扩展到虚拟化层面甚至是网络层 面的自动化,如何更进一步的把控运维风险,让不同的人做不同的事5、自动化平台上怎么展示,怎么与其他控制平台比如CMDB等做集成展示6、在自动化平台建立之后,如何将自动化像智能化发展这几个问题都是我本人
3、在实践中逐步感受至U的,从手工人肉运维到Ansible自动化运维, 再到Ansible tower平台化运维,这些痛点都在踩坑的路上逐一解决。使用Ansible来解决自动化的问题,使用Ansible tower来解决管理自动化的问题。就像常说“家家都有一本难念的经”,每个企业的业务流程不同,对IT运维管理的要求 不同,因此痛点也不同。我总结一下如下几个方面可以参考:1 .业务发展,导致运维对象的数量猛增,如达到10000台,甚至更多,这种情况,没有 理由,上自动化;2 .部分企业对安全的要比较高,希望通过运维自动化工具,标准运维流程,如删库等 等;3 .还有的情况,就是想提升效率,让运维同学不
4、要这么苦逼,不用三更半夜的爬起来, 这个时候自动化工具能够发挥一定的作用;4,还有的出发点,是想改善IT服务满意度以及用户体验,增加自动化的工具;5 .还有的是想提升IT运营的效益,如减少计算资源的使用,通过自动化工具可以实现;6 .也有不差钱,就是要上的。2、企业级的Ansible产品具体是指什么?【问题描述】企业级的Ansible具体是指使用AnsibleTower还是指?基于Ansible建立 自动化原子平台,是基于Restful开发框架所建立的自动化产品么?如果只是封装,建立API 资源,是否可以由运维人员来操刀。具体使用哪些web框架来建立呢?一般说企业级Ansible指的是Ansi
5、ble tower工具,Ansible tower是在Ansible的基础上 做了一层封装,集成了 web UI展示、用户权限管、RESTFUL API,可审计、定时任务、工 作流等一系列功能。Ansible tower也是为了让用户更好的使用Ansible自动化工具,不需要 学习复杂的Ansible指令。企业级的 Ansible 特指 Ansible tower,提供 RESTFUL API 只是 Ansible tower 的一个部 分功能,在后台还有诸如任务分发,消息缓存,数据库记录等等功能架构。当然企业运维人员也可以基于Ansible tower的架构自主的开发适合自己的自动化平台。3
6、、Ansible的管理能力?【问题描述】Ansible的节点管理能力范围一般是多少,一个Ansible Server下一般纳管 多少个client能够保证性能和运行流畅?Ansible是基于SSH协议实现与被管通信的,Ansible的上限取决于服务器的SSH连接 上限,一般几千台都没有问题。况且Ansible是没有守护进程实时与被管节点通信的,几乎不可能在同一时间所有节点 都需要通过Ansible做比较繁忙的工作。Ansible的运行是否顺畅也取决于你Ansible服务器的性能如何,还有就是平常使用的 playbook的逻辑是怎样的,有些任务比较消耗CPU,有些任务比较消耗内存,还有一些任 务
7、比较消耗网络带宽,正常使用Ansible的话上千台没问题。4、现在商用的容器化平台都提供了很多自动化的能力,这些能力如何与Ansible进行 结合?容器平台本身集成自动构建等一些自动化,它更侧重于平台自身。Ansible的使用可以 在容器平台自身的基础上,对容器内部以及应用等做一些平台以外的自动化工作。同时如果 您有CMP (云管)平台做云上层管理,这时候云管中应用商店和自服务等业务封装就可以 通过调用Ansible作为执行实体进行技术打通。5、企业级自动化运维平台是否需要基于自动化运维工具上进行二次开发?厂商平台是产品方式开发,如果想适用于大型数据中心都需要进行定制开发,可更加 ansilb
8、e的api接口进行二次开发,或者通过tower的api进行开发,cli也可封装成rest的api 进行接口开发。平台建设的初期会有基础的功能存在,但随着自动化规模扩大,场景的增多,就需要进 行功能扩展,这时候的定制要求商业软件提供二次开发的能力,或者API或者代码扩展。 多数的工作在商业软件的二次开发上,对引用Ansible而言比较简单,可以调用Ansible tower 的API或者cli方式进行封装。二次开发基本都是自动化平台功能扩展和完善的过程,需要扩展时如果能借助Ansible 来实现,功能会变得落地更加快速。6、企业自动化运维中,脚本统一管理的好处并且有哪些好脚本管理策略?playb
9、ook = PB1 . Ansible的playbook需要进行统一管理,以提高安全性和可用性,这些可以放到git 中,以代码的形式进行管理2 .对于批量脚本统一维护和执行需要更高的要求,比如Ansible tower他能提供更多管 理 Ansible playbook 的方法。1) PB的执行过程记录2) PB的执行记录追溯3)多PB的集成作业流4) PB的API提供,供外部调用5)执行PB的人员权限设置等等这些功能对于企业在生产环境下安全使用Ansible是必不可少的1 .脚本区分为查询功能和修改功能2 .脚本版本需要进行管理3 ,脚本权限需要管理4 .脚本审核流程5 .脚本危险操作命令提
10、示6 .执行历史完整保留7、Ansible对运维人员知识技能的要求有哪些?【问题描述】要安全掌握Ansible,对运给人员的知识能力有哪些要求,需要学习除传 统设备运行之外的哪些方面的知识?Ansible的使用过程即是playbook的编写过程,语言为yaml,相对较为简单。但是编写 格式较为严格,建议使用专门的工具进行playbook的编写,提高编写效率。多数情况卜playbook调用的module在Ansible社区中的core module中已经提供,极端 情况下需要手动编写客户自定义module,这个需要掌握pythono掌握了 yaml语言即可使用Ansible,掌握了 python
11、可以定制Ansible实现特殊自动化需 求。简单学习一下yaml语法,jinja2语法,能看的懂python代码用于分析问题就行如果熟练掌握python的话上面的都不是问题,Ansible的一切都可以通过python来解释。8、Ansible是否适用金融业应用变更?【问题描述】银行系统数量多,基础软硬件环境千差万别,应用架构、开发规范更是风 格迥异,日常变更量巨大,变更操作量大且运维价值低还存在误操作风险。请问针对纷繁复 杂的应用变更,Ansible是否有比较成熟的实践方案,如有,实践的大致路径是怎样的?应用发布在银行业务系统中要求最为频繁。实现业务发布需要对每个系统进行一次发布 流程的梳理。
12、定义好标准。如文件压缩格式,存放的路径规范等。耍求开发团队或者外包商 遵循这个规范,之后定义好发布流程,既可以实现后续的复用。实现技术路径为四层架构:展示操作层-流程层,执行层)物理层1.展示操作层为发布流程的图形操作层,它应该具备。代码编写的能力,使用应该是 拖拉的方式,更改参数即可,不需要有代码的更改,每次发布通过更改参数即可实现,参数 对应底层Ansible playbook中预留的参数。2流程层应该讲发布的众多复杂过程集成起来,比如上传文件-解压文件-停止服务 -停止数据库-应用升级-启动数据库-启动服务-检查状态-失败回滚等服务集成链 接起来。3 .执行层负责将流程中的每个子在目标物
13、理层设备上执行起来,通过Ansible调用提 前以参数形式定义的playbooko4 .物理层为最终的目标设备,以IP为单位的节点。金融行业的变更主要考验的是运维人员的作业编排能力,Ansible只是一个自动化工具, 核心还是在playbook的编排上。不过从我的个人经验来说,形成自动化的前提是标准化,只有做好标准化才能谈自动化。 依靠自动化完成金融变更还是得从根本做起。9、Ansible系统损坏,对被管理系统有什么影响?【问题描述】用Ansible管理完,以后万一 Ansible服务器坏了,对被管理的系统有什 么影响?还需要在被管理系统上做什么修改?Ansible没有任何守护进程类服务,An
14、sible的架构可以分为Ansible的controll node和 managed host,我们在Ansible的管理节点(controll node)上安装Ansible的软件即可使用。Ansible的工作原理是通过SSH或者WinRM,把Ansible module传送到被管理节点上 执行任务,所以我们只需要备份Ansible的inventory文件(被管理节点列表文件)以及您编 写完成的Playbook文件就可以了,因为Ansible可以通过rpm进行安装。损坏后如果playbook也对丢了影响比较大,如果数据没丢,可以重建然后重新建互信 即可快速恢复。生产环境下Ansible以及t
15、ower的建设需要有高可用架构,对于tower的高可用架构, 前端需要F5或者haproxy这些负载均衡器,后端的状态同步需要有postgresql的replication 多副本保证。对于playbook的保护,最好有备份机制,或者放到代码库或者共享存储中。只需要把认证关系inventory以及playbook备份好就行了,Ansible没有守护进程在运行。1。、普通用户密码怎么管理,大批量密码过期了怎么解决?如果是针对Ansible被管理节点的用户密码过期了,在不修改密码的前提下无法使用 Ansible去直接管理这些节点,建议后续使用密钥的方式来管理节点,这样就不涉及密码过 期的问题。如果
16、是Ansible被管理节点的密码过期了,需要使用Ansible去修改这些被管理节点的 密码,那只需要写一个很简单的playbook,把新密码在inventory里设置成变量,与不同的 被管节点形成对应关系,直接执行批量改密即可。码纳入堡垒机管理,堡垒机会按照策略,定期批量更新密码的,基本不存在密码过期一 说。如果没有堡垒机,可通过Ansible设置定时任务,批量更新密码。一种是让用户自己登陆修改密码;如果大量服务器,这种方案不适用;我们目前是做了一个自动化改密码的工具,该工具定时去修改服务器上用户账号的密 码。这种适合管理员账号密码管理;针对您的情形,我的建议是做一个批量修改密码的工具,可以批
17、量选择服务器进行密码 的修改,即可。Ansible是一个模型驱动的配置管理器,支持多节点发布、远程任务执行。默认使用SSH 进行远程连接。无需在被管理节点上安装附加软件,可使用各种编程语言进行扩展。一、Ansible基本架构AnsibleModulesConnaction PluginsHost2HostlHost3Pluginslog、mail上图为ansible的基本架构,从上图可以了解到其由以下部分组成:核心:ansible核心模块(Core Modules):这些都是ansible自带的模块扩展模块(Custom Modules):如果核心模块不足以完成某种功能,可以添加扩展模块插件(
18、Plugins):完成模块功能的补充剧本(Playbooks): ansible的任务配置文件,将多个任务定义在剧本中,由ansible自 动执行连接插件(Connectior Plugins): ansible基于连接插件连接到各个主机上,虽然ansible 是使用ssh连接到各个主机的,但是它还支持其他的连接方法,所以需要有连接插件主机群(Host Inventory):定义ansible管理的主机二、Ansible工作原理Ansible supports different types of connectionsOmq listener is launched on nodes aut
19、omatically by AnsiblenodeAnsible talks to nodes over Omq message bus以上是从网上找到的两张ansible工作原理图,两张图基本都是在架构图的基本上进行 的拓展。从上面的图上可以了解到:1、管理端支持local、ssh zeromq三种方式连接被管理端,默认使用基于ssh的连接 这部分对应基本架构图中的连接模块;2、可以按应用类型等方式进行Host Inventory (主机群)分类,管理节点通过各类模块 实现相应的操作单个模块,单条命令的批量执行,我们可以称之为ad-hoc;3、管理节点可以通过playbooks实现多个tas
20、k的集合实现一类功能,如web服务的安 装部署、数据库服务器的批量备份等。playbooks我们可以简单的理解为,系统通过组合多 条ad-hoc操作的配置文件。三、ansible的七个命令安装完ansible后,发现ansible 一共为我们提供了七个指令:ansible ansible-doc ansible-galaxy ansible-lint ansible-playbook ansible-pull ansible-vaulto 这里我们只查看 usage部分,详细部分可以通过“指令-h”的方式获取。1、ansiblerootlocalhost ansible -hUsage: an
21、sible optionsansible是指令核心部分,其主要用于执行ad-hoc命令,即单条命令。默认后面需要跟 主机和选项部分,默认不指定模块时,使用的是command模块。如:root361 # ansible 192.168.0.102 -a date192.168.0.102 | success | rc=0 Tue May 12 22:57:24 CST 2015不过默认使用的模块是可以在ansible.cfg中进行修改的。ansible命令下的参数部分解 释如下:参数:- a Arguments, - -args= Arguments , 命令行参数- m NAME, -modu
22、le-name=NA?*1E执行模块的名字,默认使用command模块,所以如果是只执行单一命令 可以不用m参数- i PATH, -inventory=PATH 指定库存主机文件的路径默认为/etc/ansible/hosts.- u Username, -user=Username执行用户,使用这个远程用户名而不是当前用户- U -sud-user=SUDO_User sudo到哪个用户,默认为 root- k -ask-pass登录密码,提示输入SSH定码而不是假设基于需钥的险证- K -ask-sudo-pass 提示密码使用sudo- s -sudo sudo运行- S -su用su
23、命令- 1 -list显示所支持的所有模块- s -snippet指定模块显示剧本片段- f -forks=NUM 并行任务数。NUM被指定为一个整数,默认是5。#ansible testhosts -a /sbin/rebo otM -f 10重启testhosts组的所有机器,每次重启1。台- -private-key=PRIVATE_KEY_FILE私钥路径,使用这个文件来骏证连接- v -verbose详细信息all针对hosts定义的所有主机执行- M MODULE_PATH, -module-path=hK)DULE_PATH 要执行的模块的路径,默认为/us”share/ansi
24、ble/- -list-hosts只打印有哪些主机会执行这个playbook文件,不是实际执行该playbook文件- o -one-line压缩输出,摘要输出.尝试一切都在一行上输出。- t Directory, -tree=Directory将内容保存在该输出目录,结果保存在一个文件中在每台主机上。- B后台运行超时时间P调查后台程序时间 一, -T Seconds, -timeout=Seconds 时间,单位秒s-P NUM, -poll=NUM调查背景工作每隔数秒。需要-b-c Connection, -connection=Connection 连接类型使月。可能的选项是param
25、iko(SSH),SSH和地方。当地主要是用于crontab或启动。-tags=TAGS只执行指定标签的任务例子:ansible-playbook test.yml -tags=copy只执行标签为c opy的那个任务-list-hosts只打印有哪些主机会执行这个playbook文件,不是实际执行该playbook文件-list-tasks列出所有将被执行的任务- 3 -check只是测试一下会改变什么内容,不会真正去执行;相反,试图瓶测一些可能发生的变化- -syntax-check执行语法检查的剧本,但不执行它- 1 SUBSET, -limit=SUBSET进一步限制所选主机/组模式-
26、limit=192.168.0.15只对这个ip执行- -skip-tags=SKIP_TAGS只运行戏剧和任务不匹配这些值的标签-skip-tags=copy_start- e EXTRA_VARS, -extra-vars=EXTRA_VARS 额外的变量设国为键=值或YAML / 3SON#cat update.yml- hosts: hosts ) remote_user: user ffansible-playbook update.yml -extra-vans hosts=vipers user=admin传递hosts、us er)变量,hosts可以是ip或组名- 1,-li
27、mit 对指定的 主机/组 执行任务-limit=192.168.0.10, 192.168.0.11 或-1 192.168.0.lQf只对这个2个ipyl行任务2、ansible-docansiblc-doc -hUsage: ansible-doc options module.该指令用于查看模块信息,常用参数有两个-1和-s ,具体如下:列出所有已安装的模块- ansible-doc -1查看具体某模块的用法,这里如查看command模块- ansible-doc -s command3、ansible-galaxyansible-galaxy -hUsage: ansible-gal
28、axy init|info|install|list|removej help options .ansible-galaxy指令用于方便的从 站点下载第三方扩展模块,我们可以形象的理解其 类似于centos下的yum、python下的pip或easy_install 。如下示例:rootlocalhost # ansible-galaxy install aeriscloud.docker- downloading role docker*, owned by aeriscloud- downloading role from- extracting aeriscloud.docker to
29、 /etc/ansible/roles/aeriscloud.docker-aeriscloud.docker was installed successfully这个安装了一个aeriscloud.docker组件,前面aeriscloud是galaxy上创建该模块的用户 名,后面对应的是其模块。在实际应用中也可以指定txt或yml文件进行多个组件的下载安 装。这部分可以参看官方文档。4、ansible-lintansible-lint是对playbook的语法进行检查的一个工具。用法是ansible-lint playbook.ymlo5、ansible-playbook该指令是使用最多的
30、指令,其通过读取playbook文件后,执行相应的动作,这个后面 会做为一个重点来讲。6、ansible-pull该指令使用需要谈到ansible的另一种模式pull模式,这和我们平常经常用的push模式刚好相反,其适用于以下场景:你有数量巨大的机器需要配置,即使使用非常高 的线程还是要花费很多时间;你要在一个没有网络连接的机器上运行Anisble,比如在启动 之后安装。这部分也会单独做一节来讲。7 ansible-vaultansible-vault主要应用于配置文件中含有敏感信息,又不希望他能被人看到,vault可以 帮你加密/解密这个配置文件,属高级用法。主要对于playbooks里比如涉及到配置密码或其 他变量时,可以通过该指令加密,这样我们通过cat看到的会是一个密码串类的文件,编辑 的时候需要输入事先设定的密码才能打开。这种playbook文件在执行时,需要加上 -ask-vault-pass参数,同样需要输入密码后才能正常执行。