自动化运维工具Ansible

目录

一.Ansible基本内容

1.定义

2.特点与优势

优势:

(1)轻便性:无需在被控制服务器上安装客户端,Ansible基于ssh协议

(2)幂等性:大部分模块有幂等性,即如果输入systemctl stop firewalld当发现要停止的服务已经停止就不会做任何操作了,多次停止不会改变结果。systemtl restart是非幂等的。

(3)判断性:大部分模块在执行时都会判断目标节点是否要执行任务,所有重复执行某个任务大部分时间不会产生副作用

(4)简介性:一个窗口即可管理所有需要控制的机器,无需开启多个窗口

特点:

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

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

(3)主从集中化管理;

(4)配置简单、功能强大、扩展性强;

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

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

(7)对云平台和大数据都有很好的支持

4.Anisible核心程序

(1)HostInventory:记录由Ansible管理的主机信息,端口,ip,密码等

(2)playbooks:'剧本'YAML格式文件,多任务定义在一个文件中,定义主机需要调用那些模块完成功能

(3)core modeules:核心模块主要操作通过调用核心模块来完成管理任务

(4)customodules:自定义模块,完成核心模块无法完成的模块,支持多种语言编写

(5)connectiontugins:连接插件,ansible和主机通信使用(ssh协议)

5.Ansible工作原理

(1)加载自己的配置文件,默认/etc/ansible/ansible.cfg

(2)查找对应的主机的配置文件,找到要执行的主机或组/etc/ansible/hosts文件

(3)加载自己对应的模块文件,如command、yum、ping、

(4)通过ansible将模块命令生成对应的临时py文件(类似python脚本),并将该文件传输至被管理端

(5)传输到在被控制端的对应用户的家目录下.ansible/tmp/xxx/xxx.py

(6)被控制端给传输过来的py文件加执行权限

(7)执行并返回结果,执行完成后删除py文件并sleep 0退出

6.选项

二.Ansible自动化运维工具部署

三.Ansible常用模块

1.ansible命令模块

2.command模块

3.shell模块

4.cron模块

5.user模块

6. group模块 

7. copy模块

8.file模块

9.hostname模块

10.ping模块

11.yum模块

12.service/system模块

13.script模块

14.setup模块

四.hostsinverntory主机清单

1.inventory 中的变量含义

2.主机变量使用

3.组变量使用

4.组嵌套使用


一.Ansible基本内容

1.定义

Ansible是基于模块工作的,只是提供了一种运行框架,本身没有完成任务的能力,真正操作的是Anisble的模块。每个模块都是独立的、实现了批量系统配置、批量程序部署、批量运行命令等功能。

2.特点与优势

优势:
(1)轻便性:无需在被控制服务器上安装客户端,Ansible基于ssh协议
(2)幂等性:大部分模块有幂等性,即如果输入systemctl stop firewalld当发现要停止的服务已经停止就不会做任何操作了,多次停止不会改变结果。systemtl restart是非幂等的。
(3)判断性:大部分模块在执行时都会判断目标节点是否要执行任务,所有重复执行某个任务大部分时间不会产生副作用
(4)简介性:一个窗口即可管理所有需要控制的机器,无需开启多个窗口
特点:
(1)部署简单,只需要主控端部署Ansible环境,被控端无需做任何操作;
(2)默认使用SSH协议设备进行管理;
(3)主从集中化管理;
(4)配置简单、功能强大、扩展性强;
(5)支持API及自定义模块,可以通过Python轻松扩展
(6)通过playbooks来定制强大的配置、状态管理
(7)对云平台和大数据都有很好的支持

4.Anisible核心程序

(1)HostInventory:记录由Ansible管理的主机信息,端口,ip,密码等
(2)playbooks:'剧本'YAML格式文件,多任务定义在一个文件中,定义主机需要调用那些模块完成功能
(3)core modeules:核心模块主要操作通过调用核心模块来完成管理任务
(4)customodules:自定义模块,完成核心模块无法完成的模块,支持多种语言编写
(5)connectiontugins:连接插件,ansible和主机通信使用(ssh协议)

5.Ansible工作原理

(1)加载自己的配置文件,默认/etc/ansible/ansible.cfg
(2)查找对应的主机的配置文件,找到要执行的主机或组/etc/ansible/hosts文件
(3)加载自己对应的模块文件,如command、yum、ping、
(4)通过ansible将模块命令生成对应的临时py文件(类似python脚本),并将该文件传输至被管理端
(5)传输到在被控制端的对应用户的家目录下.ansible/tmp/xxx/xxx.py
(6)被控制端给传输过来的py文件加执行权限
(7)执行并返回结果,执行完成后删除py文件并sleep 0退出

6.选项

--version#显示版本
-m module#指定模块,默认为command
-v#详细过程 -vv -vvv更详细
--list-hosts#显示主机列表,可简写 --list
-C, --check#检查,并不执行
-T, --timeout=TIMEOUT#执行命令的超时时间,默认10s
-k, --ask-pass#提示输入ssh连接密码,默认Key验证 
-u, --user=REMOTE_USER#执行远程执行的用户,默认root
-b, --become#代替旧版的sudo 切换
--become-user=USERNAME#指定sudo的runas用户,默认为root
vim /etc/sudoers 用户权限

-K, --ask-become-pass

#提示输入sudo时的口令
-f FORKS, --forks FORKS#指定并发同时执行ansible任务的主机

二.Ansible自动化运维工具部署

yum install  -y epel-release 
#安装epel-release
yum install -y  ansible
#安装ansible
#配置文件位置:/etc/ansible/ansible
#hosts文件位置:/etc/ansible/hosts
vim /etc/ansible/hosts
#编辑hosts文件添加被管理的机器,内容如下
[webservers]
192.168.227.102
192.168.227.103
#[webservers]为一个组,组内2个服务器,添加完毕保存退出
ssh-keygen
#生成公钥,输入命令输入4个回车即可
cd ~/.ssh
ssh-copy-id -i   192.168.227.102
ssh-copy-id -i   192.168.227.103
#进入生成的公钥路径将公钥传输给备管理的服务器,传输需要输入每台备管理服务的root密码
ansible ansible-doc  -l 
#安装完毕,此命令可以查看有哪些ansible模块,按q退出
ansible  webservers  -m command  -a 'pwd'
#安装完成尝试管理webservers组输入pwd命令
ansible  all   -a 'ls'
#安装完成尝试管理所有hosts中主机输入ls命令,不指定模块默认为command模块
ansible  192.168.227.102  -m -a 'ls'
#安装完成尝试管理192.168.30.12服务器输入pwd命令

三.Ansible常用模块

1.ansible命令模块

命令格式:

ansible <组名>/ip -m <模块> -a<参数列表>

ansible-doc -s 模块

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

2.command模块

#此模块不能使用管道符和重定向,指定模块默认为commend模块

举例:ansible  webservers   -m   command   -a  'date'

#调用command模块在192.168.30.11服务器上执行ls命令,若不指定则默认为command模块

3.shell模块

#用远程主机的shell进程,打开一个子shell进行命令操作,支持管道符和重定向

举例:ansible webservers -m shell -a 'ifconfig ens33 |awk "NR==2{print \$2}"'

#提取webservers组中的所有ip地址,注意双引号不识别变量所以要加转义符\

4.cron模块

#远程主机定义计划任务,2种状态present(添加)和absent(移除),默认为present。

常用参数:minute/hour/day/month/weekday:分/时/日/月/周

job:任务计划要执行的命令

name:任务计划的名称

举例:ansible  webservers -m cron  -a 'name=crontest hour="*/12"  day="*/1" job="/usr/bin/echo   cron test "   ' 

 ansible webservers -m cron -a "name=crontest  state=absent"

5.user模块

常用参数:name:用户名;shell:用户默认shell;uid:指定用户uid;group:指定用户基本组

                state:账户状态present增加/absent删除;system:是否为系统用户yes/no;

                move_home:yes/no若创建用户的家目录存在是否移动;

                remove:yes/no当state=absent时是否删除家目录;

                passwd:指定用户的密码;comment:用户的注释信息

举例:ansible webservers -m user -a 'name="crontest"  uid="10086"  group="root"'

                ansible webservers -m user -a 'name=crontest    state=absent  remove=yes'

6. group模块 

 #用户组模块

常用参数: name:组名称 gid:组id system:是否为系统组

7. copy模块

 #复制文件或输出内容到被控制服务器上

常用参数:

mode:指出复制时,目标文件的权限

owner:指出复制时,目标文件的属主(对面无此组或此主会报错)

group:指出复制时,目标文件的属组

dest=‘路径’:目标文件路径

src=‘路径’:源文件路径

content=‘字符串内容’:将字符串内容复制到到目标文件中,等于重定向即覆盖,不能与src同用

举例:       ansible webservers -m copy   -a "src=/a.txt  dest=/opt/"

ansible webservers -m copy   -a 'content="123456"  dest=/opt/a.txt'

8.file模块

文件属性管理模块

常用参数:owner:文件的属主;group:文件属组;mode:文件权限;path:文件路径

                       指定的属主和属组不存在会报错
举例:ansible  webservers  -m  file  -a  'owner=wsk group=wsk mode=777 path=/opt/a.txt'

9.hostname模块

修改被控制端的主机名

参数:name:指定被控端的主机名

举例:ansible  webservers -m hostname -a "name=ansible"

10.ping模块

检测ansible与被控端的网络连通性

举例:ansible  webservers  -m ping

11.yum模块

在远程主机上yum安装与卸载软件包

常用参数:name:指定要安装卸载的软件;state=present/absent,默认persent添加,absent卸载

举例:ansible   webservers  -m  yum  -a  "name=httpd"

12.service/system模块

管理远程被控制主机上的管理服务的运行状态

常用参数: name=“名称” :管理的服务名称

enable=true/false 设置服务开机自启或关闭

state=start/stop/restart 设置服务的状态为开始/关闭/重启

enable=yes/no        设置是否开机自启;runlevel:若设置开机自启则要设置在那些系统等级使用

举例:ansible webservers -m service -a 'enabled=yes  name=httpd state=started'

13.script模块

#实现远程批量运行本地的shell脚本
ansible服务器:
vim  /test.sh
#编写/下的test.sh脚本内容如下
#!/bin/bash
echo  "this is test"
chmod +x /test.sh
ansible webservers -m script -a "/test.sh"

14.setup模块

setup 模块可以获取这些信息 facts 组件收集d 被管理节点信息

参数:filter 过滤可配合正则表达式。

ansible webservers -m setup -a 'filter=*ipv4'

四.hostsinverntory主机清单

hosts配置文件位置:/etc/ansible/hosts;

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

1.inventory 中的变量含义

ansible_hostansible连接节点时的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提升为指定用户权限时的密码

2.主机变量使用

写法1:
[webservers]
192.168.227.101 ansible_port=22 ansible_user=root ansible_password=abc123
192.168.227.101 ansible_port=22 ansible_user=root ansible_password=abc123
#webservers组中被控制端192.168.227.101的端口号为22登录时用户是root密码为abc123
写法2:
[webservers]
192.168.227.10[1:2] ansible_port=22 ansible_user=root ansible_password=abc123
#如果是名称类似的主机,可以使用列表的方式标识各个主机
写法3:
[webservers]
192.168.227.101:22
192.168.227.102:22
#默认ssh管理时的端口为22,若不是22则直接在被管理ip后加冒号和对应端口号

3.组变量使用

[webservers:vars]     
ansible_user=root
ansible_password=abc123
#表示webservers 组内所有主机定义变量控制时使用root账户密码为abc123
[all:vars]       
ansible_port=22
#表示为所有组的所有主机定义变量使用ssh远程管理时都是22端口

4.组嵌套使用

#nginx组
[nginx]
192.168.227.101
192.168.227.102
#httpd组
[httpd]
192.168.227.103
192.168.227.104
#组内嵌为web
[web:children]
nginx
httpd
#表示web组的成员即children的直译‘孩子’包括nginx和httpd组

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

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

相关文章

react 综合题-旧版

一、组件基础 1. React 事件机制 javascript 复制代码<div onClick{this.handleClick.bind(this)}>点我</div> React并不是将click事件绑定到了div的真实DOM上&#xff0c;而是在document处监听了所有的事件&#xff0c;当事件发生并且冒泡到document处的时候&a…

一文搞懂多模态:BeiT-3之前的14个多模态+4个周边原理解读

在人工智能的世界里&#xff0c;多模态学习不断地展现出其重要性。这个领域的迅速发展不仅促进了不同类型数据之间的深度融合&#xff0c;还为机器理解世界提供了更加丰富和细腻的视角。随着科技的不断演进&#xff0c;人工智能模型已经开始渐渐具备处理和理解从文本、图像&…

数组和指针

一、数组不可以被赋值 数组一旦声明之后&#xff0c;是不可以修改的&#xff0c;只有数组中的元素是可以被修改的 #include<stdio.h> int main() {int arr1[]{1,2,3};int arr2[]{7,8,9};arr1arr2;return 0; } 二、指针可以被赋值 指针可以通过赋值指向其他内存空间 #…

flutter 开发app可以做的事情

热更新文件/图片 预览组件/文件上传分片/动态多语言/兼容web缓存管理页面动画封装公用组件库日志系统/日志规范/错误定位低代码实现/探索/落地网络延迟脚本字体包优化web 页面浏览器刷新没有历史路径&#xff0c;导致报错选择多语言之后&#xff0c;退出再次进入&#xff0c;没…

Excel生成 chart 混合图表

在开发中有这样一个需求&#xff0c;邮件预警的时候&#xff0c;要求邮件主体内容是一个Chart 图表&#xff08;生成后的img&#xff09;&#xff0c;邮件需要有附件&#xff0c;且附件是Excel列表加图表&#xff0c;图表类型是混合图。 回顾&#xff1a;在之前一篇讲到如何使用…

云数据库Redis配置用户名密码连接

一般情况&#xff0c;生产环境6379端口是禁止对外开放的&#xff0c; 所有用户名密码可以不设置。 但是如果有格鲁需求&#xff0c;需要开放redis公网访问&#xff0c;建议端口限制IP&#xff0c;并设置用户密码 spring中配置 阿里云数据库 云数据库 Redis_缓存数据库_高并…

数据分析可视化神器---streamlit框架,各种图表绘制,布局以及生产综合案例剖析

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

如何应用TRIZ点亮产品新概念设计的火花?

在创新设计的领域里&#xff0c;TRIZ&#xff08;发明问题解决理论&#xff09;被誉为一把开启创新之门的金钥匙。它能够帮助设计师和工程师突破思维定式&#xff0c;找到前所未有的解决方案。那么&#xff0c;如何在产品的新概念设计阶段&#xff0c;利用TRIZ点亮创新的火花呢…

玩转 Spring 状态机:更优雅的实现订单状态流转

说起 Spring 状态机&#xff0c;大家很容易联想到这个状态机和设计模式中状态模式的区别是啥呢&#xff1f;没错&#xff0c;Spring 状态机就是状态模式的一种实现&#xff0c;在介绍 Spring 状态机之前&#xff0c;让我们来看看设计模式中的状态模式。 1. 状态模式 状态模式…

探秘知乎的排名算法:知乎撰写高质量内容的秘诀

知乎作为一个知识问答社区&#xff0c;用户众多、内容繁杂&#xff0c;那么究竟是什么样的原则决定了知乎上的排名呢&#xff1f;腾轩科技传媒探讨知乎排名的规则&#xff0c;并分享如何撰写高质量的文章。 知乎排名的算法 在知乎这个巨大的社交平台上&#xff0c;任何一个用户…

torch.backends.cudnn.benchmark 作用

相关参数 torch.backends.cudnn.enabled torch.backends.cudnn.benchmark torch.backends.cudnn.deterministictorch.backends.cudnn.benchmark True&#xff1a;将会让程序在开始时花费一点额外时间&#xff0c;为整个网络的每个卷积层搜索最适合它的卷积实现算法&#xff0c…

【SysBench】Linux 安装 sysbench-1.20

安装目的是为了对 MySQL 8.0.x 、PostgreSQL 进行基准测试。 1、二进制包安装 在 Linux 上下载和安装 sysbench 最简单的方法是使用 托管的二进制包存储库 packagecloud 。存储库是在每个 sysbench 版本上自动更新。目前为 x86_64、i386 和 aarch64 二进制文件可用。 RHEL/C…

深入理解指针——C语言

目录 1. 内存和地址 2. 指针变量和地址 3. 指针变量类型的意义 4. const修饰指针 5. 指针运算 6. 野指针 7. assert断言 8. 指针的使用和传址调用 9. 数组名的理解 10. 使用指针访问数组 11. 一维数组传参的本质 12. 冒泡排序 13. 二级指针 14. 指针数组 15. 指…

公司Logo设计可以打造独特品牌标识,彰显企业价值!

公司Logo作为企业品牌的核心标识&#xff0c;对于品牌形象和企业价值的传达起着至关重要的作用。然而&#xff0c;许多人在设计公司Logo时&#xff0c;往往忽略了设计背后的含义&#xff0c;导致Logo缺乏独特性和深度。本文将为你揭秘公司Logo设计及含义的重要性&#xff0c;并…

Android 学习之追踪应用的安装情况

先上结论&#xff0c;急用的话直接看结论 结论一、借助 API 读取安装信息&#xff0c;然后上报二、借助手动埋点&#xff0c;然后上报三、对比 前提过程 结论 一、借助 API 读取安装信息&#xff0c;然后上报 通过 PackageManager 的 API&#xff0c;我们可以得知自身应用安装…

CSS中position的属性有哪些,区别是什么

position有以下属性值&#xff1a; 属性值概述absolute生成绝对定位的元素&#xff0c;相对于static定位以外的一个父元素进行定位。元素的位置通过left、top、right、bottom属性进行规定。relative生成相对定位的元素&#xff0c;相对于其原来的位置进行定位。元素的位置通过…

Python docx学习笔记

个人学习笔记。 1 工具介绍 python-docx 是用于创建可修改 微软 Word 的一个 python 库&#xff0c;提供全套的 Word 操作&#xff0c;是最常用的 Word 工具。 1.1 基本概念 Document&#xff1a;是一个 Word 文档 对象&#xff0c;不同于 VBA 中 Worksheet 的概念&#xf…

基于HttpClient实现的微信用户登陆微信小程序

目录 HttpClient介绍 微信小程序登陆 代码编写 导入HttpClient的Maven坐标 微信小程序获得临时Code并将其传至开发者服务器 开发者服务器构建url&#xff0c;并获取openid&#xff0c;并传给微信小程序 HttpClientUtil的封装的doGet方法 参考链接 HttpClient介绍 httpC…

【Java - 框架 - Mybatis】(02) SpringBoot整合Mybatis操作Mysql - 快速上手

“SpringBoot"整合"Mybatis"操作"Mysql” - 快速上手&#xff1b; 环境 Java版本"1.8.0_202"&#xff1b;Spring Boot版本"2.5.9"&#xff1b;Windows 11 专业版_22621.2428&#xff1b;IntelliJ IDEA 2021.1.3(Ultimate Edition)&a…

[Java并发编程] Java开发必须知道的synchronized关键字

前言 在Java后台开发或者Android开发中&#xff0c;synchronized出现的频率并不算低。本文就什么是synchronized&#xff0c;如何使用synchronized以及synchronized的实现原理做深入的讲解&#xff0c;揭开synchronized神秘面纱&#xff0c;有助于大家掌握synchronized的用法并…