文章目录

  • ansible自动化运维详解(一)ansible的安装部署、参数使用、清单管理、配置文件参数及用户级ansible操作环境构建
    • 一、ansible的安装部署
      • 1.1、ansible简介
      • 1.2、实验环境
      • 1.3、安装部署ansible
    • 二、ansible的基本信息和参数使用
      • 2.1、ansible的基本信息
      • 2.2、ansible的参数使用
    • 三、ansible的清单管理
    • 四、ansible配置文件的参数详解
    • 五、构建用户级ansible操作环境

ansible自动化运维详解(一)ansible的安装部署、参数使用、清单管理、配置文件参数及用户级ansible操作环境构建

一、ansible的安装部署

1.1、ansible简介

ansible是新出现的自动化运维工具,其基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。作为一个开源配置管理工具,我们可以使用ansible来自动化执行任务,部署应用程序实现IT基础架构,如服务器的初始化配置、安全基线配置、更新和打补丁系统,安装软件包等。ansible架构相对比较简单,仅需通过SSH连接远程主机即客户机执行任务即可。
使用ansible的过程中会用到一些概念术语,这里介绍如下:

术语 含义
Control node 控制节点,指的是安装了ansible的主机,也叫ansible服务器端、管理机。ansible控制节点主要用于发布运行任务,执行控制命令。控制节点需要安装Python和ansible所需的各种依赖库。
Managed nodes 受控节点,即利用ansible执行任务的客户服务器
Inventory 清单,指的是受控节点的列表,即所有要管理的主机的列表
host文件 清单列表通常保存在一个名为host文件中,在host文件中,可以使用IP地址或者主机名来表示具体的管理主机和认证信息,并可以根据主机的用户进行分组
Modules 模块,即ansible执行特定任务的代码块
Task ansible客户主机上执行的操作
Playbook 利用YAML标记语言编写的可重复执行的任务的列表
roles 角色,用于层次性、结构化地组织playbook,roles能够根据层次型结构自动装载变量文件、tasks以及handlers等

1.2、实验环境

在安装部署ansible之前,我们需要搭建好实验环境:

这里需要用到两台rhel8.2版本的虚拟机(一主一从):
westosa(172.25.33.100):控制节点
westosb(172.25.33.200):受控节点

实验步骤:
1、在虚拟化存储目录中重置两个虚拟机硬盘,准备两台新的虚拟机westosa和westosb

2、配置控制节点westosa:修改westosa的域名为westos_ansible.westos.org

使用图形化方式为westosa配置网络

设置其IP为172.25.33.100,网关为172.25.33.250,为其配置域名解析

完成后使用命令查看虚拟机ip,设置成功

修改开机启动默认运行级别为multi-user.target,这是因为使用ansible时不需要图形接口,只需要支持用户SSH远程连接,所以运行级别选择 3,完成设置后进入命令行模式

3、配置受控节点westosb:修改westosb的域名为westos_node1.westos.org,使用图形化方式为westosb配置网络


设置其IP为172.25.33.200,受控节点不需要设置网关,为其配置域名解析

完成后使用命令查看虚拟机ip,设置成功,同样地修改开机启动默认运行级别为multi-user.target,进入命令行模式

4、打开真实主机防火墙的地址伪装功能,使虚拟机可以联网

远程连接上控制节点westosa,测试可以ping通baidu

1.3、安装部署ansible

实验步骤:
1、远程连接上控制节点westosa,查看虚拟机操作系统版本,这是因为安装ansible的软件仓库源版本要和系统版本一致

2、编写控制节点westosa的软件源仓库指向文件,注意版本一致性

3、安装方式一: 下载epel源的rpm安装包进行安装,这里我们使用了已有的epel安装包

wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
rpm -ivh epel-release-latest-8.noarch.rpm


epel源安装完成后,软件源仓库目录/etc/yum.repos.d中会自动生成对应的repo文件,接着使用yum install -y ansible就可以直接安装ansible

4、安装方式二: dnf install安装ansible,这里需要说明的一点是,使用dnf install安装ansible时解决不了ansible软件的依赖性(没有sshpass这个包),因此除了ansible的rpm包,还需要事先下载好sshpass的rpm包
依赖性解决方法一: 安装yum-utils工具,yumdownloader从网上下载得到依赖包后进行安装


依赖性解决方法二: 这里我们本地有sshpass和ansible的rpm安装包,其他依赖在系统镜像中有,所以只需要先安装sshpass,再安装ansible(其他依赖包会自动安装)

先安装sshpass

解决了依赖性问题后安装ansible

查看ansible的版本,验证ansible已经成功安装

二、ansible的基本信息和参数使用

2.1、ansible的基本信息

/etc/ansible 主配置目录
/etc/ansible/ansible.cfg 全局配置文件,默认很少修改
/etc/ansible/hosts 全局主机清单文件,管理主机列表

2.2、ansible的参数使用

实验步骤:
1、使用ansible的ping模块(-m参数表示模块)连接受控主机westosb,出现报警无法ping通,这是因为主机清单中的管理主机中没有172.25.33.200主机

2、编辑hosts主机清单,在最后输入受控主机的ip添加被控节点,添加成功即可列出主机,这时可以使用ping模块管理该主机

但此时输入命令回车会报错,这是因为在控制连接172.25.33.200主机的过程中,首先要在ansible控制主机中生成python脚本,然后远程通过sshd服务传输到被控主机上,在传py文件的过程中需要被控主机的认证通过。这里控制主机还不能通过被控主机的认证,所以需要加-K参数表示在执行ansible时询问ssh密码,出现pong表示和172.25.33.200主机之间可以实现ansible连接管理

3、由于使用root用户权限调用受控主机权限太大,所以一般需要使用普通用户的身份在受控节点执行管理操作,这里我们为受控节点创建普通用户devops并设置用户密码

4、为了避免每次连接受控主机时都要输入密码进行ssh认证,这里我们需要对控制节点做ssh免密认证:首先生成密钥对

将生成的公钥复制给受控节点中创建的普通用户devops

这里直接调用ping模块连接受控节点会报错,这是因为ssh远程连接默认使用root用户身份登录,而我们将公钥复制给的是受控节点中的普通用户devops,因此我们需要使用-u参数指定用户身份连接,此时不需要加-k即可连接管理受控节点

5、使用ansible的shell模块测试在受控节点建立文件( shell -a参数表示在shell中所要执行的内容),文件创建失败,这是因为当前在受控主机中运行指令时用到的是devops普通用户身份,无权限

我们需要visudo下放权力给devops,赋予devops用户所有权限
再次测试在受控节点建立文件,-K参数表示询问sudo密码,文件依然创建失败,这是因为还需要使用--become参数指定devops在执行命令时用sudo调用,这样才能真正提权,而不是直接执行,此时文件可以成功创建


6、为了避免在每次提权时输入sudo密码,我们可以visudo为devops用户做NOPASSWORD免密

完成免密设置后执行相应操作即可不需要使用-K参数询问sudo密码

文件成功删除

三、ansible的清单管理

实验步骤:
1、在ansible的主配置目录中创建自定义清单并编辑,添加两个受控主机的ip,此时列出主机无法读取自定义清单,需要使用-i参数指定清单

2、ungrouped列出清单中未在任何组中的主机

编辑默认清单文件,设置单层清单,定义两个组westos1和westos2

此时指定组的名称,即可列出指定组中的受控主机

编辑默认清单文件,设置嵌套清单,定义westos清单中有westos1和westos2两个子清单
此时指定嵌套清单的名称,即可列出其所有子清单的受控主机

3、编辑默认清单文件,通过指定组中主机名称或IP的范围可以简化ansible主机清单


4、在清单中添加受控主机时,除了使用ip,还可以使用受控主机的域名(前提是要有域名解析,不区分大小写)


5、清单中的正则表达式:编辑默认清单文件,在westos1组中添加ip为192网段的受控主机,另外定义组192

列出192*表示列出清单文件中所有以192开头的清单或清单中的主机(* 所有

列出清单文件中所有以172或192开头的清单或清单中的主机(:逻辑或

编辑默认清单文件,在westos2组中添加一个westos1组中已有的受控主机

列出清单文件中在westos1清单和westos2清单中都有的主机(:& 逻辑与

列出清单文件中在westos1清单但不在westos2清单中的主机(:!逻辑非(注意要用单引号引起来,“”转译不了!)

列出清单文件中以172开头的清单或清单中的主机(~ 以...开头

列出清单文件中以172或192开头的清单或清单中的主机(~(a|b) 以 a 或 b 开头

四、ansible配置文件的参数详解

ansible配置文件中常用参数的释义如下:

[default]           基本信息设定
inventory=          指定清单路径
remote_user=        在受管主机上登陆的用户名称,未指定使用当前用户
ask_pass=           是否提示输入SSH密码,如果公钥登陆设定为false
library=            库文件存放目录
local_tmp=          本机临时命令执行目录
remote_tmp=         远程主机临时py命令文件存放目录
forks=              默认并发数量
host_key_checking=  第一次连接受管主机时是否要输入yes建立host_key
sudo_user=          默认sudo用户
ask_sudo_pass=      每次在受控主机执行ansible命令时是否询问sudo密码
module_name=        默认模块,默认使用command,可以修改为shell
log_path=           日志文件路径[privilege_escalation]  身份信息设定
become=             连接后是否自动切换用户
become_method=      设定切换用户的方式,通常用sudo
become_user=        在受管主机中切换到的用户,通常为root
become_ask_pass=     是否需要为become_method提示输入密码,默认为false

实验步骤:
1、在ansible的主配置目录/etc/ansible中创建自定义清单文件westos并添加受控主机,此时无法列出清单中组内的受控主机

这是因为在ansibe的默认主配置文件中,指定的清单路径为/etc/ansible/hosts,我们需要在主配置文件中添加指定的清单路径(注意多个路径用,隔开)
此时可以成功列出自定义清单中指定组内的受控主机

2、主配置文件中的remote_tmp、local_tmp指定了在执行ansibble时,控制主机生成的python脚本临时文件的存放路径/位置,这些临时文件在控制命令结束后会自动删除

切换到指定的存放路径可以看到,此时目录为空

另外开启一个新的终端,远程连接到控制主机,开启监控实时查看指定的存放路径

此时显示目录为空

切换到ansible的主配置目录进行测试,执行等待100秒

查看监控界面可以看到在100秒内,这一指定临时文件存放路径中存在py临时文件

命令执行完毕后,再次查看监控界面显示目录为空,py临时文件自动删除


在命令执行的100秒内,受控主机的同一指定路径下也存在py临时文件,同样地在命令执行完成后自动删除

3、编辑主配置文件打开ask_pass

执行命令进行测试,可以看到在每次执行ansible时都会询问连接用户的密码(相当于-K参数)

编辑主配置文件关闭ask_pass

再次执行命令进行测试,可以看到在执行ansible时不再询问连接用户的密码

4、删除~/.ssh/known_hosts文件,当know_hosts文件不存在时,连接受控主机时会询问是否接收受控主机发送过来的身份认证key,需要输入yes,如果受控节点数量巨多会大大增加命令执行的时间开销

编辑主配置文件关闭host_key_checking,即不再询问是否接受受控主机发送过来的身份认证key
此时ssh远程连接受控主机时会自动输入yes,直接显示输入连接密码

5、编辑主配置文件设置默认使用的ansible模块为ping

此时执行ansible命令ping受控主机时不需要指定模块,会自动执行ping操作

6、使用ansible的shell模块测试在受控节点建立文件,文件创建失败,这是因为当前在受控主机中运行指令时用到的是devops普通用户身份,devops在执行命令时没有用sudo调用,没有真正提权
编辑主配置文件设置远程主机中用devops用户操作指令时转换用户身份,转换用户身份执行命令时用sudo调用(相当于–become参数),转换成root用户,执行sudo调用指令时不提示输入密码(NOPASSWD)

此时再次测试在受控节点建立文件,文件创建成功

7、编辑主配置文件设置执行ansible控制远程主机时用到的远程主机用户为所创建的devops

使用ansible的shell模块测试在受控节点建立文件,此时不需要使用-u参数指定以devops用户身份进行创建

五、构建用户级ansible操作环境

在实际应用中,对于不同的用户ansible的配置也不同,且ansible的默认主配置文件只有一个,因此一般不直接修改主配置文件,我们需要把ansible的配置根据用户独立出来。
实验步骤:
1、创建用户lee并设置用户密码,切换到所创建的用户,在当前用户的家目录下建立使用ansible的目录,进入目录生成自己的配置
2、编写主配置文件ansible.cfg(只写入需要的参数即可,这里~/表示当前用户家目录)
注意: ansible配置文件的优先级为—当前目录>当前用户家目录>ansible默认主配置目录/etc/ansible

3、在当前ansible的目录下创建对应的主机清单列表文件,添加受控主机

4、切换回超级用户,由于ansible控制主机本身也作为了受控主机,而当前控制主机中无配置文件中设定的在受控主机上登陆的devops用户,因此需要先创建devops用户并设置用户密码,再将受控主机的公钥复制给所创建的devops用户

再切换回lee用户,将受控主机的私钥复制给lee用户

5、切换回超级用户,为控制主机也是受控主机上执行ansible的登录用户devops提权

6、此时切换回lee用户,切换到当前用户家目录中的ansible配置目录(注意:执行ansible命令时必须在配置文件所在目录中,否则识别不了),执行命令测试所有受控主机可以成功ping通,用户级ansible操作环境构建成功

ansible自动化运维详解(一)ansible的安装部署、参数使用、清单管理、配置文件参数及用户级ansible操作环境构建相关推荐

  1. ansible自动化运维详解(三)ansible常用模块续

    文章目录 ansible自动化运维详解(三)ansible常用模块续 四.ansible常用模块(2) 4.10.yum_repository 4.11.dnf 4.12.service 及 fire ...

  2. @ansible自动化运维详解(总述)

    ansible [自动化运维应用场景] "运维的未来是,让研发人员能够借助工具.自动化和流程,并且让他们能够在运维干预极少的情况下部署和运营服务,从而实现自助服务.每个角色都应该努力使工作实 ...

  3. SaltStack 自动化运维详解

    一.自动化运维工具对比 使用所需软件配置单个服务器是一项相当简单的任务. 但是,如果许多服务器需要安装相同或相似的软件和配置,则该过程将需要大量的工时才能完成,这会耗尽您本已紧张的资源.如果没有某种形 ...

  4. Saltstack自动化运维详解(数据系统 jinja模板 job管理)

    文章目录 1. saltstack 的数据系统 1.1 SaltStack组件之Grains 1.grains使用方法 信息查询 查询某个key值 用Grains来匹配minion 2.自定义grai ...

  5. 大型企业中如何批量管理千万台服务器之ansible自动化运维工具详解 [⭐建议收藏⭐]

    文章目录 ansible 自动化运维工具 详解 关于作者 作者介绍 一.ansible 概述 1.1 ansible 概述 1.2 是什么要使用 ansible 1.3 ansible 功能 1.4 ...

  6. ansible自动化运维从入门到精通

    ansible自动化运维 Ansible介绍 Ansible是一个同时管理多个远程主机的软件(任何可以通过SSH协议登录的机器),因此Ansible可以管理远程虚拟机.物理机,也可以是本地主机. An ...

  7. Ansible自动化运维_超详细

    Ansible自动化运维 自动化运维工具简介 Puppet 自动运维工具特点: Saltstack 自动运维工具特点: Ansible 自动运维工具特点: Ansible 运维工具原理 Ansible ...

  8. Ansible自动化运维工具介绍

    介绍 Ansible自动化运维工具,是基于Python开发的,可以实现批量系统配置,批量程序部署.批量运行命令等等. ansible是基于模块工作的,本身没有批量部署的能力.真正具有批量部署的是ans ...

  9. 【Ansible自动化运维工具】Ansible变量之lookup生成变量方法

    [Ansible自动化运维工具]Ansible变量之lookup生成变量方法 一.lookup插件介绍 1.lookup简介 2.lookup使用场景 3.lookup获取的数据源 4.lookup的 ...

最新文章

  1. SQL Server数据库错误9003(LSN无效)的处理方法
  2. 从“埋点技术已死?”开始说起
  3. 用property声明属性时,strong,copy,weak的一般用法
  4. VTK:标量条形 Actor用法实战
  5. 用fft对信号进行频谱分析实验报告_FFT分析频谱无泄露的条件
  6. c语言第七章函数调用题库,c语言题库7-函数.doc
  7. 博客暂停通知-------10.1~11.24
  8. 武汉工程大学2020GPLT选拔赛(上)
  9. 关于js字符串替换的一道笔试题目
  10. HTC公布第二款区块链手机Exodus 1s:或将于9月前发售
  11. 大一计算机应用基础答案李小艳,13级幼师班期末考试计算机试题A卷
  12. 利用两数之和实现两个数交换(java版本)
  13. 工业交换机ERPS环网协议工作原理介绍
  14. 解决跨域问题报错When allowCredentials is true, allowedOrigins cannot contain the special value “*“ since tha
  15. 新战投入场,苏宁易购迎来破局发展新开端
  16. English Study
  17. 微信壁纸小程序源码修复图片无法下载-完美运营版本
  18. [M1]Daily Scum 9.29
  19. 4-基于51单片机的无线病床呼叫系统设计
  20. 推荐一个时间轴上的历史网站

热门文章

  1. 关于uniapp修改内部样式小程序无效的解决方法
  2. 深入分析配置静态路由与相关命令
  3. POJ - Oulipo(KMP)
  4. linux 挂载SD卡和扩展虚拟内存
  5. .NET项目中NLog的配置与使用
  6. ossim系统菜单中文汉化过程
  7. php查询车辆违章付费源码,全国交通违章查询
  8. Angry Birds专用平板Wopad V7+,深圳造
  9. 文件夹中删除的文件怎么找回?
  10. 入栏需看——全国硕士研究生入学统一考试管理类专业学位联考