Ansible概述

news2024/10/19 3:06:32

目录

一、ansible简介

二、absible的特点

三、ansible的工作原理以及流程

四、ansible环境安装部署

五、ansible命令行模块

六、inventory 主机清单


一、ansible简介

  • Ansible是一个基于Python开发的配置管理和应用部署工具,现在也在自动化管理领域大放异彩。它融合了众多老牌运维工具的优点,Pubbet和Saltstack能实现的功能,Ansible基本上都可以实现。
  • Ansible能批量配置、部署、管理上千台主机。比如以前需要切换到每个主机上执行的一或多个操作,使用Ansible只需在固定的一台Ansible控制节点上去完成所有主机的操作。
  • Ansible是基于模块工作的,它只是提供了一种运行框架,它本身没有完成任务的能力,真正执行操作的是Ansible的模块, 比如copy模块用于拷贝文件到远程主机上,service模块用于管理服务的启动、停止、重启等。
  • Ansible其中一个比较鲜明的特性是Agentless,即无Agent的存在,它就像普通命令一样,并非C/S软件,也只需在某个作为控制节点的主机上安装一次Ansible即可,通常它基于ssh连接来控制远程主机,远程主机上不需要安装Ansible或其它额外的服务。
  • 使用者在使用时,在服务器终端输入命令或者playbooks,会通过预定好的规则将playbook拆解为play,再组织成ansible可以识别的任务,调用模块和插件,根据主机清单通过SSH将临时文件发给远程的客户端执行并返回结果,执行结束后自动删除
  • Ansible的另一个比较鲜明的特性是它的绝大多数模块都具备幂等性(idempotence)。所谓幂等性,指的是多次操作或多次执行对系统资源的影响是一致的。比如执行 systemctl stop xxx 命令来停止服务,当发现要停止的目标服务已经处于停止状态, 它什么也不会做,所以多次停止的结果仍然是停止,不会改变结果,它是幂等的,而 systemctl restart xxx 是非幂等的。
  • Ansible的很多模块在执行时都会先判断目标节点是否要执行任务,所以,可以放心大胆地让Ansible去执行任务,重复执行某个任务绝大多数时候不会产生任何副作用。

二、ansible的特点

  • 无代理架构:Ansible 不需要在目标节点上安装代理软件,只需通过 SSH 连接即可管理服务器。这使得部署和维护变得更加简单。

  • 易于学习和使用:Ansible 使用 YAML 语言编写剧本(Playbooks),语法简单易懂,便于上手。

  • 声明性语法:用户可以描述期望的系统状态,Ansible 会自动确保目标系统达到这种状态。这种方式使得配置管理更加直观。

  • 强大的模块支持:Ansible 提供了大量内置模块,支持多种操作系统和云平台,可以轻松管理各种资源。

  • 可扩展性:用户可以编写自定义模块和插件,以满足特定需求,扩展 Ansible 的功能。

  • 支持多种平台:Ansible 支持 Linux、Windows 和其他操作系统,适用于多种环境,包括本地、虚拟机和云。

  • 集成和社区支持:Ansible 与其他 DevOps 工具(如 Docker、Kubernetes、Jenkins 等)具有良好的集成能力,并拥有活跃的社区支持和丰富的文档。

  • idempotency(幂等性)**:Ansible 确保在多次运行剧本时,结果是一致的,这意味着无论运行多少次,最终系统的状态都是相同的。

三、ansible的工作原理以及流程

1. 控制节点与被管理节点

  • 控制节点:运行 Ansible 的机器,通常是用户的工作站或专用服务器。
  • 被管理节点:需要被配置或管理的目标机器(可以是 Linux、Windows 等系统)。

2. SSH 连接

Ansible 通过 SSH(在 Linux 系统上)或 WinRM(在 Windows 系统上)与被管理节点建立连接。无需在被管理节点上安装代理,简化了部署。

3. Inventory(清单)

  • 清单文件列出所有被管理节点及其分组。清单可以是静态文件(如 INI 或 YAML 格式)或动态生成的。

4. 剧本(Playbook)

  • Playbook 是以 YAML 格式编写的剧本,定义了要在目标节点上执行的任务和操作。

5. 模块

Ansible 通过模块执行具体操作(如安装软件、配置文件、执行命令等)。用户可以调用内置模块,也可以编写自定义模块。

6. 执行流程

  1. 解析清单:Ansible 读取清单文件,确定目标节点。
  2. 执行剧本:Ansible 根据 Playbook 的定义,依次在目标节点上执行相应的模块和任务。
  3. 收集结果:任务执行后,Ansible 会收集每个任务的结果,包括成功、失败、变化等状态信息。
  4. 反馈结果:最终结果会在控制节点上显示,用户可以查看每个任务的执行情况。

7. 幂等性

Ansible 确保执行剧本时具有幂等性,意味着如果多次执行同一剧本,结果保持一致,不会造成额外的变化。

8. 错误处理与回滚

Ansible 允许在任务失败时定义回滚策略,可以根据需要对配置进行恢复。

总结

Ansible 的工作原理基于简单的 SSH 连接和声明式的配置管理,通过清单和剧本的组合,实现对被管理节点的自动化管理和配置。其模块化设计和无代理架构使得 Ansible 成为高效、灵活的自动化工具。

四、ansible环境安装部署

管理端: 192.168.129.13        ansible                    
被管理端: 192.168.129.9                              
被管理端: 192.168.129.15   

//管理端安装 ansible
yum install -y epel-release            //先安装 epel 源
yum install -y ansible

//配置主机清单  
cd /etc/ansible 
vim hosts       
[webservers]            #配置组名
192.168.129.9

192.168.129.15            

//配置密钥对验证
ssh-keygen -t rsa        #一路回车,使用免密登录
sshpass -p 'abc1234' ssh-copy-id root@192.168.129.9
sshpass -p 'abc1234' ssh-copy-id root@192.168.129.185

五、ansible命令行模块

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

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

1、command模块

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

ansible-doc -s command        #-s 列出指定模块的描述信息和操作动作
ansible 192.168.10.14 -m command -a 'date'        #指定 ip 执行 date
ansible webservers -m command -a 'date'            #指定组执行 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 /'

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

ansible all -m command -a "chdir=/home  ls ./"

2、shell模块

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

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}")'

3、corn模块

//在远程主机定义任务计划。其中有两种状态(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

//常用的参数:
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 dbservers -m user -a 'name="test01"'                #创建用户test01
ansible dbservers -m command -a 'tail /etc/passwd'
ansible dbservers -m user -a 'name="test01" state=absent'    #删除用户test01

5、group模块

//用户组管理的模块
ansible-doc -s group

ansible dbservers -m group -a 'name=mysql gid=306 system=yes'    #创建mysql组
ansible dbservers -a 'tail /etc/group'
ansible dbservers -m user -a 'name=test01 uid=306 system=yes group=mysql'    #将test01用户添加到mysql组中
ansible dbservers -a 'tail /etc/passwd'
ansible dbservers -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'

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

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

相关文章

MT1341-MT1350 码题集 (c 语言详解)

MT1341反比例函数 c 语言实现代码 #include <stdio.h>double f(double x) { return 1.0 / x; }double trapezoidal_integration(double a, double b, int n) {// computer step lengthdouble h (b - a) / n;// computer points valuedouble sum (f(a) f(b)) / 2.0;//…

初阶数据结构【2】--顺序表(详细且通俗易懂,不看一下吗?)

本章概述 线性表顺序表顺序表问题与思考彩蛋时刻&#xff01;&#xff01;&#xff01; 线性表 概念&#xff1a;一些在逻辑上成线性关系的数据结构的集合。线性表在逻辑上一定成线性结构&#xff0c;在物理层面上不一定成线性结构。常见的线性表&#xff1a;顺序表&#xff0…

Origin画图——百分比堆积柱状图(深度学习篇)

1.当数据有以下特征&#xff0c;不同特征在不同情况下的数值的时候就可以使用百分比柱状图表示。 1 2.将自己的数据导入到Origin中&#xff0c;本示例中以不同机器学习的方法的在不同测试集下的R2作为示例。数据如下所示。绘图百分比柱状图&#xff0c;两种都可以。 3.生成的…

推荐一个可以免费上传PDF产品图册的网站

​在数字化时代&#xff0c;企业将产品图册以PDF格式上传至网络&#xff0c;不仅便于客户浏览和下载&#xff0c;还能提升企业的专业形象。今天&#xff0c;就为您推荐一个可以免费上传PDF产品图册的网站——FLBOOK&#xff0c;轻松实现产品图册的在线展示。 1.注册登录&#x…

【xilinx-versal】【Petalinux】添加TMP75温度传感器Linux驱动

Xilinx versal添加TMP75温度传感器Linux驱动 I2C总线的内核配置打开Cadence I2C 控制器配置xilinx I2C配置(不使用)添加设备树总结I2C总线的内核配置 TMP75挂载第一个i2c总线上,地址是0x48。 petalinux-config -c kernel打开内核配置界面。 打开Cadence I2C 控制器配置 │…

Linux——用户/用户组

创建用户组groupadd groupadd 用户组 删除用户组groupdel groupdel 用户组 创建用户useradd useradd 用户名 - g 用户组 useradd 用户名 -d HOME路径 删除用户userdel userdel 用户 userdel -r 用户 &#xff08;删除用户的 HOME 目录&#xff0c;不使用 -r &#xff0…

FlinkCDC 实现 MySQL 数据变更实时同步

文章目录 1、基本介绍2、代码实战2.1、数据源准备2.2、代码实战2.3、数据格式 1、基本介绍 Flink CDC 是 Apache Flink 提供的一个功能强大的组件&#xff0c;用于实时捕获和处理数据库中的数据变更。可以实时地从各种数据库&#xff08;如MySQL、PostgreSQL、Oracle、MongoDB…

结构体通讲——数据结构解惑

文章目录 一.第一种写法二.第二种三.第三种四.-> 结构&#xff1a;一个变量里包含很多变量 一.第一种写法 int a[]&#xff1b;//一个数组中可以包含许多相同类型的数组 想让一个数组中包含很多不同类型的变量用结构 struct {int a;char bc; }t,ti;//t和ti拥有了前面所定…

谷歌审核放宽,恶意软件不再封号?是反垄断案影响还是开发者们的错觉

最近&#xff0c;谷歌因其“垄断”案而成为科技行业的焦点&#xff0c;这个案件可能导致谷歌业务的重大调整。同时&#xff0c;在Google Play上&#xff0c;一些开发者发现谷歌审核好像放宽了不少&#xff0c;这是不是与反垄断有关&#xff0c;谷歌应用上架或将迎来春天&#x…

MySQL-12.DQL-条件查询

一.DQL-条件查询 -- DQL:条件查询 -- 1.查询 姓名 为 杨逍 的员工 select id, username, password, name, gender, image, job, entrydate, create_time, update_timefrom tb_emp where name 杨逍;-- 2.查询 id小于等于5 的员工信息 select * from tb_emp where id < 5;-…

HT3382 2x75W D类立体声音频功放

1、特点 输出功率(BTL) 2x60W (VDD24V,RL4Ω,THDN1%) 2x75W(VDD24V,RL4Ω,THDN10%) 输出功率(PBTL) 115W(VDD24V,RL2Ω,THDN1%) 140W(VDD24V,RL2Ω,THDN10%) 单电源系统&#xff0c;4.5V-26V宽电压输入范围 超过93%效率&#xff0c;需散热器 扩频功能 MUTE功能 模拟差分/单端输…

LLM - 使用 Neo4j 可视化 GraphRAG 构建的 知识图谱(KG) 教程

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/142938982 免责声明&#xff1a;本文来源于个人知识与公开资料&#xff0c;仅用于学术交流&#xff0c;欢迎讨论&#xff0c;不支持转载。 Neo4j …

中科大科大讯飞开源OpenMusic:音乐生成更高质量,更有乐感

文章链接&#xff1a;https://arxiv.org/pdf/2405.15863 代码链接&#xff1a;https://github.com/ivcylc/qa-mdt Huggingface链接&#xff1a;https://huggingface.co/spaces/jadechoghari/OpenMusic Demo链接&#xff1a;https://qa-mdt.github.io/ &#xff08;chatgpt * 3…

苹果 AI 及国产大模型之争:悬念不再?

AI基本盘&#xff0c;牢牢把握在苹果手里 苹果终于公布了最新的AI进程。 一个月前&#xff0c;正如此前预期的那样&#xff0c;人工智能是今年 WWDC 发布会的焦点。全程105分钟的主题演讲&#xff0c;就有40多分钟用于介绍苹果的AI成果。 苹果似乎还有意玩了一把“谐音梗”&…

人脸识别-特征算法

文章目录 一、LBPH算法1.基本原理2.实现步骤3.代码实现 二、Eigenfaces算法1.特点2.代码实习 三、FisherFaces算法1.算法原理2.算法特点3.代码实现 四、总结 人脸识别特征识别器是数字信息发展中的一种生物特征识别技术&#xff0c;其核心在于通过特定的算法和技术手段&#xf…

跟李沐学AI—pytorch版本锚框代码解析

网上大佬的解释 https://fkjkkll.github.io/2021/11/23/%E7%9B%AE%E6%A0%87%E6%A3%80%E6%B5%8BSSD/?highlight%E9%94%9A%E6%A1%86 w torch.cat((size_tensor * torch.sqrt(ratio_tensor[0]),sizes[0] * torch.sqrt(ratio_tensor[1:])))\* in_height / in_widthh torch.cat((…

当贝投影双十一战报揭晓:天猫投影品类销量稳居首位

相比往年&#xff0c;2024年双11提前了10天&#xff0c;于10月14日正式拉开帷幕。其中&#xff0c;作为国内智能投影头部品牌之一的当贝投影&#xff0c;首战告捷&#xff0c;迎来开门红&#xff0c;战绩相当喜人&#xff01; 根据当贝投影官方数据显示&#xff0c;10月至今当贝…

基于SpringBoot的在线视频教育平台的设计与实现(论文+源码)_kaic

摘 要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff1b;对于在线视频教育平台当然也不能排除在外&#xff0c;随着网络技术的不断成熟&#xff0c;带动了在线视频教育平台&#xff0c;它彻底改变了过…

vue 2.0 使用 html2canvas + jspdf +ant-design-vue 1.x + echarts + 高德地图 导出数据报告

思路&#xff1a; 1. 因为html转为图片再加入到PDF中 会导致截断&#xff0c;因此前端自定义分页添加 类 &#xff08;page&#xff09; 2. 通过page生成图片 在加入PDF中<template><div id"pdf-content"><div class"page first-page">&…

Jmeter接口测试企业级项目实战day2

1.JMeter接口关联 含义&#xff1a;把上一个接口的响应内容&#xff0c;作为下一个接口的请求参数 思路&#xff1a;通过变量来传递数据 步骤&#xff1a; 1.创建&#xff1a;上一个接口&#xff0c;添加【后置处理器】&#xff1a;提取数据创建变量 2.使用&am…