自动化运维工具---Ansible

一 Puppet

Puppet是历史悠久的运维工具之一。它是一种基础架构即代码(laC)工具,使用户可以定义其基础

架构所需的状态,并使系统自动化以实现相同状态。

Puppet可监视用户的所有系统,并防止任何偏离已定义状态的情况。从简单的工作流程自动化到

基础架构配置和合规性,Puppet都能做到。

Puppet通过让客户端检査主站的更新清单来更新节点的配置,然后从主站服务器拉下新的配置。

由于这个特点,Puppet比这里提到的许多其他工具更倾向于系统管理员。

服务模式:C/S

语言:ruby    

协议:http

1.1 ansible简介

1 Ansible是一个基于Python开发的配置管理和应用部署工具,现在也在自动化管理领域大放异彩。

它融合了众多老牌运维工具的优点,Pubbet和Saltstack能实现的功能,Ansible基本上都可以实现。

2 Ansible能批量配置、部署、管理上千台主机。比如以前需要切换到每个主机上执行的一或多个操

作,使用Ansible只需在固定的一台Ansible控制节点上去完成所有主机的操作。

3 Ansible是基于模块工作的,它只是提供了一种运行框架,它本身没有完成任务的能力,真正执行

操作的是Ansible的模块, 比如copy模块用于拷贝文件到远程主机上,service模块用于管理服务的

启动、停止、重启等。

4 Ansible其中一个比较鲜明的特性是Agentless,即无Agent的存在,它就像普通命令一样,并非C/S

软件,也只需在某个作为控制节点的主机上安装一次Ansible即可,通常它基于ssh连接来控制远程

主机,远程主机上不需要安装Ansible或其它额外的服务。

5 使用者在使用时,在服务器终端输入命令或者playbooks,会通过预定好的规则将playbook拆解

为play,再组织成ansible可以识别的任务,调用模块和插件,根据主机清单通过SSH将临时文件发

给远程的客户端执行并返回结果,执行结束后自动删除

6 Ansible的另一个比较鲜明的特性是它的绝大多数模块都具备幂等性(idempotence)。所谓幂等性,

指的是多次操作或多次执行对系统资源的影响是一致的。比如执行 systemctl stop xxx 命令来停止

服务,当发现要停止的目标服务已经处于停止状态, 它什么也不会做,所以多次停止的结果仍然

是停止,不会改变结果,它是幂等的,而 systemctl restart xxx 是非幂等的。 

Ansible的很多模块在执行时都会先判断目标节点是否要执行任务,所以,可以放心大胆地让

Ansible去执行任务,重复执行某个任务绝大多数时候不会产生任何副作用。

1.2 Ansible的四大组件

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

1.3 ansible 具有如下特点:

1 部署简单,只需在主控端部署Ansible环境, 被控端无需做任何操作

2 默认使用SSH协议设备进行管理;

3 主从集中化管理

4 配置简单、功能强大、扩张性强;

5 支持API及自定义模块,可以通过Pyhton轻松扩展

6 通过playbooks 来定制强大的配置、状态管理

7 对云计算平台、大数据都有很好的支持

二 ansible 环境安装部署

管理端192.168.11.6ansible
被管理端192.168.11.12
被管理端192.168.11.13

1 关闭防火墙 防护

 

2 管理端安装 ansible  

先安装 epel 源

3 ansible 目录结构

4 配置主机清单

cd /etc/ansible  

5 配置密钥对验证

ssh-keygen -t rsa #一路回车,

6 使用免密登录

sshpass -p '123' ssh-copy-id root@192.168.11.12

sshpass -p '123' ssh-copy-id root@192.168.11.13  

调整之后 就可以免密登录了

7 做映射加快访问速度 

 vim /etc/hosts

三 ansible 命令行模块

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

ansible-doc -l

列出所有已安装的模块,按q退出

1 command 模块

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

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

ansible 192.168.11.12 -m command -a 'date'
指定 ip 执行 date

ansible mcb02 -a 'date'
指定组执行 date

ansible all -m command -a 'date'				#all 代表所有 hosts 主机

ansible all -a 'ls /'							#如省略 -m 模块,则默认运行 command 模块

 

常用的参数: 
chdir:在远程主机上运行命令前提前进入目录

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

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

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

2 shell 模块 

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

ansible-doc -s shell

ansible mcbweb01 -m shell -a "echo 123| passwd --stdin mcb05"

ansible mcbweb01 -m shell -a 'echo $(ifconfig ens33 | awk "NR==2 {print $2}") | cut -d " " -f2'

以空格为分隔符,取第二列的内容,打印第二行

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

//常用的参数:
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'			#启动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-doc -s setup

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

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

pytest教程-36-钩子函数-pytest_collection_start

领取资料&#xff0c;咨询答疑&#xff0c;请➕wei: June__Go 上一小节我们学习了pytest_unconfigure钩子函数的使用方法&#xff0c;本小节我们讲解一下pytest_collection_start钩子函数的使用方法。 pytest_collection_start(session) 是一个 pytest 钩子函数&#xff0c;…

YOLO-World环境搭建推理测试

一、引子 CV做了这么多年&#xff0c;大多是在固定的数据集上训练&#xff0c;微调&#xff0c;测试。突然想起来一句话&#xff0c;I have a dream&#xff01;就是能不能不用再固定训练集上捣腾&#xff0c;也就是所谓的开放词汇目标检测&#xff08;OVD&#xff09;。偶尔翻…

new mars3d.control.MapSplit({实现点击卷帘两侧添加不同图层弹出不同的popup

new mars3d.control.MapSplit({实现点击卷帘两侧添加不同图层弹出不同的popup效果&#xff1a; 左侧&#xff1a; 右侧&#xff1a; 说明&#xff1a;mars3d的3.7.12以上版本才支持该效果。 示例链接&#xff1a; 功能示例(Vue版) | Mars3D三维可视化平台 | 火星科技 相关代…

C++进阶:AVL树

AVL树的概念 二叉搜索树虽可以缩短查找的效率&#xff0c;但 如果数据有序或接近有序二叉搜索树将退化为单支树&#xff0c;查 找元素相当于在顺序表中搜索元素&#xff0c;效率低下 。因此&#xff0c;两位俄罗斯的数学家 G.M. A delson- V elskii 和 E.M. L andis 在 1962 …

如何确定Unity/VNXe存储的主控制器(Primary SP)

DELL EMC的Unity或者VNXe存储都是双控的架构&#xff08;VNXe 1代设备有部分支持单控配置&#xff09;&#xff0c;有些的CLI检查命令是必须在primary SP&#xff0c;也就是主控制器上执行的&#xff0c;那么问题来了&#xff0c;如何确定两个控制器中那个是主控制器呢&#xf…

FreeRTOS资源管理

1.以前临界资源的保护方式 有使用过静态局部变量来保护临界资源&#xff0c;也有用队列&#xff0c;信号量&#xff0c;互斥量来保护临界资源。这些都是在多个任务会共同使用临界资源的情况下我们的保护方式。 问题提出&#xff1a;如果有个传感器在读取数据时有严格的时序&a…

使用idea编辑器回退git已经push的代码

直接上结果 选择想要回退的那次/多次提交历史, 右击, 选中 revert commit git自动产生一个Revert记录&#xff0c;然后我们会看到git自动将我第三次错误提交代码回退了&#xff0c;这个其实就相当于git帮我们手动回退了代码。 后续&#xff0c;只需要我们将本次改动push到远…

js之DOM 文档对象模型

当网页被加载时&#xff0c;浏览器会创建页面的文档对象模型&#xff08;Document Object Model&#xff09;&#xff0c;简称 DOM。DOM 模型被结构化为对象树&#xff0c;又称DOM 树。 DOM 实际上是以面向对象方式描述的对象模型&#xff0c;它将文档建模为一个个对象&#xf…

ChatGPT的真实能力如何?七大NLP任务一探究竟!

文章链接&#xff1a;https://arxiv.org/pdf/2405.00704 ChatGPT已经改变了人工智能社区&#xff0c;一个活跃的研究方向是ChatGPT的性能评估。评估的一个关键挑战是ChatGPT仍然是闭源的&#xff0c;传统的基准数据集可能已被ChatGPT用作训练数据。在本文中: 调查了最近的研究…

Linux 内核的操作系统确实需要一直运行

在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「 Linux的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01; 但是这并不是调度的基础。每…

【1小时掌握速通深度学习面试6】图神经网络-下

目录 23. GraphSage 24.简述图神经网络的推理机制在其他领域中的应用 与传统NN的区别&#xff08;GNN优点&#xff09; 23. GraphSage GraphSage出现之前的图网络方法需要图中所有的顶点在训练embedding的时候都出现&#xff0c;这些的方法本质上是transductive&#xff0c…

字节上岸成功,整理一波测试开发岗的基础知识,含答案

本科非科班&#xff0c;去年秋招找非技术岗工作失败&#xff08;无法通过群面&#xff09;。谁又能想到今年春招形势严峻比去年秋招还严峻…. 太难了&#xff01;&#xff01;&#xff01;&#xff01; 2月末开始投简历&#xff0c;3月份开始面了tplink、字节、美团、广立微电…

自编码器网络

1.自编码器网络 自动编码器是一种无监督的数据维度压缩和数据特征表达方法。 无监督 在海量数据的场景下&#xff0c;使用无监督的学习方法比有监督的学习方法更省力。 维度上的压缩 自编码网络可以根据输入的数据&#xff0c;对其进行表征学习。输入数据转换到隐藏层co…

简单介绍IIC通信协议

文章目录 一&#xff0c;简单介绍二&#xff0c;IIC物理层三&#xff0c;IIC通信时序1.起始位与停止位2.IIC读写地址位信号3.IIC应答信号4.IIC数据位收发信号 四&#xff0c;总线速率五&#xff0c;主机发送数据流程六&#xff0c;主机接收数据流程七&#xff0c;IIC的时钟延展…

ComfyUI 基础教程(十四):ComfyUI中4种实现局部重绘方法

在ComfyUI中有多种方式可以实现局部重绘,简单的方式是使用VAE内补编码器进行局部重绘,也可以用Fooocus inpaint进行局部重绘,还可以用controlNet的inpaint模型进行局部重绘,以及使用Clip seg蒙版插件! 本篇介绍使用VAE內补编码器进行局部重绘的方法。 1、VAE内补编码器 局…

OpenHarmony实战开发-请求自绘制内容绘制帧率

对于基于XComponent进行Native开发的业务&#xff0c;可以请求独立的绘制帧率进行内容开发&#xff0c;如游戏、自绘制UI框架对接等场景。 接口说明 开发步骤 说明&#xff1a; 本范例是通过Drawing在Native侧实现图形的绘制&#xff0c;并将其呈现在NativeWindow上 1.定义Ark…

docker的commit命令使用制作镜像

docker run -it ubuntu 最基础的ubuntu启动后安装vim 的命令 apt-get update apt-get -y install vim docker commit -m"my_test_ubuntu" -a"za" 80977284a998 atljw/myubuntu:1.0 将本地镜像推送到阿里云 首先登录阿里云服务-控制台 记得一定要设定设…

免费领取!最新2024中国行政区划数据(Shp)!审图号:GS(2024)0650号

最新2024中国行政区划数据&#xff08;Shp&#xff09; 最近&#xff0c;在天地图官网对外公布了带审图号的行政区划矢量&#xff0c;包含省、市、县。官网提供GeoJSON格式下载。 数据介绍 分为省、市、县三级尺度。通过格式转换&#xff0c;形成shape格式的边界线数据和面数…

springboot版本升级,及解决springsecurity漏洞问题

背景&#xff1a; 项目中要解决 Spring Security RegexRequestMatcher 认证绕过漏洞&#xff08;CVE-2022-22978&#xff09; 漏洞问题&#xff0c;并且需要将项目的版本整体升级到boot版本2.1.7&#xff0c;升级改造过程非常的痛苦&#xff0c;一方面对整个框架的代码不是很熟…

关于视频号小店,常见问题解答,开店做店各方面详解

大家好&#xff0c;我是电商笨笨熊 视频号小店作为今年风口&#xff0c;一个新推出的项目&#xff0c;凭借着自身流量加用户群体的优势吸引了不少的电商玩家。 但对于很多玩家来说&#xff0c;视频号小店完全是一个新的项目、新的领域&#xff0c;因此也会存在很多的疑问&…