Ansible概述

目录

一、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'

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'

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-doc -s setup

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

六、inventory 主机清单

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

//如果是名称类似的主机,可以使用列表的方式标识各个主机。
vim /etc/ansible/hosts
[webservers]
192.168.129.9:2222        #冒号后定义远程连接端口,默认是 ssh 的 22 端口
192.168.129.1[2:5]

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


//inventory 中的变量
Inventory变量名                  含义
ansible_host                  ansible连接节点时的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.129.9 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.129.9
192.168.129.13

[apache]
192.168.129.15[0:3]

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

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

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

相关文章

HCIP-HarmonyOS Application Developer 习题(十二)

&#xff08;多选&#xff09;1、声明式开发范式的转场动画包含以下哪几种类型? A、页面间转场 B、应用间转场 C、共享元素转场 D、组件内转场 答案&#xff1a;ACD 分析&#xff1a; &#xff08;多选&#xff09;2、公共事件服务为应用程序提供哪些能力。 A、取消发布公共…

基于STM32设计的养殖场环境监测系统(华为云IOT)

文章目录 一、前言1.1 项目介绍【1】项目开发背景【2】设计实现的功能【3】项目硬件模块组成【4】需求总结 1.2 设计思路1.3 系统功能总结1.4 开发工具的选择【1】设备端开发【2】上位机开发 二、部署华为云物联网平台2.1 物联网平台介绍2.2 开通物联网服务2.3 创建产品&#x…

uniapp下载在线文档并打开

const showUserAgremention () > { uni.showLoading({ title: "正在打开...", }) uni.downloadFile({ url: "https://door.melifego.net/userAgreement.docx&quo…

PMP--必刷题–解题–121-130

文章目录 14.敏捷--产品待办事项列表121、 [单选] 项目经理使用混合型方法来遵守监管要求。规划和收尾阶段将使用预测型方法&#xff0c;而执行阶段将使用迭代方法。在第二次冲刺评审期间&#xff0c;项目发起人要求对一些产品待办事项列表的优先级进行变更。作为服务型&#x…

开源项目 - 轻量级人体姿态 人体关键点检测 机器视觉 深度学习

开源项目 - 轻量级人体姿态 人体关键点检测 机器视觉 深度学习 项目地址&#xff1a;https://gitcode.net/EricLee/light_pose 1、数据集来源&#xff1a;coco2017 数据集 * coco 数据集官方网站&#xff1a;https://cocodataset.org/#home * [数据集下载地址(百度网盘 Pa…

centos8配置java环境变量jdk8u422-b05

1. 下载 JDK 8u422-b05 首先&#xff0c;确保已经下载了 JDK 8u422-b05 的二进制文件。如果还没有下载&#xff0c;你可以去 Oracle 官方网站或者其他可信的源下载 JDK 8u422。 2. 安装 JDK 将下载的 JDK 文件解压到 /usr/local/java 目录下&#xff1a; sudo mkdir /usr/l…

Golang日志库logrus的介绍与使用

logrus概述 简介 Logrus 是一个流行的 Go 语言日志库&#xff0c;它提供了结构化日志和多种日志级别的功能。Logrus 非常灵活&#xff0c;支持自定义日志格式和输出&#xff0c;被许多 Go 语言项目广泛使用 特点 完全兼容log标准库&#xff1a;Logrus 可以很容易地替换掉log…

力扣2653.滑动窗口的美丽值

给你一个长度为 n 的整数数组 nums &#xff0c;请你求出每个长度为 k 的子数组的 美丽值 。 一个子数组的 美丽值 定义为&#xff1a;如果子数组中第 x 小整数 是 负数 &#xff0c;那么美丽值为第 x 小的数&#xff0c;否则美丽值为 0 。 请你返回一个包含 n - k 1 个整数…

挖掘数据金矿:Python中缺失值处理的艺术与技巧

引言 在实际的数据集处理过程中&#xff0c;我们经常会遇到各种各样的缺失值问题。这些问题可能是由于数据收集过程中的疏忽&#xff0c;或是数据传输中的丢失造成的。无论是哪种情况&#xff0c;缺失值都会直接影响模型的训练效果和预测准确性。因此&#xff0c;掌握有效的缺…

Java项目-基于springcloud框架的分布式架构网上商城系统项目实战(附源码+文档)

作者&#xff1a;计算机学长阿伟 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、ElementUI等&#xff0c;“文末源码”。 开发运行环境 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBoot、Vue、Mybaits Plus、ELementUI工具&#xff1a;IDEA/…

​​【项目建设PPT模板】中台建设,中台设计,数字中台整体建设方案(PPT)

工业互联网数字中台解决方案旨在为企业提供全面、高效的数据驱动能力。该方案主要包括以下几个核心部分&#xff1a; 数据中台&#xff1a;作为核心&#xff0c;数据中台负责汇聚、整合、提纯和加工各类工业数据&#xff0c;实现数据资产的标准化、模型化和模块化。通过提供API…

对Kotlin在Android开发中的应用看法

Kotlin在Android开发中的应用&#xff1a;深度解析与前景展望 自Google于2017年宣布Kotlin成为Android开发的官方语言以来&#xff0c;Kotlin在Android开发者社区中迅速崛起&#xff0c;成为与Java并肩而行的主流编程语言。这一变化不仅反映了技术发展的趋势&#xff0c;也体现…

【Pycharm】显示内存不足the IDE is running low on memory解决方法

Pycharm提示显示内存不足the IDE is running low on memory解决方法 在右上角找到Help&#xff0c;点击&#xff0c;找到change memory settings 修改数值如1024&#xff0c;2048 等&#xff0c;增大容量即可。最后点击save and Restart

C++学习,标准库 <regex>

C11 引入了 <regex> 标准库&#xff0c;用于处理正则表达式。这个库提供了一系列类和函数&#xff0c;使得在 C 中进行复杂的字符串匹配、搜索和替换操作变得更加方便和高效。正则表达式是一种强大的文本处理工具&#xff0c;广泛应用于数据验证、文本分析和模式匹配等领…

【Unity】什么是定点数?定点数的实现原理(个人复习笔记/侵删/不足之处欢迎斧正)

什么是定点数&#xff1f;定点数的实现原理 什么是定点数&#xff1f; 约定计算机中小数点的位置&#xff0c;且这个位置固定不变&#xff0c;小数点前、后的数字&#xff0c;分别用二进制表示&#xff0c;然后组合起来就可以把这个数字在计算机中存储起来&#xff0c;这种表…

红日安全vulnstack (一)

目录 环境搭建 本机双网卡 Kali IP 靶机IP Web GetShell 前期信息收集 Yxcms后台模板 Getshell PHPMyAdmin日志 Getshell into outfile写入一句话 X phpmyadmin 日志写入一句话 后渗透 MSF 生成木马上线 提取用户hash值 **hash**加密方式 MSF权限Shell至CS CS …

如何使用FastAPI开发Serverless应用?

使用FastAPI开发Serverless应用是一种现代且高效的方法&#xff0c;它结合了FastAPI的高性能和Serverless架构的灵活性、可扩展性以及低成本。下面是一个基本指南&#xff0c;帮助你从零开始创建并部署一个FastAPI应用到Serverless环境。 1. 安装FastAPI和Uvicorn 首首先&…

基于springboot美食推荐商城的设计与实现

基于springboot美食推荐商城的设计与实现 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;idea 源码获取&#xff1a;https:…

CSS进阶-定位(二)

8、定位 定位元素的层级比普通元素高&#xff0c;定位元素之间的层级相等&#xff0c;若发生覆盖&#xff0c;则后写的元素覆盖在先写的元素上面。 属性名描述position:relative;相对定位&#xff08;相对默认位置进行定位&#xff0c;不脱离文档流&#xff0c;仍占据页面位置&…

91. 一段曲线颜色渐变

可以通过几何体顶点颜色.attributes.color数据&#xff0c;实现一段曲线颜色渐变效果。 样条曲线几何体 首先提供一个样条曲线生成的几何体。 const geometry new THREE.BufferGeometry(); //创建一个几何体对象 // 三维样条曲线 const curve new THREE.CatmullRomCurve3(…