Ansible概述以及模块

news2024/11/20 9:21:26

目录

一、Ansible概述

1、Ansible是什么

2、Ansible的作用

3、Ansible的特性

4、Ansible的工作机制

5、Ansible的特点

二、Ansible安装部署

1、管理端安装ansible

2、配置主机清单

3、配置密钥对验证

三、Absible命令行模块

1、command模块

2、shell模块

3、cron 模块

4、user 模块

5、group 模块

6.copy 模块

7、file 模块

8、hostname 模块

9、ping 模块

10、yum 模块

11、service/systemd 模块

12、script 模块

13.setup 模块

四、inventory主机清单

1、主机变量

2、组变量

3、组嵌套

一、Ansible概述

1、Ansible是什么

Ansible是一个基于Python开发的配置管理和应用部署工具,现在也在自动化管理领域大放异彩。它融合了众多老牌运维工具的优点,Pubbet和Saltstack能实现的功能,Ansible基本上都可以实现。

2、Ansible的作用

Ansible能批量配置、部署、管理上千台主机。比如以前需要切换到每个主机上执行的一或多个操作,使用Ansible只需在固定的一台Ansible控制节点上去完成所有主机的操作。

3、Ansible的特性

  • Ansible其中一个比较鲜明的特性是Agentless,即无Agent的存在,它就像普通命令一样,并非C/S软件,也只需在某个作为控制节点的主机上安装一次Ansible即可,通常它基于ssh连接来控制远程主机,远程主机上不需要安装Ansible或其它额外的服务。
  • 使用者在使用时,在服务器终端输入命令或者playbooks,会通过预定好的规则将playbook拆解为play,再组织成ansible可以识别的任务,调用模块和插件,根据主机清单通过SSH将临时文件发给远程的客户端执行并返回结果,执行结束后自动删除
  • 使用者在使用时,在服务器终端输入命令或者playbooks,会通过预定好的规则将playbook拆解为play,再组织成ansible可以识别的任务,调用模块和插件,根据主机清单通过SSH将临时文件发给远程的客户端执行并返回结果,执行结束后自动删除
  • Ansible的另一个比较鲜明的特性是它的绝大多数模块都具备幂等性(idempotence)。所谓幂等性,指的是多次操作或多次执行对系统资源的影响是一致的。比如执行 systemctl stop xxx 命令来停止服务,当发现要停止的目标服务已经处于停止状态, 它什么也不会做,所以多次停止的结果仍然是停止,不会改变结果,它是幂等的,而 systemctl restart xxx 是非幂等的。

Ansible的很多模块在执行时都会先判断目标节点是否要执行任务,所以,可以放心大胆地让Ansible去执行任务,重复执行某个任务绝大多数时候不会产生任何副作用。

4、Ansible的工作机制

Ansible是基于模块工作的,它只是提供了一种运行框架,它本身没有完成任务的能力,真正执行操作的是Ansible的模块, 比如copy模块用于拷贝文件到远程主机上,service模块用于管理服务的启动、停止、重启等。

  • Ansibe:核心组件 核心程序

  • host Inventory:记录有ansibe管理的主机信息(包括端口、IP、密码等。)

  • playbook:”剧本“ YAML格式文件,多个任务定义在一个文件中,定义主机需要哪些模块完成任务

  • core modules:核心模块,主要通过调用核心的模来管理任务

  • custo modlues:自定义模块,完成核心模块无法完成的功能。支持多个语言

  • connection Plugins:连接插件 ansible和HOST通信使用

5、Ansible的特点

  1. 部署简单,只需在主控端部署Ansible环境, 被控端无需做任何操作
  2. 默认使用SSH协议设备进行管理;
  3. 主从集中化管理
  4. 配置简单、功能强大、扩张性强;
  5. 支持API及自定义模块,可以通过Pyhton轻松扩展
  6. 通过playbooks 来定制强大的配置、状态管理
  7. 对云计算平台、大数据都有很好的支持

二、Ansible安装部署

管理端:192.168.247.10ansible
被管理端1:192.168.247.22
被管理端2:192.168.247.23

1、管理端安装ansible

yum install -y epel-release			//先安装 epel 源
yum install -y ansible
  • 先安装epel源

  • yum安装ansible

安装好后在 /etc/ansible目录下会生成三个文件:

  • ansible.cfg:ansible的配置文件,一般无需修改
  • hosts:ansible的主机清单,用于存储需要管理的远程主机的相关信息
  • roles:公共角色目录

2、配置主机清单

cd /etc/ansible 
vim hosts       
[webservers]			#配置组名
192.168.247.22			#组里包含的被管理的主机IP地址或主机名(主机名需要先修改/etc/hosts文件)


[dbservers]
192.168.247.23

3、配置密钥对验证

ssh-keygen -t dsa	#一路回车,使用免密登录
ssh-copy-id -i /root/.ssh/id_dsa.pub root@192.168.247.22
ssh-copy-id -i /root/.ssh/id_dsa.pub root@192.168.247.23 

三、Absible命令行模块

命令格式:ansible <组名> -m <模块> -a <参数列表>

ansible-doc -l				#列出所有已安装的模块,按q退出

1、command模块

在远程主机执行命令,不支持管道,重定向等shell的特性。

ansible-doc -s command		#-s 列出指定模块的描述信息和操作动作

ansible 192.168.247.22 -m command -a 'date'		#指定 ip 执行 date
ansible webservers -m command -a 'date'			#指定组执行 date
ansible dbservers -m command -a 'date'       
ansible all -m command -a 'date'				#all 代表所有 hosts 主机
ansible all -a 'ls /'							#如省略 -m 模块,则默认运行 command 模块

常用参数:

  • chdir:在远程主机上运行命令前提前进入目录
  • creates:判断指定文件是否存在,如果存在,不执行后面的操作
  • removes:判断指定文件是否存在,如果存在,执行后面的操作

2、shell模块

在远程主机执行命令,相当于调用远程主机的shell进程,然后在该shell下打开一个子shell运行命令(支持管道符号等功能)

ansible-doc -s shell   #-s 列出指定模块的描述信息和操作动作

ansible dbservers -m shell -a 'echo 123456 | passwd --stdin test'
ansible dbservers -m shell -a 'echo $(ifconfig ens33 | awk "NR==2 {print $2}") | cut -d " " -f2'
ansible dbservers -m shell -a 'echo $(ifconfig ens33 | awk "NR==2 {print \$2}")'

可用选项:

  • chdir:切换目录
  • cmd:要运行的命令,后跟可选参数
  • creates:判断指定文件是否存在,如果存在,不执行后面的操作
  • executable:更改用于执行命令的shell。这需要一个可执行文件的绝对路径。
  • free_from:Shel模块接受一个自由形式的命令以字符串的形式运行
  • removes:判断指定文件是否存在,如果存在,执行后面的操作
  • stdin:直接将命令的stdin设置为指定值
  • stdin_add_newline:是否在stdin数据中追加换行符
  • warn:是否启用任务警告
ansible dbservers -m shell -a 'echo 123456 | passwd --stdin test'
ansible dbservers -m shell -a 'echo $(ifconfig ens33 | awk "NR==2 {print $2}") 

  • executable命令示例:
ansible 192.168.247.23 -m shell -a '/opt/ceshi.sh' -e 'executable=/bin/bash'

3、cron 模块

在远程主机定义任务计划。其中有两种状态(state):present表示添加(可以省略),absent表示移除。

ansible-doc -s cron				#按 q 退出

常用参数:

  • minute/hour/day/month/weekday:分/时/日/月/周
  • job:任务计划要执行的命令
  • name:任务计划的名称
ansible webservers -m cron -a 'minute="*/1" job="/bin/echo helloworld" name="test crontab"'
ansible webservers -a 'crontab -l'
ansible webservers -m cron -a 'name="test crontab" state=absent'			#移除计划任务,假如该计划任务没有取名字,name=None即可

4、user 模块

用户管理的模块

ansible-doc -s user  #-s 列出指定模块的描述信息和操作动作

常用的参数:

  • name:用户名,必选参数
  • state=present|absent:创建账号或者删除账号,present表示创建,absent表示删除
  • system=yes|no:是否为系统账号
  • uid:用户uid
  • group:用户基本组
  • shell:默认使用的shell
  • move_home=yse|no:如果设置的家目录已经存在,是否将已经存在的家目录进行移动
  • password:用户的密码,建议使用加密后的字符串
  • comment:用户的注释信息
  • remove=yes|no:当state=absent时,是否删除用户的家目录
ansible webservers -m user -a 'name="test01"'				#创建用户test01
ansible webservers -m command -a 'tail /etc/passwd'          #查看用户test01
ansible webservers -m user -a 'name="test01" state=absent'	#删除用户test01

5、group 模块

用户组管理的模块

ansible-doc -s group
ansible webservers -m group -a 'name=mysql gid=306 system=yes'	#创建mysql组
ansible webservers -a 'tail /etc/group'                          #查看创建的组
ansible webservers -m user -a 'name=test01 uid=306 system=yes group=mysql'	#将test01用户添加到mysql组中
ansible webservers -a 'tail /etc/passwd'
ansible webservers -a 'id test01'    

6.copy 模块

用于复制指定主机文件到远程主机的

ansible-doc -s copy

常用的参数:

  • dest:指出复制文件的目标及位置,使用绝对路径,如果是源目录,指目标也要是目录,如果目标文件已经存在会覆盖原有的内容
  • src:指出源文件的路径,可以使用相对路径或绝对路径,支持直接指定目录,如果源是目录则目标也要是目录
  • mode:指出复制时,目标文件的权限 
  • owner:指出复制时,目标文件的属主
  • group:指出复制时,目标文件的属组
  • content:指出复制到目标主机上的内容,不能与src一起使用
ansible dbservers -m copy -a 'src=/etc/fstab dest=/opt/fstab.bak owner=root mode=640'
ansible dbservers -a 'ls -l /opt'
ansible dbservers -a 'cat /opt/fstab.bak'

ansible dbservers -m copy -a 'content="helloworld" dest=/opt/hello.txt'  #将helloworld写入/opt/hello.txt文件中
ansible dbservers -a 'cat /opt/hello.txt' 

7、file 模块

设置文件属性

ansible-doc -s file
ansible dbservers -m file -a 'owner=test01 group=mysql mode=644 path=/opt/fstab.bak'	#修改文件的属主属组权限等
ansible dbservers -m file -a 'path=/opt/fstab.link src=/opt/fstab.bak state=link'    #设置/opt/fstab.link为/opt/fstab.bak的链接文件
ansible dbservers -m file -a "path=/opt/abc.txt state=touch"			#创建一个文件
ansible dbservers -m file -a "path=/opt/abc.txt state=absent"			#删除一个文件

8、hostname 模块

用于管理远程主机上的主机名

ansible dbservers -m hostname -a "name=mysql01"

9、ping 模块

检测远程主机的连通性

ansible all -m ping

10、yum 模块

在远程主机上安装与卸载软件包

ansible-doc -s yum
ansible webservers -m yum -a 'name=httpd'					#安装服务
ansible webservers -m yum -a 'name=httpd state=absent'		#卸载服务

11、service/systemd 模块

用于管理远程主机上的管理服务的运行状态

ansible-doc -s service

常用的参数:

  • name:被管理的服务名称
  • state=started|stopped|restarted:动作包含启动关闭或者重启
  • enabled=yes|no:表示是否设置该服务开机自启
  • runlevel:如果设定了enabled开机自启去,则要定义在哪些运行目标下自启动
ansible webservers -a 'systemctl status httpd'			#查看web服务器httpd运行状态
ansible webservers -m service -a 'enabled=true name=httpd state=started'			#启动httpd服务

12、script 模块

实现远程批量运行本地的 shell 脚本

ansible-doc -s script
vim test.sh
#!/bin/bash
echo "hello ansible from script" > /opt/script.txt

chmod +x test.sh
ansible webservers -m script -a 'test.sh'
ansible webservers -a 'cat /opt/script.txt'

13.setup 模块

facts 组件是用来收集被管理节点信息的,使用 setup 模块可以获取这些信息

ansible webservers -m setup				#获取mysql组主机的facts信息
ansible dbservers -m setup -a 'filter=*ipv4'    #使用filter可以筛选指定的facts信息

四、inventory主机清单

Inventory支持对主机进行分组,每个组内可以定义多个主机,每个主机都可以定义在任何一个或多个主机组内。

如果是名称类似的主机,可以使用列表的方式标识各个主机。

vim /etc/ansible/hosts
[webservers]
192.168.10.14:2222		#冒号后定义远程连接端口,默认是 ssh 的 22 端口
192.168.10.1[2:5]       #匹配范围为192.168.10.12---192.168.10.15
192.168.10.[11:30]      #匹配范围为192.168.10.11---192.168.10.30

[dbservers]
db-[a:f].example.org	#支持匹配 a~f

inventory 中的变量

Inventory变量名含义
ansible_hostansible连接节点时的IP地址
ansible_port连接对方的端口号,ssh连接时默认为22
ansible_user连接对方主机时使用的主机名。不指定时,将使用执行ansible或ansible-playbook命令的用户
ansible_password连接时的用户的ssh密码,仅在未使用密钥对验证的情况下有效
ansible_ssh_private_key_file指定密钥认证ssh连接时的私钥文件
ansible_ssh_common_args提供给ssh、sftp、scp命令的额外参数
ansible_become允许进行权限提升
ansible_become_method指定提升权限的方式,例如可使用sudo/su/runas等方式
ansible_become_user提升为哪个用户的权限,默认提升为root
ansible_become_password提升为指定用户权限时的密码

1、主机变量

[webservers]
192.168.247.70 ansible_port=22 ansible_user=root ansible_password=abc1234

2、组变量

[webservers:vars]			#表示为 webservers 组内所有主机定义变量
ansible_user=root
ansible_password=abc1234

[all:vars]					#表示为所有组内的所有主机定义变量
ansible_port=22

3、组嵌套

[nginx]
192.168.10.20
192.168.10.21
192.168.10.22

[apache]
192.168.10.3[0:3]

[webs:children]		#表示为 webs 主机组中包含了 nginx 组和 apache 组内的所有主机
nginx
apache

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1088601.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Jackson+Feign反序列化问题排查

概述 本文记录在使用Spring Cloud微服务开发时遇到的一个反序列化问题&#xff0c;RPC/HTTP框架使用的是Feign&#xff0c;JSON序列化反序列化工具是Jackson。 问题 测试环境的ELK告警日志如下&#xff1a; - [43f42bf7] 500 Server Error for HTTP POST "/api/open/d…

一篇文章让你了解“JWT“

一.JWT简介 1.概念 JWT (JSON Web Token) 是一种用于在网络上安全传输信息的开放标准&#xff08;RFC 7519&#xff09;。它是一种紧凑且自包含的方式&#xff0c;用于在不同组件之间传递信息&#xff0c;通常用于身份验证和授权目的。JWT 是以 JSON 格式编码的令牌&#xff…

Shell后门脚本

说明&#xff1a;请在云服务器中执行&#xff0c;执行脚本后会发生 1、创建${create_user}用户并赋予sudo权限2、获取公网IP地址和SSH端口3、将用户公网IPSSH端口信息发送给${mail_from}变量 #!/bin/bash # 收件人邮箱 mail_fromxxxxx.com sshd_port$(grep "^Port"…

AI低代码维格云甘特视图怎么用?

甘特视图,以日期为横轴展示任务持续时长和先后顺序,简称甘特图。 项目管理过程中,合理分配任务和资源至关重要,使用甘特图,妥当解决以下场景: 想知道整个项目的周期多长,哪些任务对项目的周期影响最大; 想知道每个任务的时间有多长,任务的优先级和依赖关系是什么; 想…

VUE3页面截取部署后的二级目录地址

用vue3开发了一个项目&#xff0c;只能部署在根目录&#xff0c;不能加二级目录&#xff0c;后来网上找了解决方案&#xff0c;在vite.config.ts中增加base: ./,配置解决问题&#xff0c;参考下图&#xff1a; 但部署后要获取部署的二级目录地址切遇到问题&#xff0c;后来想了…

SQL如何导入数据以及第一次上机作业

如何导入excel数据 首先得学会导入数据 使用excel格式不需要改成其它格式&#xff08;如csv&#xff0c;txt&#xff09;&#xff0c;因为你改了到时候还是会报错&#xff08;实践过使用Sum统计总数一直说我数据格式有问题&#xff09; 首先右键TSGL数据库->任务->导入数…

makefile规则查找

文章目录 对应 跟我一起写Makefile2.1**makefile** **的规则****2.2** **一个示例****2.5** **让** **make** **自动推导****2.6 makefile** **的另一种风格****2.7** **清空目录的规则****2.10** **包含其它** **Makefile****3.4** **文件搜寻****3.5** **伪目标****3.6** **多…

AWS香港Web3方案日,防御云安全实践案例受关注

9月26日&#xff0c;AWS合作伙伴之Web3解决方案日在香港举办。来自人工智能、Web3等领域的创业公司、技术专家、风险投资商&#xff0c;就元宇宙时代未来发展进行了深入交流。现场展示了顶象防御云在金融与Web3领域的安全实践案例。 Web3为互联网体系架构的一个整体演进和升级&…

LoRa技术未来发展前景:物联网和边缘计算的引领者

随着物联网和边缘计算的快速发展&#xff0c;低功耗广域网&#xff08;LoRa&#xff09;技术在连接远距离设备、实现长距离通信和满足低功耗需求方面崭露头角。本文将分析LoRa技术在未来的发展前景&#xff0c;尤其是在物联网和边缘计算领域的潜在影响。 LoRa技术的核心优势 1…

自动化产线集控系统(西门子CNC 840D/840DSL远程控制)

1.1项目背景 RQQ/VF120机组目前为1人操作3台机床&#xff0c;需在机台旁监控。为了改善人员在班中劳动强度非常大的现状&#xff0c;调整好每台机床的节奏&#xff0c;以保证机床的最少的等待时间。本项目旨在通过远程监视设备运行过程关键参数&#xff0c;操作人员人员可远程监…

清洁洗鞋商城小程序的作用是什么

人靠衣装&#xff0c;一身干净合身的衣物总是给人赏心悦目的感觉&#xff0c;人们对颜值要求越来越高&#xff0c;不仅是衣服&#xff0c;鞋也是重要的组成部分。各种品牌样式鞋&#xff0c;很多人家里往往有几十双&#xff0c;而在清洁这一块&#xff0c;没有时间、或材质特殊…

JS加密/解密之webpack打包代码逆向

Webpack 是一个强大的打包工具&#xff0c;能够将多个文件打包成一个或多个最终的文件。然而&#xff0c;将已经经过打包的代码还原回原始源代码并不是一件直接的事情&#xff0c;因为 webpack 打包的过程通常会对代码进行压缩、混淆和优化&#xff0c;丢失了部分变量名和代码结…

K8S环境搭建

K8S环境搭建 前置条件 部署3台VM&#xff0c;一台作为master,两台作为slave需要保障vm之间网络是互通的 为vm安装docker # 安装/更新 yum-utils yum install -y yum-utils#添加阿里镜像稳定版仓库 sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce…

TCP/IP(六)TCP的连接管理(三)半连接

一 半连接和全连接 内容参考小林coding 说明&#xff1a; 普通中小厂不会问的这么深,这么细,但是当性能调优阶段必须掌握原理 ① 内容提纲 ② 概念 说明&#xff1a; 半连接只是一个中间状态 ② 图谱 二 半连接 ① 查看 TCP 半连接队列长度 root 用户 执行 --> …

mysql面试题45:读写分离常见方案、哪些中间件可以实现读写分离

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:说一说你知道的读写分离常见方案 读写分离是一种常见的数据库架构方案,旨在分担数据库的读写压力,提高系统的性能和可扩展性。以下是两种常见的…

图解==>渗透测试KAILI系统的基本操作(第九课)

渗透测试KAILI系统的基本操作(第九课) 渗透测试KAILI系统的安装环境(第八课)-CSDN博客 第一部分 认识KAILI操作系统的使用 以2022年版本为例 第二部分 kaili 最新版本的操作系统 的图形话页面 英文版本 第三部分 13条基础命令操作回顾 1 第一条命令 ls ls/ less cat …

与领航者共话湖仓, StarRocks Summit 2023 技术专场分论坛剧透来了!

过去一年里&#xff0c;越来越多的企业开始为自有大数据平台引入湖仓一体数据架构方案&#xff0c;来解决实际的业务问题&#xff1a; 微信实现多个平台数据需求统一&#xff0c;将平均数据查询速度提升 3 倍。 芒果TV 构建全新统一湖仓分析架构&#xff0c;将线上性能提升至原…

C++数位动态规划算法:统计整数数目

题目 给你两个数字字符串 num1 和 num2 &#xff0c;以及两个整数 max_sum 和 min_sum 。如果一个整数 x 满足以下条件&#xff0c;我们称它是一个好整数&#xff1a; num1 < x < num2 min_sum < digit_sum(x) < max_sum. 请你返回好整数的数目。答案可能很大&…

LeetCode【48】旋转图像

题目&#xff1a; 思路&#xff1a; 第一种思路&#xff1a;使用额外二维矩阵&#xff0c;变化后的直接存入额外的矩阵&#xff0c;不符合题意 以示例2中&#xff0c;第3行&#xff0c;第1列的13为例&#xff0c;旋转后&#xff0c;变为了第1行&#xff0c;第2列 旋转90 后行的…

Chrome Extensions v3 迁移清单

一、前置问题 1.1为什么需要迁移 v3&#xff1f; Chrome 计划完全停止 v2 版本维护&#xff0c;后续 v2 版本将无法上架谷歌插件商店&#xff0c;除此之外&#xff0c;未来新版本 Chrome 对于 v2 版本插件的限制会越来越大&#xff0c;比如安全性限制 iframe 嵌套只能通过沙盒…