Ansible的部署和命令模块

news2024/9/22 13:24:42

Ansible的部署和命令模块


目录

  • 一、ansible 的概述

  • 1.1ansible简介

  • 1.2官方网站

  • 1.3ansible 的特点

  • 1.4ansible的工作机制

  • 1.5ansible的组成模块

  • 二、ansible部署

  • 2.1环境准备

  • 2.2Asible的安装

  • 三、ansible 命令行模块

  • 3.1command 模块

  • 3.2shell 模块

  • 3.3cron 模块

  • 3.4user 模块

  • 3.5group 模块

  • 3.6copy 模块

  • 3.7file 模块

  • 3.8hostname 模块

  • 3.9ping 模块

  • 3.10yum 模块

  • 3.11service/systemd 模块

  • 3.12script 模块

  • 3.13setup 模块

  • 四、inventory 主机清单

  • 4.1主机变量

  • 4.2组变量

  • 4.3组嵌套


一、ansible 的概述

1.1ansible简介

Ansible是一款为类Unix系统开发的自由开源的配置和自动化工具。

它用Python写成,类似于saltstack和Puppet,但是有一个不同和优点是我们不需要在节点中安装任何客户端。

它使用SSH来和节点进行通信。Ansible基于 Python paramiko 开发,分布式,无需客户端,轻量级,配置语法使用 YMAL 及 Jinja2模板语言,更强的远程命令执行操作。

Ansible是一个基于Python开发的配置管理和应用部署工具,现在也在自动化管理领域大放异彩。它融合了众多老牌运维工具的优点,Pubbet和Saltstack能实现的功能,Ansible基本上都可以实现

  • Ansible能批量配置、部署、管理上千台主机。比如以前需要切换到每个主机上执行的一或多个操作,使用Ansible只需在固定的一台Ansible控制节点上去完成所有主机的操作

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

比如copy模块用于拷贝文件到远程主机上,service模块用 于管理服务的启动、停止、重启等

1.2官方网站

https://www.ansible.com/


1.3ansible 的特点


1、部署简单,没有客户端,只需在主控端部署Ansible环境,被控端无需做任何操作;

2、模块化:调用特定的模块,完成特定任务

3、默认使用SSH协议对设备进行管理;

4、主从集中化管理;

5、配置简单、功能强大、扩展性强;

6、支持API及自定义模块,可通过Python轻松扩展;

7、通过Playbooks来定制强大的配置、状态管理

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

9、具有幂等性:一个操作在一个主机上执行一遍和执行N遍的结果是一样的

ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。主要包括:

(1)连接插件connection plugins:负责和被监控端实现通信;

(2)host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;

(3)各种模块核心模块、command模块、自定义模块;

(4)借助于插件完成记录日志邮件等功能;

(5)playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务

Ansible其中一个比较鲜明的特性是Agentless,即无Agent的存在,它就像普通命令一样, 并非c/s软件,也只需在某个作为控制节点的主机上安装一次Ansible即可, 通常它基于ssh连接来控制远程主机,远程主机上不需要安装Ansible或其它额外的服务。

ansible的工作原理:使用者在使用时,在服务器终端输入命令或者playbooks,会通过预定好的规则将playbook拆解为play,再组织成ansible可以识别的任务,调用模块和插件,根据主机清单通过SSH将临时文件发给远程的客户端执行并返回结果,执行结束后自动删除

  • Ansible的另一个比较鲜明的特性是它的绝大多数模块都具备幂等性(idempotence)。所谓幂等性,指的是多次操作或多次执行对系统资源的影响是一致的。比如执行systemctl stop xxx命令来停止服务,当发现要停止的目标服务已经处于停止状态,它什么也不会做,所以多次停止的结果仍然是停止,不会改变结果,它是幂等的,而systemctl restart xxx是非幂等的

  • Ansible的很多模块在执行时都会先判断目标节点是否要执行任务,所以,可以放心大胆地让Ansible去执行任务,重复执行某个任务绝大多数时候不会产生任何副作用


1.4ansible的工作机制

Ansible 在管理节点将 Ansible 模块通过 SSH 协议推送到被管理端执行,执行完之后自动删除,可以使用 SVN 等来管理自定义模块及编排


1.5ansible的组成模块

Ansible的组成由以下模块组成:

  1. Ansible: ansible的核心模块

  1. Host Inventory:主机清单,也就是被管理的主机列表

  1. Playbooks:ansible的剧本,可想象为将多个任务放置在一起,一块执行

  1. Core Modules:ansible的核心模块

  1. Custom Modules:自定义模块

  1. Connection Plugins:连接插件,用于与被管控主机之间基于SSH建立连接关系

  1. Plugins:其他插件,包括记录日志等


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 dbservers -m command -a '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 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.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信息

inventory 主机清单


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

如果是名称类似的主机,可以使用列表的方式标识各个主机。

vim /etc/ansible/hosts

[webservers]

192.168.10.20:2222 #冒号后定义远程连接端口,默认是 ssh22 端口

192.168.10.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.91.150 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.91.150

192.168.91.160

[apache]

192.168.10.3[0:3]

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

nginx

apache

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

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

相关文章

【java】40 个 SpringBoot 常用注解(建议收藏)

本文目录一、Spring Web MVC 注解Spring Web MVC 注解RequestMappingRequestBodyGetMappingPostMappingPutMappingDeleteMappingPatchMappingControllerAdviceResponseBodyExceptionHandlerResponseStatusPathVariableRequestParamControllerRestControllerModelAttributeCross…

王道操作系统笔记(七)——— 内存管理的基本要求和连续分配管理方式

文章目录一、内存的概念和作用二、内存管理的概念三、进程运行的基本原理和要求3.1 程序执行过程3.2 逻辑地址和物理地址3.3 程序的链接3.4 程序的装入3.5 内存保护四、覆盖与交换4.1 覆盖技术4.2 交换技术五、连续分配管理方式5.1 单一连续分配5.2 固定分区分配5.3 动态分区分…

解决ArcSWAT 2012.10_8.25安装 Error 1001 无法获得SWAT_HRU.dll程序集中安装程序类型。->无法加载一个或多个请求熟悉

问题描述 Error1001.无法获得G:SWATArcSWATSWAT_HRUsdll 程序集中的安装程序类型。->无法加载一个或多个请求的类型。有关更多信息&#xff0c;请检索LoaderExceptions 属性。 这是由于找不到对应的dll文件。 参考ArcSWAT的帮助文档后&#xff0c;发现该版本 对应的ArcGI…

revit中如何创建有坡度的排水沟及基坑?

一、revit中如何创建有坡度的排水沟? 先分享一张有坡度排水沟的族的照片给大家加深一下印象&#xff0c;有了一个粗略的直观认识&#xff0c;小编就来说说做这个族的前期思路吧。 一、前期思路&#xff1a; 1、 用拼接的方式把这个族形状拼出来&#xff0c;先用放样&#xff0…

焕新启航,「龙蜥大讲堂」2023 年度招募来了!13 场技术分享先睹为快

龙蜥大讲堂是龙蜥推出的系列技术直播活动&#xff0c;邀请龙蜥社区的开发者们分享围绕龙蜥技术展开&#xff0c;包括但不限于内核、编译器、机密计算、容器、储存等相关技术领域。欢迎社区开发者们积极参与&#xff0c;共享技术盛宴。往期回顾龙蜥社区技术系列直播截至目前已举…

rust 程序设计语言入门(一)

本文是阅读《Rust程序设计语言》的学习记录&#xff0c;配合视频《Rust编程语言入门教程》食用更佳 环境搭建 windows下载rustup_init.exe&#xff0c;点击安装&#xff0c;默认选择msvc的toolchain&#xff0c;一路default即可 解决下载慢的问题&#xff0c;在powershell中修…

2.7、进程调度的时机、切换与过程、方式

1、进程调度的时机 进程调度\color{red}进程调度进程调度&#xff08;低级调度&#xff09;&#xff0c;就是按照某种算法从就绪队列中选择一个进程为其分配处理机 进程在操作系统内核程序临界区\color{red}操作系统内核程序临界区操作系统内核程序临界区中不能\color{red}不能…

网络连通性测试(ping/tcp)

网络连通性首先要看ping是否能够通其次&#xff0c;测试TCP是否能通方式一、iperf3/iperf2可以测试tcp的连接一方作为server&#xff0c;一方作为client来连接&#xff0c;但是iperf3和iperf2不兼容server&#xff1a;iperf3/iperf2 -s 172.20.0.36client: iperf3/iperf2 -c 17…

亚马逊、沃尔玛卖家自养号退款经验和测评技术

今天给大家介绍下在做亚马逊、沃尔玛退款自养号中的经验&#xff0c;众所周知&#xff0c;自养号最重要的是养号的环境&#xff0c;包括系统的纯净度&#xff0c;下单的信用卡以及其他的一些细节。 环境系统市面上有很多&#xff0c;鱼龙混杂&#xff0c;比如什么lumi&#xf…

Java测试——junit的使用(2)

排序 我们同一个类下的多个用例的执行顺序是不确定的&#xff0c;如果需要指定固定的顺序&#xff0c;则需要在类上加这个注解 TestMethodOrder(MethodOrderer.OrderAnnotation.class)然后在想要第一个执行的用例上加上 Order(1)第二个执行的用例上注解&#xff1a; Order(…

爬虫圈,常见的加密手段,你应该了解一下

常见加密手段 实验介绍 本实验为大家介绍一下常见的加密技术&#xff0c;掌握之后&#xff0c;可以在反爬时加入各加密算法&#xff0c;从而提高爬虫采集难度&#xff0c;本实验为大家介绍三类加密&#xff0c;其一是消息摘要算法/签名算法&#xff0c;其二是对称加密&#x…

十四、MySQL 约束详解

文章目录一、定义完整性约束1.1 实体完整性1.1.1 主键约束1.1.2 自增列&#xff1a;AUTO_INCREMENT1.1.3 候选键约束或唯一约束(UNIQUE KEY)1.2 用户定义完整性1.2.1 非空约束1.2.2 CHECK约束1.2.3 DEFAULT约束1.3 参照完整性1.3.1 FOREIGN KEY 约束的作用1.3.2 主表(父表)从表…

趣味三角——第10章——(sinx)/x

第10章 函数(sinx)/x I call our world Flatland, not because we call it so, but to make its nature clear to you, my happy readers, who are privileged to live in Space. (我称我们的世界为平面国&#xff0c;这样称呼它并不是我的本意&#xff0c;而是为了让你们明…

【Linux】Rsync基于rsync-daemon认证的使用(rsync服务端与客户端发配置、排错思路、使用示例、优缺点及使用场景)

一、Rsync基于rsync-daemon认证的使用与 ssh 认证不同&#xff0c;rsync 协议认证不需要依赖远程主机的 sshd 服务&#xff0c;但需要远程主机开启 rsyncd 服务&#xff0c;本地 rsyncd 服务可不必开启。另外&#xff0c;rsync 协议认证不是直接使用远程主机的真实系统账号&…

【C++之容器篇】造轮子:list的模拟实现与使用

目录前言一、关于list1. 简介2. 成员类型二、默认成员函数1. 构造函数1. list()2. list(size_t n,const T& val T())和list(InputIterator first,InputIterator last)2. 拷贝构造函数3. 析构函数4. 赋值运算符重载函数三、迭代器1. 普通对象的正向迭代器2. const对象的正向…

多线程

标题创建多线程方式一&#xff1a;继承线程中常用方法和优先级多窗口卖票创建多线程方式二&#xff1a;实现Runnable接口多窗口卖票&#xff08;使用Runable方式&#xff09;进程的生命周期同步代码块解决实现Runable的线程安全问题方法一方法二使用同步方法处理实现Runable的线…

结构体熟练掌握--实现通讯录

魔王的介绍&#xff1a;&#x1f636;‍&#x1f32b;️一名双非本科大一小白。魔王的目标&#xff1a;&#x1f92f;努力赶上周围卷王的脚步。魔王的主页&#xff1a;&#x1f525;&#x1f525;&#x1f525;大魔王.&#x1f525;&#x1f525;&#x1f525; ❤️‍&#x1…

帮助中心在线制作工具推荐这4款,很不错哟!

根据用户咨询问题是否解决的情景&#xff0c;分为三个部分&#xff0c;首先帮助中心恰好有用户需要咨询的问题&#xff0c;用户可以通过点击相关问题即可解决自己的问题&#xff0c;其次&#xff0c;用户第一眼没有在帮助中心解决问题&#xff0c;有个搜索框&#xff0c;用户的…

为什么开发人员应该在 2023 年学习 Docker 和 Kubernetes

开发者你好&#xff0c;如果你想在 2023 年学习新的工具和技术&#xff0c;那么你应该考虑学习 Docker 和 Kubernetes&#xff0c;这是在这个微服务和云计算时代创建和管理容器的两个最重要的工具。随着微服务和云计算的兴起&#xff0c;Docker 和 Kubernetes 已经成为软件开发…

gg又来深圳

我们都喜欢的DGGgg是我在TCL的朋友&#xff0c;刚毕业的我们在TCL度过了一段非常欢快的时光&#xff0c;gg也是我们几十人中在TCL呆的特别久的&#xff0c;先是在深圳&#xff0c;然后转去了惠州&#xff0c;后面在惠州买房、结婚、定居、生娃。前几年举家回了西安、也从TCL离职…