自动化运维工具---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.12sshpass -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 执行 dateansible 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 fileansible 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 yumansible 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 scriptvim test.sh
#!/bin/bash
echo "hello ansible from script" > /opt/script.txtchmod +x test.sh
ansible webservers -m script -a 'test.sh'
ansible webservers -a 'cat /opt/script.txt'

 

检测一下: 

 13 setup 模块

//facts 组件是用来收集被管理节点信息的,使用 setup 模块可以获取这些信息
ansible-doc -s setupansible webservers -m setup				#获取mysql组主机的facts信息
ansible dbservers -m setup -a 'filter=*ipv4'    #使用filter可以筛选指定的facts信息

 

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

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

相关文章

Mysql数据在磁盘上的存储结构

一. 前言 一行数据的存储格式大致如下所示: 变长字段的长度列表&#xff0c;null值列表&#xff0c;数据头&#xff0c;column01的值&#xff0c;column02的值&#xff0c;column0n的值… 二. 变长字段 在MySQL里有一些字段的长度是变长的&#xff0c;是不固定的&#xff0c;…

设计模式Java实现-工厂模式

✨这里是第七人格的博客✨小七&#xff0c;欢迎您的到来~✨ &#x1f345;系列专栏&#xff1a;设计模式&#x1f345; ✈️本篇内容: 工厂模式✈️ &#x1f371;本篇收录完整代码地址&#xff1a;https://gitee.com/diqirenge/design-pattern &#x1f371; 楔子 记得刚…

Python量化炒股的统计数据图

Python量化炒股的统计数据图 单只股票的收益统计图 查看单只股票的收盘价信息 单击聚宽JoinQuant量化炒股平台中的“策略研究/研究环境”命令&#xff0c;进入Jupyter Notebook的研究平台。然后单击“新建”按钮&#xff0c;创建Python3文件&#xff0c;输入如下代码如下&am…

ComfyUI搭建和注意事项for WIN[笔记]

下载ComfyUI(GitHub - comfyanonymous/ComfyUI: The most powerful and modular stable diffusion GUI, api and backend with a graph/nodes interface.) 从源码上搭建比较麻烦&#xff0c;一般不推荐&#xff0c;所以跑到release里面找一个下载。我的显卡是GeFore GTX 1050 …

STM32编译前置条件配置

本文基于stm32f104系列芯片&#xff0c;记录编程代码前需要的操作&#xff1a; 添加库文件 在ST官网下载标准库STM32F10x_StdPeriph_Lib_V3.5.0&#xff0c;解压后&#xff0c;得到以下界面 启动文件 进入Libraries&#xff0c;然后进入CMSIS&#xff0c;再进入CM3&#xff…

深度学习中的不确定性量化:技术、应用和挑战综述(一)

不确定性量化(UQ)在减少优化和决策过程中的不确定性方面起着关键作用&#xff0c;应用于解决各种现实世界的科学和工程应用。贝叶斯近似和集成学习技术是文献中使用最广泛的两种UQ方法。在这方面&#xff0c;研究人员提出了不同的UQ方法&#xff0c;并测试了它们在各种应用中的…

018、Python+fastapi,第一个Python项目走向第18步:ubuntu24.04 安装cuda和pytorch环境

一、说明 我们安装了pytorch环境之后&#xff0c;会用yolo v9 来测试一下&#xff0c;看8g 显存能不能跑下来&#xff0c;上次用无影云电脑&#xff0c;4cpu8g内存直接爆了&#xff0c;云电脑也死机了&#xff0c;提示一直占用内存不释放&#xff0c;我自己的云电脑不能占用内…

Java中的maven的安装和配置

maven的作用 依赖管理 方便快捷的管理项目依赖的资源&#xff0c;避免版本冲突问题 统一项目管理 提供标准&#xff0c;统一的项目结构 项目构建 标准跨平台&#xff08;Linux、windows、MacOS&#xff09;的自动化项目构建方式 maven的安装和配置 在maven官网下载maven Ma…

【革命启示录】Spring框架:Java开发的“核聚变”能量源!

Hello&#xff0c;我是阿佑&#xff0c;今天给大家整的活是 《Java开发的“核聚变”能量源》 文章目录 Spring框架原理详解一、引言简介目的特点例子 二、背景介绍问题解决方案例子 三、核心概念3.1 控制反转&#xff08;Inversion of Control, IoC&#xff09;定义实现例子与代…

多商户Docker Supervisor进程管理器部署

Dockerfile 根目录下没有Dockerfile的可以复制下面的命令 # 使用基础镜像 FROM leekay0218/crmeb-mer## 复制代码 ## 在本地调试注释掉&#xff0c;使用映射把文件映射进去 #ADD ./ /var/www# 设置工作目录 WORKDIR /var/www# 设置时区为上海 ENV TZAsia/Shanghai RUN ln -sn…

python安装问题及解决办法(pip不是内部或外部命令也不是可运行)

pip是python的包管理工具&#xff0c;使python可在cmd&#xff08;命令行窗口&#xff0c;WinR后输入cmd&#xff09;中执行 针对 “pip不是内部或外部命令也不是可运行” 问题&#xff0c;需要在安装的时候将python添加到环境变量中 上图第三个选项必须勾选才能在cmd中使用pi…

python从0开始学习(四)

目录 前言 1、算数运算符 1.1 //:整除运算符 1.2 %:取模操作 1.3 **&#xff1a;幂运算 2、赋值运算符 3、比较运算符 4、逻辑运算符 5、位运算符 5.1 &&#xff1a;按位与 5.2 |&#xff1a;按位或 5.3 ^&#xff1a;按位异或 5.4 ~&#xff1a;按位取反 5.5…

如何保证Redis双写一致性?

目录 数据不一致问题 数据库和缓存不一致解决方案 1. 先更新缓存&#xff0c;再更新数据 该方案数据不一致的原因 2. 先更新数据库&#xff0c;再更新缓存 3. 先删除缓存&#xff0c;再更新数据库 延时双删 4. 先更新数据库&#xff0c;再删除缓存 该方案数据不一致的…

我独自升级崛起游戏账号登录注册教程 (5.8最新版)

新韩漫公司所发布的这项动作游戏已向玩家们敞开大门&#xff0c;为大家带来了前所未有的游戏体验和乐趣。这个游戏内包含了大量令人着迷的故事、令人印象深刻的战斗场景以及丰富多样的娱乐元素。在这其中最为引人注目的一点就是游戏内容中融入了“虚拟角色”的元素&#xff0c;…

【webrtc】RemoteAudioSource的创建线程

m98 代码&#xff1a;I:\webrtc m98_yjf\src\pc\rtp_transmission_manager.cc RtpTransmissionManager::CreateReceiver 在信令线程创建receiver receiver 是&#xff1a; rtc::scoped_refptr<RtpReceiverProxyWithInternal<RtpReceiverInternal>>receiver;其实际…

专家解读 | NIST网络安全框架(1):框架概览

随 着信息技术的快速发展&#xff0c;组织面临着越来越严峻的网络安全挑战。NIST网络安全框架&#xff08;NIST Cybersecurity Framework&#xff0c;CSF&#xff09;是一个灵活的综合性指南&#xff0c;旨在协助各类组织建立、改进和管理网络安全策略&#xff0c;以加强网络安…

【docker 】 push 镜像提示:denied: requested access to the resource is denied

往 Docker Registry &#xff08;私服&#xff09;push 镜像提示&#xff1a;denied: requested access to the resource is denied 镜像push 语法&#xff1a;docker push <registry-host>:<registry-port>/<repository>:<tag> docker push 192.16…

【软件工程】需求分析

目录 前言需求分析需求获取UML概述用例图用例图的组成用例图中的符号和含义包含的两种使用场景 用例图补充&#xff1a;“系统”用例模型建模确定系统参与者确定系统用例 用例文档用例文档组成部分 活动图组成元素初始节点和终点活动节点转换决策与分支、合并分岔与汇合 类图类…

将文本中的unicode字符替换成汉字

背景介绍 msql workbench导出数据库表的数据 导出的json数据 [{"english_id":1, "english_word":"ambition", "homophonic":"am-\u4ffa\uff0cbi-\u5fc5,tion-\u80dc\uff1a\u4ffa\u5fc5\u80dc", "chinese":&quo…

线性表的概念与结构,以及顺序表和链表的简单概念

1.线性表 线性表&#xff08;linear list&#xff09;是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构&#xff0c;常见的线性表&#xff1a;顺序表、链表、栈、队列、字符串... 线性表在逻辑上是线性结构&#xff0c;也就说是连续的一条直线…