欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOCX文档下载  

    自动化运维工具 Ansible 日常维护和使用.docx

    • 资源ID:7204206       资源大小:41.75KB        全文页数:12页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    自动化运维工具 Ansible 日常维护和使用.docx

    Inventory文件在日常维护中,AnSibIe通过Inventory(可管理的主机集合),对远端服务器或者主机进行统一操作和管理.在Ansible中,描述主机的默认方法是将他们列在一个文本文件中,这个文件称为InVentory文件,默认的路径和文件为:etcansiblehosts,可以通过ANSIB1.E.HOSTS环境变量来指定,也可以在ansible.cfg文件中通过inventory参数指定,或者在运行ansible和ansible-playbook的时候使用-i参数来临时指定。下面举例说明,如何在inventory组件的etcansiblehosts文件中定义主机和主机组:1 X.X.X.100ansible_ssh_PaSS='123456,2 groupame13 X.X.X.101:94 X.X.X.201:95 groupame1:vars6 ansible_ssh_pass=*123456,7 groupname2:children8 groupame1第一行定义了一个主机XXX100,并使用inventory内置变量ansible_ssh_pass定义了该主机的登录密码,如果建立了互信,则不需要这个参数;参数用途HnSibIe_ssh_host定义hostSSh地址ansible_ssh_port定义hostsssh端口ansible_ssh_user定义hostsSSh认证用户ansib1JSSh_pass定义hostsSSh认证密码ansible_sudo定义hostsSUdO用户asible_sudo_pass定义hoslsSUdO密码ansible_sudoexe定义hostssudo路径ansible_connection定义hosts连接方式ansible_ssh_private_key_fiIe定义hosts私物ansible_shell_type定义hostsshell类型ansible_PythOnjnterPreter定义hosts任务执行python路径ansibIe_*_inlerpreter定义hosts其他语言解析器路径我们也可以在ansible.cfg文件中的defaults部分更改一些Inventory内置参数的默认值,可以支持更改的有:Inventory内置参数ansible.cfg参数HnSibleSShPOrtremoteportHnSible_sshuserremote_usera11siblesshprivatekeyfileprivate_key_fiIeansible-shell_typoexecutable动态Inventory在实际的应用中,会存在大量的主机列表信息,如果手动维护Ansible中的Inventory文件将会非常的繁琐所以支持动态Inventory将会让问题变得统一、清淅、简单许多.动态InVentory也就是AnSible所有的InVentory文件里面的主机列表和变量信息都支持从外部拉取,例如我们常用的CMDB,我们可以通过定义的脚本,将外部CMDB等其他运维系统中的主机信息同步至Ansible中.在ansibleip-mcommand-adate-o值得注意的是,Ansible默认的模块是Command,所以上面的命令可以简化为:ansibleip-adate-o第二种方式是利用Shell模块切换到某个Shell执行远程主机上的Shell/Python脚本,或者执行命令,Shell支持管道命令,功能较Command更强大灵活,例如:ansibleip-mshell-a'bashroottest.sh,-oansibleip-mshell-a'echo'123456,passwd-stdinroot'第三种方式是利用RaW模块Raw支持管道命令.Raw有很多地方和SheIl类似,但是如果是使用老版本Python(低于2.4),无法通过Ansible的其他模块执行命令,则需要先用到Raw模块远程安装PythOn-Sim-PlejSon后才能受管;又或者是受管端是路由设备,因为没有安装Python环境,那就更需要使用RaW模块去管控了.例如:ansibleip-mraw-a,cd/tmp;pwd-第四种方式是利用SCriPt模块,传输Ansible中控端上的Shell/Python脚本到远端主机上执行,即使远端主机没有安装Python也可以执行,有点类似RaW模块.但Script只能执行脚本,不能调用其他指令,且不支持管道命令,例如:ansibleip-mscript-a'roottest.sh'-o在AnsibleAd-Hoc中,可以通过User模块帮助我们管理远程主机上的用户,比如创建用户、修改用户、删除用户、为用户创建密钥对等操作.该模块的几个常用参数如下:参数说明name用J指定要操作的用户名称group用Ffii定用户所在的主组ho11H用于指定用户home目录shell用于指定用户的默认shelluid用指定用户的Uid号state用指定用户是否存在于远程主机中欣认为PreSen1.表示用户需存在;absent.表示IH除用户re三oveSUtle为absent时,用于指定是否副除用户的在目录assword用于指定用户的密码增加用户、组和密码:ansibleip-mgroup-a,name=testg"ansibleip-muser-a"name=testgroup=testgpassword=123456home=hometest*删除用户和用户主目录:ansibleip-muser-a*name=testState=absentremove=yes*3、AnsiblePlaybook使用在AnsibleAd-Hoc中,可以通过Yum模块实现在远程主机上通过YUm源管理软件包,包括安装、升级、降级、删除和列出软件包等。该模块的几个常用参数如下:Tasks1.ist和ActionPlay的主体部分是Task列表,Task列表中的各任务按次序逐个在Hosts中指定的主机上执行,即在所有主机上完成第一个任务后再开始第二个任务.在运行Playbook时(从上到下执行),如果一个Host执行Task失败,整个Task都会回滚,我们需要修正Playbook中的错误,然后至新执行即可.Task的目的是使用指定的参数执行模块,而在模块参数中可以使用变量,模块执行时日等等,这意味着多次执行是安全的,因为其结果一致.另外,按照规范写法,每一个Task必须有一个名称Name,虽然这不是必须的,但这样在运行Playbook时,从其输出的任务执行信息中可以很好的辨别出是属于哪一个Task.如果没有定义Name,Action的值将会用作输出信息中标记特定的Task,结果不好分辨。定义一个Task,常见的格式为"module:options".例如:"yum:name=httpd".值得注意的是,Ansible的自带模块中,Command模块和Shell模块无需使用key=value格式,直接编写要执行的命令即可.HandlersHandlers也是一些Task的列表,和一般的Task并没有什么区别。它是由通知者进行的Notify,如果没有被Notify,则Handlers不会执行,如果被Notify了,则Handlers被执行.不管有多少个通知者进行了Notify,等到Play中的所有TaSk都执行完成之后,HandlerS也只会被执行一次.例如:hosts:X.X.10B.2CA5ks:- nae:1t¾sta1lhxtdpackagey:rumehttpdstate-present- none:copyhttpd.co11fo1ap¼0:src-tppd.conf.J2<¼stchtpdccnfhttpd.conf8Wroot9r0up-r00soda-0644notify:- restarthttpdservice-none:installnginxPackageyu:fu*-nginxsa-prsnhandlers:-n>re:restarthttpdservicesrvico:rnc-ttpdstatostarred变量引用我们可以在PIayBook中通过"var$:变量名"的方式声明变量,并通过"变量名"的方式使用已声明的变量.另外,我们还可以直接引用Ansible的变量,包括采集到的主机Fact中的变量,例如:通过ansible.alljpv4.address来获取IPV4地址,或者通过ansible-distributionxansible_distribution_version来获取操作类型和版本信息.除此之外,还能引用已编辑好的InVentory文件中定义的主机变量,这样当安装完一些软件,需要根据主机中定义的变量来做一些自动化配置时,将会非常好用.例如:Vietcansiblehosts#定义Inventory文件中的变量与值X.X.108.2hostname="test"M5”:X.X.1C4.2*M5:- p*ck»9*:rnX- *rvc:wyql- ruM:1mllllMtpdP>cUqy:fMBe(p*ckao)s(At-frsmru<restarts<1serviceservice:CWRy1)15mH"Pn>e-copyCome<11tofilec«py:<omem-hmtnez(>m1bU-cM>trlb<rtlcn)<(wwlbU_di»tribvtlcn_*1on)*dettptett.t<上面的案例是通过vars的方式定义了package和service两个变量,并在下面的yum和service两个Task中进行引用,第三个Task则是直接引用setup生成的Fact变量和来自Inventory文件中定义的主机变量hostname,来实现将内容信息传递至远端主机的文件中,输出结果如下:cattmtest.t×ttest:RedHat7.2条件判断我们可以在PIayBook中通过"when:变量=值"的方式声明一个条件判断,可以看出when的值是一个条件表达式,如果条件判断成立,Task就执行,如果判断不成立,则task不执行。例如当我们需要根据变量、Facts(setup)或此前任务的执行结果来作为某TaSk执行与否的前提时,则要用到条件判断,这时可以在Playbook中使用when子句:在Task后添加when子句.另外,when子句支持jinjia2表达式或语法.-hosts:X.X.108.2tasks:-name:Installhttpdpackageyun:naae-htcpdstate-presentMberK-ansibldistribution"1.inux"-ansiblStribcJtiorueajor-VQrson-"7"-name:installngi11xPackagey:nafe*nixstate-present4n:ans1be,distr1bution-"Cos"andans1bIJdiSEbIaIorUajor-1on迭代当我们有需要至豆性执行的任务时,可以使用迭代机制.其使用格式为将需要迭代的内容定义为item变量引用,并通过WithJtems语句指明迭代的元素列表即可.例如:-hosts:X.X.108.2tasks:yun:name=-itemstate=presentwith_items:-name:installPackage-htpd-ntpd-hosts:x.x.108.2tasks:-name:addusers-ssnduser:nane-item.userstate-presentgroup-item.groupwith_iterns:user:'testl',group:'system')user:"test2",group:'root'TemplatesJinja是基于Python的模板引擎.Template类是Jinja的另一个里要组件,可以看作一个编译过的模块文件,用来生产目标文本,我们可以传递Python的变境给模板去替换模板中的标记.例如,我们在做NginX安装与配置时,有些监听端口、服务名称等配置可以通过变量的方式在InVentrOy文件中为不同主机预定义好,当我们定义好了一个模板,井将模板中的监听端口和服务名称设置为变量后,在运行Template这个Task时,将会把不同主机的这些变员信息传递到模板中使用,实现配营的自动化.例如:vitmphttpd.conf.j2#定义模板中的变球1.istenhttp,portServerNameserVejnameMaxCIientsaccess-num)vietcansiblehosts#定义Inventory文件中的变Sl与值testX.X.X.2http_Port=X.X.X.2:80access_nUm=50SerVeJname="test:80安装Nginx时,将把Inventory文件中主机定义好的变量与值传递到模板中,井拷贝至该远端主机:-hosts:alltasks:-na11e:installngirocPackageyn:nanegnxstate-present-nane:copyng1nx.conftenpUte:src-/t«p/ntp.conf.J2dest-etcnginx.confowner-rootgroup-rootmode-0644Tags在一个Playbook中,我们一般会定义很多个Task,如果我们只想执行其中的某一个Task或多个Task时就可以使用Tags标签功能了,例如:-hosts:X.X.108.2tasks:-name:installhttpdPackageyum:na11>e=httpdstate=presenttags:-httpd-name:installnginxpackageyum:name=ngin×state=presenttags:-nginxansiblc-pIaybooktest,ymltags=*,nRinx"4、AnsibleFacts使用Facts组件是Ansible用于采集被管主机设备信息的一个功能,当Ansible采集Fact的时候,它会收集披管主机的各种详细信息:CPU架构、操作系统、IP地址、内存信息、磁盘信息等,这些信息保存在被称作FaCt的变印中.AnSibIe使用一个名为Setup的特殊模块来实现Fact的收集,在Playbook中默认会调用这个模块进行Fact收集,在命令行中可以通过"ansibleip-mSetUP”来进行手动收集,整个FaCtS信息被包装JSoN格式的数据结构中,AnsibleFaCtS是最上层的值.例如:ansibleX.X.X.2-msetupX.X.X.2ISUCCESS=>"an3ible_fact3":wansible_all_ipv4_addresses":wx.x7x.2"】,wan3ible_all_ipv6_addre33e3":(wfe80:£816:3eff:Cele:67C3t,wansible_appannor":993ZtM3":"disabled"Ransible_architecture":,x86-64"rFnS3Q)但一date":"01012011-r,ansble-b3-verson,:"0.5.Iwr,nsibleendllne":rBOOT-IMAGEr:,三lnuz-3.10.0-327el7.x-64"r"biosdevnaroe":"0"r-console":wtcySOrHS200n8-fcrashkernel":wauto"rwnet.Ifnaznes":"0","rd.lvm.lv":"rhelroot"rwro":true,"root":"/dev/mapper/rhel-root"Facts还支持通过filter参数来查看指定信息,例如下面只宜看远端主机的操作系统和版本:ant>leX.X.X2*upnicer-ait>le-ye2X.X.X.2ISGCCtSS->(anvblea.fcos(*ntMea,0ytt4f:e1.irmMe>cbg*4sfl<>*A4ibl*X.X.X.2-«««cup-*filcr<*ft4iblediribvcco*-0X.X.X.71SCCCX5S->(-an*blsfccw:(*nBibladlstrbuon:HdMat>.ca>p:fl*>iblX.X.X.?-«scup7*fHtr*A<uiblvdi*ribQtcs7rBeev-0X.X.X.2ISCCCKSS>("anxbl-fct:(aanBibX-dtrfc4ioa-vrona:.2"1,efcand:fal查看远端主机的CPU和内存大小:anibl6×.×.×.2-etu-aMfilt<r=nslbleroceeeorecounf-0-X.X.X.2ISUCCESS三>(anibl-facta":ansiblo-procoor-count":4),changod*:false)ansibleX.X.X.2-asetup-"filter-ansiblo-nea>totalmb"-0X.×.×.2ISUCCtSS»>("anibl-fact":<anibl-etotlmb,:158871.*changed*:fals«l查看远端主机的各文件系统大小和剌余容量:anslbleX.X.X.2-msetup-atfllter=ansiblemountsfX.X.X.2ISUCCESS->("nsiblefacts,t:RanSibIJmoUncg:("device":"/dev/mapper/rhe1-root"f"fatype":"xfs"r"moxnt":w"r"options":"rwrrelatimerattr2rinode64rnoquota"r"Sizeavailable":94723239936rwsze-total:106819743744,-UUid":"517bc764-fd26-4027-a301-6c5e29557f7cw"device":"devvdalwr"f3type":"xfs"r"mount":,boot"r"options":"rwzrelatiraerattr2,inode64rnoquota"r"slze-available":354861056,"size-total":520794112r"uuid":"2c98f0c5-9dbb-4cac-871c-8el5e802al73""changed":false在Playbook中,Facts组件默认会收集很多的主机的基础信息,可以通过前面的FaCt缓存机制,将这些信息缓存到本地目录或者内存数据库中,在做配百管理的时候进行引用,也可以用来将获取的主机基础信息自动同步到CMDB中去,实现基础信息的自动采集功能.下面通过通过演示,说明如何通过ansible-cmdb插件,实现远端主机CPU自动同步至外部CMDB系统中.首先,我们需要安装ansible-cmdb插件,下载链接如下:https:/files.pythonhosted.org/packages/37/lb/lfcff0a38a4e07d9d3f75113494ec0b25fd271b650bda52907aela80cbfbansible-cmdb-1.27.tar.gz其次,开始安装ansible-cmdb插件:gzip-deansible-cmdb-1.27.tar.gztar-×vf-cdansible-cmdb-1.27pythonsetup.pyinstall生成所有主机的Fact信息并用filter过渔出主机CPU值:ansibleall-msetup-ttmpfactoutansibleall-msetup-a*filter=ansible_processor_count"-ttmpcpu通过ansible-cmdb插件以csv或sql格式输出IP地址和CPU颗数值:PATH=/usr/local/bin:$PATHansible-cmdb-tcsv-cname,cpustmpcpu>tmpcpu.csvansible-cmdb-tSqltmpcpu>tmpcpu.sql以CSV格式或者Sql格式导入信息至外部CMDB系统中(根据支持方式灵活选用).这里以Postgres数据库为例,通过转CSV格式为Sql格式导入至外部CMDB系统:CPUinfO=$(Cattmpcpu.csv)forCPUJnfOinScpuinfodoip=S(eco-$cpu_info"Iawk-F",'printSl,sed,s7g,)cpu=S(echo"$cpu_info"Iawk-FV'print$2Ised,s7g')echo"update"VirtualMachine"setVCPU"=,Scpu'where"iP"='Scpuip,and"Stats"='A7>>tmpcpu,info.sqdonesu-postgres-c"exportPGPASSWORD=postgresoptPostgrSQ1.9.3binpsql-dcmdbuild-ftmpcpu.info.sql"当然,以上仅仅是简单的示例,事实上,我们可以利用好AnsibleFact的功能,实现更加豆杂的CMDB自动化采集功能.

    注意事项

    本文(自动化运维工具 Ansible 日常维护和使用.docx)为本站会员(李司机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开