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

Posted 是大姚呀

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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执行特定任务的代码块
Taskansible客户主机上执行的操作
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操作环境构建的主要内容,如果未能解决你的问题,请参考以下文章

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

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

自动化运维之ansible详解

自动化运维工具ansible详解

ansible自动化运维工具使用详解

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