自动化运维工具—Ansible概述

Ansible是什么?

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

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

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

Ansible的四个组件:

  • Inventory 主机清单(主机组)
  • Modules 模块
  • Plugins 插件
  • Playbooks 剧本(相当于脚本)

Ansible的特性

(1)特性一:

Ansible其中一个比较鲜明的特性Agentless,即无Agent的存在(无代理端,即无客户端),它就像普通命令一样, 并非c/s软件,也只需在某个作为控制节点的主机上安装一次Ansible即可,通常它基于ssh连接来控制远程主机,远程主机上不需要安装Ansible或其它额外的服务。

使用者在使用时,在服务器终端输入命令或者playbooks,会通过预定好的规则将playbook拆解为play(一个play就是一个Linux操作),再组织成ansible可以识别的任务,调用模块和插件,根据主机清单通过SSH将临时文件发给远程的客户端执行并返回结果,执行结束后自动删除。

(2)特性二:

Ansible的另一个比较鲜明的特性是它的绝大多数模块都具备幂等性(idempotence)。所谓幂等性,指的是多次操作或多次执行对系统资源的影响是一致的。

比如执行 systemctl stop xxx 命令来停止服务,当发现要停止的目标服务已经处于停止状态,它什么也不会做,所以多次停止的结果仍然是停止,不会改变结果,它是幂等的,而systemctl restart xxx是非幂等的。

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

Ansible 环境安装部署

实验环境:

角色IP安装工具
管理端192.168.161.151ansible
被管理端192.168.161.152无需安装
被管理端192.168.161.153无需安装
被管理端192.168.161.154无需安装

安装部署:

#1、管理端安装ansibleyum install -y epel-release   #先安装epel源yum install -y ansible        #安装ansible​#ansible目录结构[root@localhost ~]## cd /etc/ansible[root@localhost ansible]# tree.├── ansible.cfg├── hosts└── roles​1 directory, 2 files​​#2、配置主机清单,修改/etc/ansible/hosts文件cd /etc/ansiblevim hosts[webservers]    #配置组名192.168.161.152  #组里包含被管理的主机IP或主机名(主机名需要先修改/etc/hosts文件)192.168.161.153​[dbservers]      #第二个组192.168.161.154​#3、ansible默认使用ssh连接,所以管理前要设置免密登录#配置密钥对验证ssh-keygen -t rsa    #一路回车,生成密钥文件​vim /etc/ssh/ssh_config      #修改ssh客户端配置文件StrictHostKeyChecking no     #35行,取消注释,将ask修改为no,开启免交互​systemctl restart sshd       #重启sshd​#使用sshpass,以免交互的方式将公钥文件传给被管理端,实现免密登录sshpass -p '144080' ssh-copy-id root@192.168.161.152sshpass -p '144080' ssh-copy-id root@192.168.161.153sshpass -p '144080' ssh-copy-id root@192.168.161.154​#如果被管理端主机有很多台,可以通过sshpass和for循环写一个脚本,实现多台主机免密登录。

ansible常用的命令行模块

ansible管理命令:

 ansible <组名> -m <模块> -a <参数列表>​ansible <主机IP> -m <模块> -a <参数列表>​ansible <主机名> -a <参数列表>      #不加-m指定模块默认使用command​#选项解释-m: 指定模块-a: 指定命令

查看ansible的模块:

 ansible-doc -l   #列出所有已安装的模块,按q退出​ansible-doc -l | wc -l   #统计总共有多少模块3387​ansible-doc -s 模块   #查看指定模块的描述信息和操作动作

command模块

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

ansible-doc -s command   #-s列出指定模块的描述信息和操作动作​#指定ip执行dateansible 192.168.161.152-m command -a 'date'   #-a指定命令​#指定组执行date命令ansible webservers -m command -a 'date'     #指定webservers组执行date命令ansible dbservers -m command -a' date'      #指定dbservers组执行date命令ansible all -m command -a ' date'           #all代表所有hosts 主机ansible all -a 'date'                      #如省略-m模块,则默认运行command 模块​​##常用的参数:chdir:在远程主机上运行命令前提前进入目录creates:判断指定文件是否存在,如果存在,不执行后面的操作removes:判断指定文件是否存在,如果存在,执行后面的操作​#无论管理端当前在哪个目录,执行命令都是在被管理端的家目录进行操作,可以使用chdir参数先切换目录ansible dbservers -m command -a "chdir=/home ls ./"   #切换到/home目录下再执行命令​#creates判断目标主机的指定是否存在,如果存在,则不执行后面的操作ansible dbservers -m command -a "creates=/data/f1.txt date"ansible dbservers -m command -a "creates=/data/aa.txt date"​#removes判断目标主机的指定是否存在,如果存在,执行后面的操作ansible dbservers -m command -a "removes=/data/f1.txt date"ansible dbservers -m command -a "removes=/data/aa.txt date"

常用参数示例:

(1)chdir

在远程主机上运行命令前提前进入目录

 #无论管理端当前在哪个目录,执行命令都是在被管理端的家目录进行操作,可以使用chdir参数切换目录。​#目标主机切换到/home/目录后,再执行命令[root@localhost ~]# ansible dbservers -m command -a "chdir=/home ls ./"192.168.161.154 | CHANGED | rc=0 >>csmysql#目标主机切换到/opt/目录后,再执行命令[root@localhost ~]# ansible dbservers -m command -a "chdir=/opt ls ./"192.168.20.40 | CHANGED | rc=0 >>mysql-5.5.24mysql-5.5.24.tar.gznfsrh

(2)creates

判断指定文件是否存在,如果存在,不执行后面的操作。

 #creates判断目标主机的指定文件是否存在,如果存在,则不执行后面的操作​#查看目标主机的/data目录,只有f1.txt文件[root@localhost ~]# ansible dbservers -m command -a "chdir=/data ls ./"
192.168.161.154 | CHANGED | rc=0 >>
f1.txt#判断/data/f1.txt是否存在,因为存在,所以跳过后面的命令操作
[root@localhost ~]# ansible dbservers -m command -a "creates=/data/f1.txt date"
192.168.161.154 | SUCCESS | rc=0 >>
skipped, since /data/f1.txt exists#判断/data/aa.txt是否存在,因为不存在,所以执行后面的date命令
[root@localhost ~]# ansible dbservers -m command -a "creates=/data/aa.txt date"
192.168.161.154 | CHANGED | rc=0 >>
2023年 7月 27日 星期四 15:54:52 CST

(3)removes

判断指定文件是否存在,如果存在,执行后面的操作。

 #判断/data/f1.txt是否存在,因为存在,所以执行后面的date命令[root@localhost ~]# ansible dbservers -m command -a "removes=/data/f1.txt date"
192.168.161.154 | CHANGED | rc=0 >>
2023年 7月 27日 星期四 15:54:52 CST#判断/data/aa.txt是否存在,因为不存在,所以跳过后面的操作
[root@localhost ~]# ansible dbservers -m command -a "removes=/data/aa.txt date"
192.168.161.154 | SUCCESS | rc=0 >>
skipped, since /data/aa.txt does not exist

shell模块

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

 ansible-doc -s shell  #查看shell模块的描述信息和操作动作​#shell模块支持重定向功能ansible dbservers -m shell -a 'echo hello> /opt/abc.txt'​#shell模块支持管道符号。ansible dbservers -m shell -a 'echo 123456| passwd -stdin hang'   #免交互的方式修改用户密码​#过滤出ens33网卡的地址ansible dbservers -m shell -a 'ifconfig ens33 | awk "NR==2 {print $2}"'  #要在$前加\让awk使用,不然ansible会认为是变量

示例:

shell模块支持重定向功能。

#shell模块支持重定向功能[root@localhost ~]# ansible dbservers -m shell -a 'echo hello> /opt/abc.txt'192.168.161.154 | CHANGED | rc=0 >>[root@localhost ~]# cd /opt/[root@localhost opt]# lsabc.txt  rh[root@localhost opt]# cat abc.txthello

cron模块

在远程主机定义任务计划。其中有两种状态(state) :

  • present 表示添加(可以省略)
  • absent 表示移除。
 ansible-doc -s cron    #查看cron模块包含的操作动作​#常用的参数: minute/hour/day/month/weekday:分/时/日/月/周job:任务计划要执行的命令,尽量使用绝对路径。name:任务计划的名称。

ser模块

管理用户的模块。

ansible-doc -s user    #查看user模块包含的操作动作

常用参数:

参数说明
name用户名,必选参数。
state=present 或 absent创建账号或者删除账号,present表示 创建,absent 表示删除。
system=yes 或 no是否为系统账号。
uid用户uid。
group用户基本组。
groups用户附加组。
shell默认使用的登录shell
move_home=yes 或 no如果设置的家目录已经存在,是否将已经存在的家目录进行移动。
password用户的密码,建议使用加密后的字符串。
comment用户的注释信息。
remove=yes 或 no表示当state=absent时,是否删除用户的家目录。即删除用户时,是否同时删除家目录。yes表示删除用户的家目录。

group模块

管理用户组的模块。

注意:字符串类型的值建议加双引号,防止有空格。数字和布尔值不要加双引号。

 ansible-doc -s group    #查看group模块包含的操作动作​#创建mysql组,设置为系统组。ansible dbservers -m group -a 'name="mysql" gid=306 system=yes'ansible dbservers -a 'tail -3 /etc/group'​#创建用户test02,设置为系统用户,基本组设置为mysql组。ansible dbservers -m user -a 'name="test02" uid=306 system=yes group="mysql"'ansible dbservers -a 'id test02'

copy模块

用于将本地文件复制到远程主机。

 ansible-doc -s copy     #查看copy模块包含的操作动作

常用参数:

参数说明
src指出源文件的路径(位于控制节点,即管理端),可以使用相对路径或绝对路径,支持直接指定目录,如果源是目录则目标也要是目录。
dest指出复制文件的目标及位置,使用绝对路径,如果源是目录则目标也要是目录,如果目标文件已经存在会覆盖原有的内容。
mode指出复制时,目标文件的权限。
owner指出复制时,目标文件的属主。
group指出复制时,目标文件的属组。
content

指出复制到目标主机上的内容,不能与src一起使用。

file模块

为远程主机创建/删除文件或目录,设置文件属性。

主要参数如下:

参数说明
path指定远程服务器的路径,也可以写成"dest","name"
state状态,可以将值设定为directory表示创建目录,设定为touch表示创建文件,设定为link表示创建软链接,设定为hard表示创建硬连接,设定为absent表示删除目录文件或链接
mode文件复制到远程并设定权限,默认file=644,directory=755
owner文件复制到远程并设定属主,默认为root
group文件复制到远程并设定属组,默认为root
recurese递归修改
src指的是目标主机上的源文件。与copy模块不同。

hostname模块

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

 ansible dbservers -m hostname -a 'name=myhost7-4'  #修改dbservers组的主机名

ping模块

测试远程主机的连通性。

 ansible all -m ping   #测试所有主机的连通性

yum模块

在远程主机上安装与卸载软件包, 需要被管理端配置好yum源。

主要的参数如下:

参数说明
name指定安装软件包名或软件包URL
state指定yum对应的方法,present(默认)、installed表示安装、latest表示安装最新版本软件包;absent、removed表示卸载。支持多程序一起安装,用逗号隔开。
enablerepo允许从哪些仓库获取软件
disablerepo禁止从哪些仓库获取软件
exclude排除某些软件包,例如kernel
download_only仅下载软件包,不安装
disable_gpg_check不进行gpg检测
update_cache可以在安装包的同时更新yum缓存

service/systemd 模块

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

主要参数如下:

参数说明
name指定需要控制的服务名称
state指定服务状态,其值可以为stopped、started、reloaded、restarted、status
enabled指定服务是否为开机启动,yes为启动,no为不启动
daemon_reloadyes:重启systemd服务,让unit文件生效

script 模块

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

注意:script模块不具有幂等性。所以建议用剧本来执行。

 ansible-doc -s script​#在本地写一个脚本vim test.sh#!/bin/bashecho "hello ansible from script" > /data/script.txt​chmod +x test.sh                              #给脚本执行权限ansible dbservers -m script -a 'test.sh'      #远程运行本地脚本ansible dbservers -a 'cat /data/script.txt'   #查看生成的文件内容是否为指导内容#再次运行相同脚本,状态为changed,而不是successs,因为script模块不具有幂等性ansible dbservers -m script -a 'test.sh'

setup 模块

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

 ansible-doc -s setup   #查看setup模块包含的操作动作​#获取dbservers组主机的facts信息ansible dbservers -m setup​#使用filter参数可以筛选指定的facts信息ansible dbservers -m setup -a 'filter=*ipv4'

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

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

相关文章

CTFshow web入门 爆破

web21 bp 攻击模块的迭代器 输入账号密码 抓包 发现下面存在一个base64编码 我输入的是 123 123 发现就是base加密 账号 密码 那我们怎么通过intruder模块 自动变为 base64呢 然后去payload------>custom iterator(自定义迭代器) 位置1导入admin 因为是 账号:密码 这…

微服务远程调用openFeign简单回顾(内附源码示例)

目录 一. OpenFeign简介 二. OpenFeign原理 演示使用 provider模块 消费者模块 配置全局feign日志 示例源代码: 一. OpenFeign简介 OpenFeign是SpringCloud服务调用中间件&#xff0c;可以帮助代理服务API接口。并且可以解析SpringMVC的RequestMapping注解下的接口&#x…

win 安装虚拟机 再安装macos

0 视频教程 windows虚拟机一键安装苹果系统macos&#xff0c;轻松拥有xcode环境_哔哩哔哩_bilibili在windows环境下vmware虚拟机一键安装macos Catalina10.15.7苹果系统&#xff0c;帮助学习ios编程的朋友们实现xcode环境。文字教程&#xff1a;https://www.dhzy.fun/archives…

Prometheus 的应用服务发现及黑河部署等

目录 promtool检查语法 部署Prometheus Server 检查语法是否规范 部署node-exporter 部署Consul 直接请求API进行服务注册 使用register命令注册服务&#xff08;建议使用&#xff09; 单个和多个注册&#xff0c;多个后面多加了s 在Prometheus上做consul的服务发现 部署…

IL汇编字符串连接

在此实现了一个基本的IL汇编程序&#xff1b; 了解MSIL汇编和IL汇编评估堆栈_bcbobo21cn的博客-CSDN博客 它用了下面两句来在屏幕输出字符串&#xff0c; ldstr "I am from the IL Assembly Language..." call void [mscorlib]System.Console::WriteLine (string) …

用i18next使你的应用国际化-React

ref: https://www.i18next.com/ i18next是一个用JavaScript编写的国际化框架。 i18next为您提供了一个完整的解决方案&#xff0c;本地化您的产品从web端到移动端和桌面端。 在react项目中安i18next依赖&#xff1a; i18nextreact-i18nexti18next-browser-languagedetector&…

Spring(二):更简单的存储与读取 Bean

通过上一章的Spring&#xff0c;我们基本实现了Spring 的读取与存储&#xff0c;但是在操作过程中&#xff0c;读取与存储并没有那么得“简单” 一套流程还是很复杂&#xff0c;所以&#xff0c;本章来介绍更加简单得读取与存储。 在 Spring 中想要更简单的存储和读取对象的核…

mysql通过binlog恢复数据

开启binlog 在my.ini中添加以下两行代码&#xff1a; log-binmysql-binserver-id1 注意要写在[mysqld]范围内才会生效 查看binlog存放日志文件目录 show variables like %datadir%; 查看binlog文件名 show master logs; 将binlog转换成sql mysqlbinlog --no-defaults --bas…

【LeetCode热题100】打卡第42天:滑动窗口最大值搜索二维矩阵II

文章目录 【LeetCode热题100】打卡第42天&#xff1a;滑动窗口最大值&搜索二维矩阵II⛅前言 滑动窗口最大值&#x1f512;题目&#x1f511;题解 搜索二维矩阵II&#x1f512;题目&#x1f511;题解 【LeetCode热题100】打卡第42天&#xff1a;滑动窗口最大值&搜索二维…

SpringMVC程序开发

1.什么是Spring MVC? Spring Web MVC是基于Servlet API构建的原始的Web框架&#xff0c;从一开始是就包含在Spring框架中。它的正式名称“Spring Web MVC"来自其源模板的名称&#xff08;Spring-webmvc)&#xff0c;但通常被称为“Spring MVC" 从上述的定义我们可…

[visionOS][Apple Vision Pro] 缩放3D模型

方法一&#xff1a;通过代码来设置Model3D Model3D(named:"你的3D模型名称",bundle:realityKitContentBundle).padding(.bottom,50).scaleEffect(0.2) //这句用来缩放 方式二&#xff1a;别人可以&#xff0c;我验证过不行的方法 RealityKitContent工具中&#xf…

PLC-Recorder的高速采集有多快?0.5ms算快吗?看控制器能力了!

大家知道&#xff0c;PLC-Recorder有一个高速采集的功能&#xff0c;基于TCP连接或UDP报文&#xff0c;速度取决于发送端的能力。对于西门子PLC&#xff0c;能做到1-2ms的采集速度&#xff0c;但是&#xff0c;我在前面的文章里提到了0.5ms的高速采集&#xff0c;哪个控制器能这…

Linux 下 nc 发送接收 udp、tcp数据

nc&#xff0c;全名叫 netcat&#xff0c;它可以用来完成很多的网络功能&#xff0c;譬如端口扫描、建立TCP/UDP连接&#xff0c;数据传输、网络调试等等&#xff0c;因此&#xff0c;它也常被称为网络工具的 瑞士军刀 。 一、只服务端使用nc 备注&#xff1a;这种方式只能发…

Django实现音乐网站 ⑴

使用Python Django框架制作一个音乐网站。 目录 网站功能模块 安装django 创建项目 创建应用 注册应用 配置数据库 设置数据库配置 设置pymysql库引用 创建数据库 创建数据表 生成表迁移文件 执行表迁移 后台管理 创建管理员账户 启动服务器 登录网站 配置时区…

自媒体必备的8个素材网站,视频、音效、图片全部免费下载

自媒体必备的视频、音效、图片素材&#xff0c;这8个网站帮你解决。赶紧马住&#xff01; 菜鸟图库 https://www.sucai999.com/video.html?vNTYwNDUx 菜鸟图库虽然是一个设计网站&#xff0c;但它还有非常丰富的视频和音频素材&#xff0c;视频素材全部都是高清无水印&#…

Java 贪心算法经典问题解决

文章目录 分金条题目思路代码实现测试用例以及结果输出 花费资金做项目最大收益题目思路代码实现测试用例以及结果输出 预定会议室题目思路代码实现测试用例以及结果输出 取中位数题目思路代码实现测试用例以及结果输出 最低字典序题目思路代码实现测试用例以及结果输出 结语 分…

vite打包性能优化以及填坑

目录 前言 项目优化前 分析 优化 拆分包 去除debugger CDN 加速 按需导入 文件压缩 图片压缩 viteImagemin报错 填坑 坑1 坑2 总结 配置 前言 最近在使用 Vite4.0 构建一个中型前端项目的过程中&#xff0c;遇到了一些坑&#xff0c;也做了一些项目在构建生产环…

C进阶:文件操作

C语言文件操作 什么是文件 磁盘上的数据是文件。 但是在程序设计中&#xff0c;我们一般谈的文件有两种&#xff1a;程序文件&#xff08;例如.c,.h这一类编译&#xff0c;链接过程中的文件&#xff09;&#xff0c;数据文件。 程序文件 包括源程序文件&#xff08;后缀为.c&…

重生之我要学C++第四天

这篇文章的主要内容是类的默认成员函数。如果对大家有用的话&#xff0c;希望大家三连支持&#xff0c;博主会继续努力&#xff01; 目录 一.类的默认成员函数 二.构造函数 三.析构函数 四.拷贝构造函数 五.运算符重载 一.类的默认成员函数 如果一个类中什么成员都没有&…

JavaWeb 速通HTTP

目录 一、HTTP快速入门 1.HTTP简介 : 2.HTTP请求头 : 3.HTTP响应头 : 二、HTTP响应状态码 1.基本介绍 : 2.常见状态码 : 3.状态码的分类 : 4.完整状态码汇总 : 三、HTTP请求包和响应包 1.请求包分析 : 1 GET请求 (1) 说明 (2) doGet返回数据给浏览器 (3) form表单提…