网络自动化运维教程 课件 项目9 使用Ansible实现网络自动化运维_第1页
网络自动化运维教程 课件 项目9 使用Ansible实现网络自动化运维_第2页
网络自动化运维教程 课件 项目9 使用Ansible实现网络自动化运维_第3页
网络自动化运维教程 课件 项目9 使用Ansible实现网络自动化运维_第4页
网络自动化运维教程 课件 项目9 使用Ansible实现网络自动化运维_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

项目9使用Ansible实现网络自动化运维项目9使用Ansible实现网络自动化运维9.1Ansible基础9.2Ansible模块9.3Ansible剧本9.4任务实施12.1Ansible基础Ansible基于Python语言实现,由Paramiko和PyYAML两个关键模块构建。Ansible具有以下特点:1特点安装部署简单;管理主机便捷,支持多台主机并行管理。避免在被管理主机上安装客户代理,采用无代理方式,只是利用现有的SSH后台进程。用于描述基础架构的语言友好。关注安全,很容易对执行的内容进行审计、评估、重写。能够立即管理远程被管理主机,不需要预先安装任何软件。不仅仅支持Python,可运行使用任何动态语言开发模块。非root账户也可以使用。成为最简单、易用的IT自动化系统。12.1Ansible基础Ansible通常由管理节点和被管节点组成。管理节点是用来安装Ansible工具软件、执行维护指令的服务器或工作站,是Ansible维护的核心。被管节点是运行业务服务的服务器,由控制机通过SSH来进行管理。Ansible采用Pythonparamiko模块,通过SSH连接主机。Ansible在管理节点将Ansible模块通过SSH协议推送到被管节点执行,执行完之后自动删除

2Ansible架构–管理方式Ansible管理节点Ansible被管节点Ansible被管节点Ansible被管节点SSHSSHSSH12.1Ansible基础Ansible对管理节点没有太多要求,当前管理节点的操作系统选用Linux。被管节点的要求更少,支持Linux、类Unix、Windows等类型的主机节点,甚至支持Cisco、Huawei、Juniper等网络设备、负载均衡器。Ansible不需要安装其他依赖软件包,默认是基于SSH协议进行通信的。安装Ansible之后,管理节点不需要启动或运行任何Ansible的后台进程,也不需要数据库。只要在一台管理节点上安装Ansible,就可以通过这台主机管理一组远程节点。在被管节点上,同样也不需要安装、运行任何Ansible特有的软件。这样如果Ansible版本需要升级,只需升级控制主机,不涉及被管节点。3Ansible系统要求12.1Ansible基础Ansible管理节点只要安装了Python2.6或以上版本,就可以运行Ansible。注意,Windows环境系统当前还不能作为管理节点。Ansible被管理节点可以是Linux系统,可以是Windows系统。4Ansible系统要求12.1Ansible基础在Ansible管理节点上使用yum安装Ansible,先更新yum源5Ansible安装步骤#Yum源更换为国内阿里源[root@ansi-manager~]#yuminstallwget–y[root@ansi-manager~]#mv/etc/yum.repos.d/CentOS-Base.repo/etc/yum.repos.d/CentOS-Base.repo.backup[root@ansi-manager~]#wget-O/etc/yum.repos.d/CentOS-Base.repohttp:///repo/Centos-7.repo​#添加阿里的epel源[root@ansi-manager~]#wget-O/etc/yum.repos.d/epel.repo/repo/epel-7.repo​#yum重新建立缓存[root@ansi-manager~]#yumcleanall[root@ansi-manager~]#yummakecache12.1Ansible基础在Ansible管理节点上使用yum安装Ansible6Ansible安装步骤#使用YUM安装ansible[root@ansi_manager~]#yum-yinstallansible#验证ansible[root@ansi-manager~]#ansible--versionansible2.9.23

configfile=/etc/ansible/ansible.cfgconfiguredmodulesearchpath=[u'/root/.ansible/plugins/modules',u'/usr/share/ansible/plugins/modules']ansiblepythonmodulelocation=/usr/lib/python2.7/site-packages/ansible

executablelocation=/usr/bin/ansible

pythonversion=2.7.5(default,Oct302018,23:45:53)[GCC4.8.520150623(RedHat4.8.5-36)]Ansible版本Ansible配置文件Python版本12.1Ansible基础配置免密登录:为了避免Ansible下发指令被管理主机时输入被管理主机主机密码,使用SSH免密登录。使用ssh-keygen与ssh-copy-id来实现快速证书的生成及公钥下发。其中ssh-keygen生产一对密钥,使用sh-copy-id来下发生成的公钥。7Ansible安装步骤#在管理节点上创建密钥,执行ssh-keygen-trsa,有询同直接按回车键即可。[root@ansi-manager~]#ssh-keygen-trsa[root@ansi-manager~]#ll/root/.ssh/total8-rw-------1rootroot1679Aug318:07id_rsa-rw-r--r--1rootroot399Aug318:07id_rsa.pub这是私钥文件这是公钥文件12.1Ansible基础下发密钥就是把管理节点的公钥id_rsa.pub下发到被管理节点上8Ansible安装步骤#在管理节点上向被管理节点ansi-Node01(31)下发密钥

[root@ansi-manager~]#ssh-copy-idroot@31#在管理节点上向被管理节点ansi-Node01(31)下发密钥[root@ansi-manager~]#ssh-copy-idroot@3212.1Ansible基础下发密钥就是把管理节点的公钥id_rsa.pub下发到被管理节点上9Ansible安装步骤#在管理节点上向被管理节点ansi-Node01(31)下发密钥

[root@ansi-manager~]#ssh-copy-idroot@31#在管理节点上向被管理节点ansi-Node01(31)下发密钥[root@ansi-manager~]#ssh-copy-idroot@3212.1Ansible基础在Ansible中,被管理节点都称为Inventory。因此,Inventory就是被管理主机清单。默认Ansible的Inventory是一个静态的INI格式的文件/etc/ansible/hosts。还可以通过ANSIBLEHOSTS环境变量指定或者运行ansible和ansible-playbook的时候用-i参数临时设置。在Ansible中,常用的有2种方式制定hosts文件:Inventory文件(/etc/ansible/hosts)可以定义主机或主机组定义。添加完主机和主机组后就可以使用Ansible命令针对这些主机进行操作和管理了。10资产Inventory默认读取/etc/ansible/hosts文件;通过命令行参数

-i

指定hosts文件;12.1Ansible基础Ansible的资产文件中,可以以IP地址的形式或者主机名的形式存在Ansible的资产若连续,可以使用[stat:end]的形式去表达可以将服务器按照业务场景定义成组,比如db和webservers可以把一个组作为另一个组的子成员,比如db

和webservers是docker组的子成员。11资产Inventory文件定义12.1Ansible基础12资产Inventory举例[root@ansi_manager~]#cat/etc/ansible/hosts31#单独定义一个主机,由于配置了SSH免密登录,不需要指定SSH登录密码32#单独定义一个主机,由于配置了SSH免密登录,不需要指定SSH登录密码​33ansible_ssh_pass='123456'#定义一个主机,使用Inventory内置变量定义了SSH登录密码34ansible_ssh_pass=‘123456’#如果配置了SSH免密登录,不需要指定SSH登录密码[webservers]#中括号定义一个主机组,webservers是主机组名,该主机组下由两台主机3132​[db]

#中括号定义一个主机组,db是主机组名192.168.1.[241:243]#定义主机组db中3台主机从41到43​[db:vars]

#通过变量(vars)的方式定义db组主机的SSH登录密码,ansible_ssh_pass='123456'[docker:children]#定义一个docker组,它有2个子组db和webserver,把一个组作为另一个组的子成员dbwebservers12.1Ansible基础13资产Inventory举例12.1Ansible基础14查看资产[root@ansi-manager~]#ansibleall--list-hostshosts(7):333441424331

32查看资产文件中的所有主机查看资产文件中主机组中的所有主机[root@ansi-manager~]#ansiblewebservers--list-hostshosts(2):313212.1Ansible基础资产变量分为主机变量和组变量,分别针对资产中的单个主机和主机组。主机变量:以下资产中,定义了2个主机变量user和port此变量只针对31这台服务器有效。验证:(通过-i指定自定义的资产文件)15资产变量–主机变量[root@ansi_manager~]#vimhostvars[webservers]31user=tomport=888832[root@ansi-manager~]#ansible31-ihostvar-mdebug-a"msg='{{user}}{{port}}'"31|SUCCESS=>{"msg":"tom8888"}12.1Ansible基础变量的值是针对31主机,对32主机无效通过对组的操作,得到相同的结果16资产变量–主机变量[root@ansi-manager~]#ansible32-ihostvar-mdebug-a"msg='{{user}}{{port}}'"32|FAILED!=>{"msg":"Thetaskincludesanoptionwithanundefinedvariable.Theerrorwas:'user'isundefined"}[root@ansi-manager~]#ansiblewebservers-ihostvar-mdebug-a"msg='{{user}}{{port}}'"32|FAILED!=>{"msg":"Thetaskincludesanoptionwithanundefinedvariable.Theerrorwas:'user'isundefined"}31|SUCCESS=>{"msg":"tom8888"}12.1Ansible基础变量在以下资产中,定义一个组变量home。此变量针对webservers这个主机组中的所有主机有效17资产变量–组变量[root@ansi-manager~]#vimgroupvars[webservers]31user=tom32[webservers:vars]home="/home/tom"12.1Ansible基础home是webservers的组变量,针对组中的所有主机有效18资产变量–组变量[root@ansi-manager~]#ansiblewebservers-igroupvars-mdebug-a"var=home"31|SUCCESS=>{"home":"/home/tom"}32|SUCCESS=>{"home":"/home/tom"}项目9使用Ansible实现网络自动化运维9.1Ansible基础9.2Ansible模块9.3Ansible剧本9.4任务实施9.2Ansible模块Ansible核心:ansible核心模块(CoreModules):这些都是ansible自带的模块扩展模块(CustomModules):如果核心模块不足以完成某种功能,可以添加扩展模块插件(Plugins):完成模块功能的补充剧本(Playbooks):ansible的任务配置文件,将多个任务定义在剧本中,由ansible自动执行连接插件(ConnectiorPlugins):ansible基于连接插件连接到各个主机上,虽然ansible是使用ssh连接到各个主机的,但是它还支持其他的连接方法,所以需要有连接插件1Ansible模块简介9.2Ansible模块Ansible自带很多模块,可以直接使用这些模块。可以通过“ansible-doc-l”显示所有自带模块。2Ansible模块[root@ansi-manager~]#ansible-doc-lfortios_router_community_listConfigurecommunitylistsinFortinet's...azure_rm_devtestlab_infoGetAzureDevTestLabfactsecs_taskdefinition

registerataskdefinitioninecsavi_alertscriptconfig

ModuleforsetupofAlertScriptConfigA...tower_receiveReceiveassetsfromAnsibleTowernetapp_e_iscsi_targetNetAppE-SeriesmanageiSCSItargetcon...azure_rm_acs

ManageanAzureContainerService(ACS)..................9.2Ansible模块ad-hoc命令是指ansible执行一条命令,并且不需要保存命令。ad-hoc所有的命令都要依赖于模块,默认安装好的ansible里有很多自带的模块,例如:command,raw,shell,file,cron等若执行这样的命令:ansiblehost2-mcommand-adate,代表的就是ad-hoc命令。使用Ah-hoc命令,Ansible的一些插件功能就无法使用,如loop、facts功能等。3Ansible执行命令–ad-hoc命令9.2Ansible模块常用的ansible选项参数:4Ansible执行命令–ad-hoc命令参数

-m模块名:指定要执行的模块的名称,如果不指定-m选项,默认是command模块。

-a命令:指定执行模块对应的参数选项。

-k:提示输入SSH登录的密码而不是基于密钥的验证,小写k

-K:用于输入执行su或sudo操作时需要的认证密码,大写K-b:表示提升权限操作。新版ansible才有的一个选项操作。

--become-method:指定提升权限的方法,常用的有sudo和su,默认是sudo。

--become-user:指定执行sudo或su命令时要切换到哪个用户下,默认是root用户。

-BSECONDS:后台运行超时时间

-C:测试一下会改变什么内容,不会真正去执行,主要用来测试一些可能发生的变化

-fFORKS,:设置ansible并行的任务数。默认值是5

-iINVENTORY:指定主机清单文件的路径,默认为/etc/ansible/hosts。。

-h:查看帮助,关于ad-hoc的一些选项的详细参数9.2Ansible模块Ansible命令执行格式:5Ansible执行命令–ad-hoc命令执行格式ansible主机或组-m模块名-a‘模块参数’ansible参数主机和组:是在/etc/ansible/hosts`里或通过-i参数进行指定的部分​模块名:可以通过ansible-doc-l查看目前安装的模块,默认不指定时,使用的是command模块,具体可以查看/etc/ansible/ansible.cfg的“#module_name=command"部分,默认模块可以在该配置文件中进行修改;模块参数:可以通过“ansible-doc模块名”查看具体的用法及后面的参数;ansible参数:可以通过ansible命令的帮忙信息里查看到,这里有很多参数可以供选择,如是否需要输入密码、是否sudo等。9.2Ansible模块执行一些简单的任务,使用ad-hoc命令可以方便的解决问题,但是有时一个场景过于复杂,需要大量的操作时候,执行的ad-hoc命令是不适合的,这时最好使用playbook,就像执行shell命令与写shell脚本一样,也可以理解为批处理任务,但playbook有自己的语法格式。Playbook将在下节课中详细讲解。6Ansible执行命令–playbook剧本项目9使用Ansible实现网络自动化运维9.1Ansible基础9.2Ansible模块9.3Ansible剧本9.4任务实施9.3Ansible剧本在前面个的课程中,使用Ansible模块执行一些简单的任务,使用ad-hoc命令可以方便的解决问题。但是有时一个任务需要大量的操作时候,执行的ad-hoc命令是不适合的,这时最好使用playbook。Playbook可以理解为批处理任务,但playbook有自己的语法格式。11playbook概述9.3Ansible剧本playbook文件由YAML语言编写。YAML是一个类似XML、JSON的标记性语言,YAML强调以数据为中心,并不是以标识语言为重点。因而YAML本身的定义比较简单,号称“一种人性化的数据格式语言”。编写playbook要遵循一定的书写格式,以下为playbook常用到的YAML格式。2playbook文件格式大小写敏感使用空格作为嵌套缩进工具,缩进时不允许使用Tab键缩进的空格数目不重要,只要相同层级的元素左侧对齐即可使用“-”(横线)+单个空格:表示单个列表项使用“:”(冒号)+空格:表示单个键值对使用"{}"表示一个键值表9.3Ansible剧本playbook文件是通过ansible-playbook命令进行解析的,ansbile-playbook命令会根据自上而下的顺序依次执行playbook文件中的内容。Playbook还有很多特性,它可以允许传输某个命令的状态到后面的指令,也可以从一台机器的文件中抓取内容并附为变量,然后在另一台机器中使用,这使得playbook可以实现一些复杂的部署机制,这是ansiblead-hoc命令无法实现的。3playbook文件执行9.3Ansible剧本playbook是由一个或多个“play”组成的列表。play的主要功能在于,将事先合并为一组的主机装扮成事先通过ansible定义好的角色。将多个play组织在一个playbook中就可以让它们联同起来按事先编排的机制完成一系列复杂的任务。4playbook文件构成5个核心组件:target部分:定义将要执行playbook的远程主机组variable部分:定义playbook运行时需要使用的变量task部分:定义将要在远程主机上执行的任务列表handler部分:定义task执行完成以后需要调用的任务Roles:角色:对应5个目录层:vars变量层tasks任务层handlers触发条件files文件template模板9.3Ansible剧本4playbook组件-hostsplaybook中的每一个play的目的都是为了让特定主机以某个指定的用户身份执行任务。hosts用于指定要执行指定任务的主机,须事先定义在主机清单中。如:[root@ansi_manager~]#cat

/etc/ansible/hosts3132​[webservers]31329.3Ansible剧本5playbook组件-hosts想知道在执行Playbook时,哪些主机将会受影响,则使用--list-hosts选项9.3Ansible剧本6playbook组件-task列表和action组件play的主体部分是task列表,task列表中有一个或多个task,各个task按次序逐个在hosts中指定的所有主机上执行,即在所有主机上完成第一个task后,再开始第二个task。task的目的是使用指定的参数执行模块,而在模块参数中可以使用变量。模块执行是幂等的,这意味着多次执行是安全的,因为其结果均一致。每个task都应该有其name,用于playbook的执行结果输出,建议其内容能清晰地描述任务执行步骤。如果未提供name,则action的结果将用于输出。定义一个task,常见的格式:”module:options”例如:yum:name=httpd9.3Ansible剧本7playbook组件-task列表和action组件使用下列命令,可以列出first.yml剧本中的taskansible-playbookfirst.yml--list-task9.3Ansible剧本8playbook变量Ansible定义变量的方式有很多种,下面就详细介绍Ansible各种变量定义方式。9.3Ansible剧本9playbook变量-主机及主机组变量

如下例,Ansible默认的Inventory文件是ini格式,如前面用到hosts文件,然后分别针对每台主机设置一个变量名称叫作key,接着使用debug模块来查有变量的值,最后通过对werbservers组定义一个变量同样使用debug模块查看。1、编辑资产文件[root@ansi_manager~]#vimhosts_v231key=23132key=232​[webservers]3[1:2]​[webservers:vars]user=tom2、编辑剧本[[root@ansi_manager~]#vimhost_v2.yml-hosts:allgather_facts:Falsetasks:-name:displarvarsfromhosts_v2debug:msg="The{{inventory_hostname}}valueis{{key}},useris{{user}}"

3、

检查剧本语法[root@ansi_manager~]#ansible-playbookhost_v2.yml--syntax-check​playbook:host_v2.yml9.3Ansible剧本10playbook变量-主机及主机组变量

4、执行剧本[root@ansi_manager~]#ansible-playbook-ihosts_v2host_v2.yml​PLAY[all]*******************************************************************************************************​TASK[displarvarsfromhosts_v2]********************************************************************************************ok:[31]=>{"msg":"The31valueis231,useristom"}ok:[32]=>{"msg":"The32valueis232,useristom"}​PLAYRECAP*******************************************************************************************************31:ok=1changed=0unreachable=0failed=0skipped=0rescued=0ignored=032:ok=1changed=0unreachable=0failed=0skipped=0rescued=0ignored=09.3Ansible剧本11playbook变量–使用vars

在playbook文件内通过vars字段定义变量1、编辑剧本[root@ansi_manager~]#vimhost_v4.yml-hosts:allgather_facts:Falsevars:key:ansible_webservertasks:-name:displarvarsfromhosts_v3debug:msg="The{{inventory_hostname}}valueis{{key}}"​2、验证剧本[root@ansi_manager~]#ansible-playbookhost_v4.yml--syntax-check​playbook:host_v4.yml9.3Ansible剧本12playbook变量–使用vars

在playbook文件内通过vars字段定义变量3、执行剧本[root@ansi_manager~]#ansible-playbookhost_v4.yml​PLAY[all]*******************************************************************************************************​TASK[displarvarsfromhosts_v3]********************************************************************************************ok:[31]=>{"msg":"The31valueisansible_webserver"}ok:[32]=>{"msg":"The32valueisansible_webserver"}PLAYRECAP*******************************************************************************************************31:ok=1changed=0unreachable=0failed=0skipped=0rescued=0ignored=032:ok=1changed=0unreachable=0failed=0skipped=0rescued=0ignored=09.3Ansible剧本13playbook变量–注册变量register

Ansibleplaybook中task之间还可以互相传递数据,如有两个tasks,其中第2个task是否执行需要判断第1个task运行后的结果。这时就需要在task之间传递数据,把第1个task执行的结果传递给第2个task。Ansibleregister变量用来保存前一个命令的返回状态,便于后面进行调用,可用于task之间传递数据。如定义了2个task,第一个task执行hostname命令,第二个task通过debug模块打印出第一个task的主机名9.3Ansible剧本14playbook变量–注册变量register

检查剧本语法,执行剧本9.3Ansible剧本15playbook变量–fact变量AnsibleFacts是Ansible在被托管主机上自动收集的变量。它是通过在执行Ad-Hoc以及Playbook时使用setup模块进行收集的,并且这个操作是默认的。因为这个收集托管主机上的Facts比较耗费时间,所以可以在不需要的时候关闭setup模块。收集的Facts中包含了托管主机特有的信息,这些信息可以像变量

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论