第三阶段基础
时 间:2023年7月13日
参加人:全班人员
内 容:
Ansible自动化运维工具
目录
一、Ansible概述
二、Ansible特点
三、Ansible应用
(一)使用者
(二)Ansible工具集合
(三)作用对象
四、Ansible的搭建
五、Ansible配置
六、Ansible命令
(一)ansible
(二)Ansible-doc
(三)ansible-playbook
(四)ansible-console
七、Ansible模块
(一)command模块
(二)shell模块
(三)raw模块
(四)copy模块
(五)hostname模块
(六)yum模块
(七)service模块
Ansible是最近非常火的一款开源运维自动化工具,通过Ansible可以实现运维自动化,提高运维工程师的工作效率,减少人为失误;
Ansible可以通过本身集成的非常丰富的模块实现各种管理任务,其自带模块数量已超过上千个,更为重要的是,它的操作非常简单,即使新手也比较容易上手;
Ansible提供的功能却非常丰富,在运维领域,几乎可以实现任何事情。目
前属于RedHat公司产品,官方地址:
Ansible is Simple IT Automation。
Ansible自2012年发布以来,很快在全球流行!
其特点表现如下:
1、基于python开发,运维工程师对其二次开发相对容易;
2、拥有丰富的内置模块,基本可以满足一切要求;
3、管理模式非常简单,一条命令可以影响上千台机器;
4、无客户端模式设计,底层基于SSH通信;
5、Ansible发布后也陆续被AWS,Google,Cloud Platfrom,Microsoft Azure,Cisco,HP,VMware,Twitter等大公司接纳并投入使用。
Ansible没有客户端,也不需要在被管理主机添加任何代理程序,通过SSH完成底层通信,而SSH在Linux的发型版本中默认已经安装并启用,而在Windows系统下则依赖于PowerShell。
Ansible要求管理端必须是Linux系统,在管理节点通过应用模块将指令发送到被管理主机上,并在执行完毕后自动删除产生的临时文件,根据Ansible使用过程中不同角色,可将其分为三个部分:
1、使用者如何使用Ansible实现自动化运维?
2、Ansible的工具集,Ansible可以实现的功能?
3、作用对象,Ansible可以影响哪些主机?
如图所示:Ansible使用者可以采用多种方式和Ansible交互,图中我们展示了四种方式
CMDB:CMDB系统存储和管理着企业IT架构中的各种配置信息,是构建ITL项目核心工具,运维人员可以组合CMDB和Ansible,通过CMDB直接下发指令调用Ansible工具完成操作者所希望达到的目标。
PUBLIC/PRIVATE方式:Ansible除了丰富的内置模块外,同时提供丰富的API语言接口,如PHP,Pythone,PERL等多种流行语言,基于PUBLIC/PRIVATE,Ansible以API调用的方式运行。
Ad-Hoc命令集:Users直接通过Ad-Hoc命令集调用Ansible工具来完成工作。
Playbooks:Users预先编写好Ansible Playbooks,通过执行Playbooks中预先编排好的任务集按序执行命令。
Ansible工具集合了inventory,Moudles,Plugins和API。其中:
inventory用来管理设备列表,可以通过分组(不同的业务)实现,对组的调用直接影响组内所有的主机;Moudles是各种执行模块,几乎所有的管理任务都是通过模块来执行的;Plugins提供了各种附加功能;API为编程人员提供了一个调用接口,可以做Ansible的二次开发具体表现如下:
1、Ansible Playbook:任务脚本,编排定义Ansible任务集的配置文件,由Ansible按序依次执行,通常是JSON格式的YML/YAML文件;
2、inventory:Ansible管理主机清单;
3、Moudle:Ansible执行命令功能模块,多数为内置的核心模块也可以用户自定义;
4、Plugins:模块功能的补充,如连接类型插件,循环插件,变量插件,过滤插件等,该功能不常用;
5、API:提供第三方程序调用的应用程序编程接口;
Ansible:该部分图中表示的,组合inventory,API,Moudles,Plugins可以理解为Ansible命令工具其核心执行工具。
Ansible的作用对象不仅仅是Linux和非Linux操作系统的主机,也可以作用于各类PUBLIC/PRIVATE,商业和非商业设备的网络设施。
使用者使用Ansible或Ansible-playbooks时,在服务器终端输入Ansible的Ad-Hoc命令集或playbooks后,Ansible会遵循预先定义安排的规则将Playbooks逐步拆解为Play,再将Play组织成Ansible可以识别的任务,随后调用任务涉及的所有模板和插件,根据inventory中自定义的主机列表通过SSH将任务集以临时文件或命令的形式传输给远程客户端执行并返回执行结果,如果是临时文件则执行完毕后自动删除。
接下来我们来学习Ansible的安装和部署。Ansible的安装部署非常简单,以RPM安装为例,配置好阿里云的yum源直接安装就可以了,Ansible的管理端只能是Linux,如Redhat,Debian,CentOS。下面介绍在CentOS7.x上安装部署Ansible:
实验环境:
服务器准备:
角色 |
ip地址 |
主机名 |
Ansible |
192.168.59.137 |
huyang1 |
Client |
192.168.59.138 |
huyang2 |
Client |
192.168.59.140 |
huyang3 |
环境配置:【所有服务器操作】
1、关闭防火墙
systemctl stop firewalld
iptables -F
setenforce 0
2、配置免密登录
【huyang1】ssh-keygen
【huyang1】ssh-copy-id 192.168.59.138
【huyang1】ssh-copy-id 192.168.59.140
登录测试:
【huyang1】ssh 192.168.59.138
【huyang1】ssh 192.168.59.140
步骤一:下载安装ansible软件
yum -y install ansible
步骤二:修改配置文件
vim /etc/ansible/hosts
修改配置如下:
步骤三:ping测试;批量显示hu组中的磁盘使用情况
ansible -i /etc/ansible/hosts hu -m ping
ansible hu -m command -a "df -hT" 不指定IP地址
ansible hu -m command -a "df -hT" --limit 192.168.59.138 指定IP地址
也可以:不指定组、但指定ip地址(在组内)
ansible 192.168.59.138 -m command -a "df -hT"
Ansible的维护命令大多以ansible开头,在终端输入ansible后连续按两次tab键,会补全所有以ansible字母开头的命令,下面介绍Ansible的一些常用命令。
Ansible是生产环境中使用非常频繁的命令之一,
主要在以下场景应用:
1、非固化需求;
2、临时一次性操作;
3、二次开发接口调用;
非固化需求是指临时性的维护,如查看hu服务器组的磁盘使用情况,复制一个文件到其他机器等,类似这些没有规律的,临时需要做的任务,我们称为非固化需求,临时一次性操作。
语法:ansible
[options]
可用选项如下:
-v(--verbose):输出详细的执行过程信息,可以得到执行过程所有信息;
-i PATH(inventory=PATH):指定inventory信息,默认为/etc/ansible/hosts;
-f NUM(--forks=NUM):并发线程数,默认为5个线程
--private-key=PRIVATE_KEY_FILE:指定密钥文件
-m NAME,--moudle-name=NAME:指定执行时使用的模块
-M DIRECTORY(--module-path=DIRECTORY):指定模块存放路径,默认为/usr/share/ansible,也可以通过ANSIBLE_LIBRARY设定默认目录
-a ARGUMENTS(--args=ARGUMENTS):指定模块参数
-u USERNAME(--user=USERNAME):指定远程主机USERNAME运行命令
-l subset(--limit=SUBSET):限定运行主机
--list-hosts:列出符合条件的主机列表,不执行任何命令
实验:(当前组内只有2个服务器)
1.检查所有主机是否存活,ping服务器,同时ping!
ansible all -f 5 -m ping
ansible all -m ping 两者效果一样,默认同时ping5个
2.列出hu组中所有主机列表
ansible hu --list-host
Ansible的返回结果非常友好,一般会用三种颜色执行结果:
红色,绿色和橘黄色,其中:
红色表示执行过程中有异常;
橘黄色表示命令执行后目标有状态变化;
绿色表示执行成功且没有对目标机器做修改。
ansible-doc用来查询ansible模块文档的说明,类似于man命令,针对每个模块都有详细的用法说明及应用案例介绍:
ansible-doc -l #查看总帮助
ansible-doc -s shell #查看shell模块的帮助
ansible-doc -s raw
语法:ansible-doc [options] [module……]
实验:
1.列出支持的模块
ansible-doc -l
2.查询ping模块的说明信息
ansible-doc ping 类似于ansible-doc -s ping
Ansible-playbook是日常应用中使用频率最高的命令,类似于Linux系统中的sh或source命令,用来执行系列任务,其工作机制是:
通过读取编写好的playbook文件实现集中处理任务,ansible-playbook命令后跟yml或者yaml格式的playbook文件,playbook文件存放了要执行的任务代码,命令使用方式如下
语法:ansible-playbook playbook.yml
ansible-playbook需要之前编译好、建议写playbook.yml文件的绝对路径
此处为重点,将在明天的文章中体现!!!
ansible-console是ansible为用户提供的一款交互式工具,类似于Windows中的cmd以及Linux中的shell;
用户可以在ansible-console虚拟出来的终端上做像shell一样使用ansible内置的各种命令;
这为习惯于使用shell交互方式的用户提供了良好的体验,在终端输入ansible-console命令后显示如下:
所有操作与shell类似,而且支持Tab键补全,按快捷键Ctrl+D或Ctrl+C或exit即可退出当前的虚拟终端。
command模块在远程主机执行命令,但是不支持管道,重定向等shell的特征,常用参数如下(不支持管道,不建议使用):
chdir:在远程主机上运行命令前要提前进入的目录;
creates:在命令运行时创建一个文件,如果文件已经存在,则不会创建任务;
removes:在命令运行时移除一个文件,如果文件不存在,则不会执行移除任务;
executable:指明运行命令的shell程序。
实验:
新建文件,可以成功,但是在重定向和使用管道符统计信息时,command模块不支持!
shell模块在远程主机执行命令,相当于调用远程主机的shell进程,然后在该shell下打开一个子shell运行命令,和command模块的区别:
它支持shell特征,如管道,重定向等
实验:
1、重定向(单个ip和一组)
ansible 192.168.59.138 -m shell -a "echo hello > 1.txt"
ansible hu -m shell -a "echo hello > 1.txt"
2、测试管道符
ansible Rich -m shell -a “ifconfig ens32 | awk ‘NR==2{print $2}’”
通过上述实验可以得知,shell模块相比于command,在command的使用基础上,支持重定向和管道符;但是ansible在使用过程中也有一些短处,如上实验,在选择显示ip地址时,ansible只能显示当前行,却不能选择列。
最原始的方式运行命令(不依赖python,仅通过ssh实现)
实验:
清除yum缓存
ansible hu -m raw -a "yum clean all"
ansible hu -m shell -a "yum clean all"
相比与使用shell有一些区别
copy模块用于复制指定主机文件到远程主机的指定位置,常见参数如下:
dest:指出复制文件的目标目录位置,使用绝对路径。如果源是目录,指目标也要是目录,如果目标文件已经存在会覆盖原有内容。
src:指出源文件的路径,可以使用相对路径或绝对路径,支持直接指定目录,如果源是目录则目标也要是目录
mode:指出复制时,目标文件的权限 可选
owner:指出复制时,目标文件的属主 可选
group:指出复制时,目标文件的属组 可选
content:指出复制到目标主机上的内容,不能与src一起使用,相当于复制content指明的数据到目标文件中
特别提示:
参数:backup=yes===>意思是,如果目标路径下,有与我同名但不同内容的文件时,在覆盖前,对目标文件先进行备份。
所有被管理端节点必须安装libselinux-python包
实 验:
将hu组中主机的/root/a.txt文件拷贝到/root下
指定权限为777 属主为root 属组为root
ansible hu -m copy -a "src=/root/a.txt dest=/root mode=777 owner=root group=root"
hostname模块用于管理远程主机上的主机名,常用参数如下:
name:指明主机名
实验:
更改huyang2(192.168.59.138)的主机名为hu
ansible 192.168.59.138 -m hostname -a "name=hu"
yum模块基于yum机制,对远程主机管理程序包,常用参数如下:
name:程序包的名称,可以带上版本号,如不指定版本号默认安装为最新版本;
state=present | latest | absent:指明对程序包执行的操作,present表示安装程序包,latest表示安装最新版本的程序包,absent表示卸载程序包;
disablerepo:在用yum安装时禁用某个仓库的ID;
enablerepo:在用yum安装时启用某个参考的ID;
conf_file:yum运行时的配置文件而不是使用默认的配置文件;
diable_gpg_check=yes | no:是否启用完整性校验功能。
实验:
注意实验前要在服务器端配置yum仓库;
管理员只是发送yum命令道被管理端,被管理端要存在可用的yum仓库才可以成功安装。
1. client端yum安装httpd,安装需要时间
ansible hu -m yum -a "name=httpd state=present"
service模块为用来管理远程主机上的服务的模块,常见参数如下:
name:被管理的服务名称
state=started | stopped | restarted:动作包含启动关机或重启
enabled=yes | no:表示是否设置该服务开机自启动
runlevel:如果设定了enabled开机自启动,则要定义在哪些运行目标下自启动
实验:
启动httpd服务并设置为开启自启动
服务器端准备操作 #如果没有需要进行安装
ansible hu -m service -a "name=httpd state=started enabled=yes"