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'

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

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

相关文章

解决ultralytics中的YOLOv8在执行task.py文件添加模块操作出现的KeyError报错

报错详情&#xff1a; 在ultralytics项目文件夹内运行/home/xxx/ultralytics/train.py进行单GPU训练的时候训练可以正常进行 from ultralytics import YOLO# Load a model model YOLO("/home/xxx/ultralytics/ultralytics/cfg/models/v8/yolov8s-FASFF.yaml") # …

3.C++经典实例-计算一个数的阶乘

阶乘&#xff08;factorial&#xff09;是‌基斯顿卡曼于1808年发明的运算符号&#xff0c;用于表示一个正整数n的所有小于及等于该数的正整数的积。自然数n的阶乘写作n!。例如&#xff0c;5的阶乘表示为5! 1 2 3 4 5 120。 阶乘在数学和计算机科学中有广泛的应用。例如…

git--git reset

HEAD 单独一个HEAD eg:git diff HEAD 表示当前结点。 HEAD~ HEAD~只处理当前分支。 注意&#xff1a;master分支的上一个结点是tmp分支的所在的结点fc11b74, 79f109e才是master的第二个父节点。 HEAD~ 当前结点的父节点。 HEAD~1 当前结点的父节点。 HEAD~n 当前结点索…

react+video:限制快进、倍速、画中画

实现代码&#xff1a; <video ref{videoRef} src{videoUrl} className{style.video} controls onRateChange{rateChange} onPlay{playVideo} onPause{pauseVideo} onTimeUpdate{timeUpdate} disablePictureInPicture playsInline poster{poster} controlsList"nodownl…

Qml-Item的构造和显示顺序

Qml-Item的构造和显示顺序 qml文件中组件构造顺序 在同一个qml文件中&#xff0c;同层级的Item, 文件尾的Item优先构造&#xff0c;文件首的Item后构造。这就能解释默认情况下同一个qml文件中&#xff0c;几个同层级的item都设置了focus:true&#xff0c;为啥最上面item最终有…

毕业设计选题:基于django+vue的个人博客系统设计与开发

开发语言&#xff1a;Python框架&#xff1a;djangoPython版本&#xff1a;python3.7.7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 管理员登录 管理员功能界面 博主管理 博客文章管理 博文排行管理 博文打赏管理 博文…

设计模式之组合模式(Composite)

一、组合模式介绍 组合模式(Composite Pattern) 的定义是&#xff1a;将对象组合成树形结构以表示整个部分的层 次结构。组合模式可以让用户统一对待单个对象和对象的组合。 如在windows操作系统中的目录结构&#xff0c;其实就是树形目录结构&#xff0c;可以通过 tree /f 命令…

加速“人工智能+”落地,青云如何打磨智算基石

智算中心建设不断加速&#xff0c;正成为推动数字经济发展的新引擎。 根据天风证券的研究&#xff0c;2024年1-6月&#xff0c;全国智算中心招投标相关事件791起&#xff0c;较上年同期增加407.1%。 围绕AI算力&#xff0c;云计算厂商也在积极探索第二增长曲线。根据2024年半年…

2024.10月17日- Vue.js(2)

2.4 计算属性 从字符串反转中&#xff0c;我们发现 插值语法的初衷是用于简单运算。明显练习题中的写法&#xff0c;违背了插值语法的初衷。 methods方法可以。但是方法中如果封装的是性能开销比较大的逻辑代码&#xff0c;需要进行大量的运算&#xff0c;并且别的属性还依赖…

【数据结构与算法】栈和队列

文章目录 一.栈1.1定义 顺序栈和链式栈1.2基本操作1.2.1表示1.2.2初始化1.2.3清空1.2.4销毁1.2.5入栈1.2.6出栈1.2.7取栈顶 1.3共享栈1.3.1定义1.3.2进栈出栈 二.队列2.1定义 顺序队列和链式队列循环队列2.2基本操作2.2.1初始化2.2.2判空2.2.3求队列长度2.2.4取队头元素2.2.5销…

Python123练习题

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;折纸花满衣 &#x1f3e0;个人专栏&#xff1a;题目解析 目录 &#x1f449;&#x1f3fb;百钱买百鸡&#x1f449;&#x1f3fb;鸡兔同笼&#x1f449;&#x1f3fb;最大公约数和最小公倍数&#x1f449;…

redux与react18setState触发render问题

最近在做一个需求&#xff0c;需要用im做那个协同。 刚好遇到一个比较有意思的问题。 具体问题就不赘述了。 根本原因就是在修改state的时候&#xff0c;触发了两次重渲染。 后面也是做了一些验证 demo function App() {const [state, setState] useState("");con…

JDK、JRE、JVM相关知识点

1、JDK、JRE、JVM三者的关系 JDK‌&#xff1a;Java开发工具包&#xff0c;包括编译工具&#xff08;javac.exe&#xff09;、打包工具&#xff08;jar.exe&#xff09;等&#xff0c;也包含JRE。JDK是开发Java程序的主要工具包&#xff0c;包括了Java运行环境、Java工具和Jav…

C++之设计原则

在C中&#xff0c;设计原则是一套指导软件开发过程中决策和设计模式的准则&#xff0c;旨在提高软件的可维护性、可扩展性、灵活性和可靠性。 以下是几种核心设计原则&#xff1a; 1.单一职责 功能单一&#xff0c;方便组合和复用。 图示&#xff1a; 应用场景&#xff1a;…

【2024CANN训练营第二季】Ascend C概述

什么是算子 算子在神经网络中的定义 算子对应网络中层或者节点的计算逻辑 算子的数学含义 算子在数学中的定义&#xff1a; 一个函数空间到函数空间上的映射O&#xff1a;X->X&#xff1b; 广义&#xff1a; 对任何函数进行某一项操作都可以认为是一个算子。比如微分算…

redis IO多路复用机制

目录 一、五种 I/O 模型 1.阻塞IO&#xff08;Blocking IO&#xff09; 2.非阻塞IO&#xff08;Nonblocking IO&#xff09; 3.IO多路复用&#xff08;IO Multiplexing&#xff09; 通知的方式 select模式 poll模式 epoll模式 4.信号驱动IO&#xff08;Signal Driven …

SD-WAN技术的特点和应用场景

近年来&#xff0c;SD-WAN逐渐成为企业网络建设中的热门技术。那么&#xff0c;SD-WAN到底是什么呢&#xff1f;简而言之&#xff0c;SD-WAN&#xff08;软件定义广域网&#xff09;结合了软件定义网络&#xff08;SDN&#xff09;与广域网优化技术&#xff0c;为企业提供了更加…

一文读懂:Session、Cookie与Token

我是小白刚刚接触JWT&#xff0c;看了b站一些相关视频、查了中国知网和csdn其他人的文章之后&#xff0c;总结出了这篇文章。写文章的初心是为了检验自己是否透彻了解了知识点以及之后复习。如果标题党了&#xff0c;斯米马赛请原谅&#xff01;&#xff01;&#xff01;欢迎大…

企业AI助理与知识库管理系统:重塑企业知识管理的新篇章

在数字化转型的浪潮中&#xff0c;企业正面临着前所未有的机遇与挑战。如何高效管理、快速获取并利用企业内部的知识资源&#xff0c;成为了提升企业竞争力的关键。近年来&#xff0c;企业AI助理与知识库管理系统的结合&#xff0c;正逐步成为企业知识管理的新趋势&#xff0c;…

【C语言】循环嵌套:乘法表

循环嵌套&#xff0c;外层循环执行一次&#xff0c;内层循环执行i次。分别控制 在循环的过程中加一层循环。 多层循环属于循环嵌套、嵌套循环 #include <stdio.h> #include <math.h> /* 功能&#xff1a;循环嵌套 乘法表 时间&#xff1a;2024年10月 地点&#xf…