Ansible自动化工具

devtools/2024/10/18 15:38:38/

一、Ansible概述

1.1 什么是Ansible

Ansible 是一个开源的自动化工具,用于配置管理、应用程序部署和任务自动化。它让你可以通过编写简单的 YAML 文件(剧本,Playbooks),轻松管理和配置多个服务器。Ansible 的特点是无代理架构,它通过 SSH 连接到远程主机,不需要在目标服务器上安装任何软件。

除了 Ansible,常用的 IT 自动化和配置管理工具还有很多,如Chef、Puppet、SaltStack

1.2 Ansible 的特性

  • 批量管理与部署   Ansible 能够轻松管理数以千计的主机。管理员不再需要逐一登录每个主机执行操作,而只需在控制节点上执行命令,Ansible 会自动将这些命令应用于所有目标主机。这极大提高了运维效率,尤其在处理大规模基础设施时。

  • 模块化架构
    Ansible 采用基于模块的工作机制。Ansible 本身并不执行任务,而是通过调用各种模块来完成具体操作。例如:

    每个模块都是功能独立的,可以针对不同的任务进行调用,使得 Ansible 的功能非常强大和灵活。

    • copy 模块用于将文件从控制节点复制到远程主机。
    • service 模块用于管理服务的启动、停止和重启。
  • 无代理特性(Agentless)Ansible 的一大亮点是其无代理的架构。用户只需在控制节点上安装 Ansible,而不需要在被管理的每个主机上安装任何额外的服务或代理。Ansible 通过 SSH 连接到远程主机,执行命令并返回结果。这使得 Ansible 的部署和使用变得异常简单。

  • 幂等性(Idempotence)Ansible 的许多模块具有幂等性,这意味着多次执行同一操作不会改变系统的最终状态。例如,如果一个服务已经在运行,执行启动服务的命令不会产生任何副作用。这使得 Ansible 在自动化管理时更加安全可靠。

1.3 Ansible 的工作流程

  • 解析 Playbook:Ansible 首先解析 Playbook 文件,读取其中的 hosts、tasks、variables 等信息。
  • 选择目标主机:根据 Inventory 文件选择符合条件的目标主机。
  • 建立 SSH 连接:通过 SSH 与目标主机建立连接,使用提供的用户凭证(如密钥或密码)
  • 执行任务:Ansible 按照 Playbook 中的顺序执行任务,每个任务会在目标主机上执行相应的模块(如 apt、yum、copy 等)。
  • 处理结果:每个任务执行完后,Ansible 会收集返回的结果并进行处理,包括成功、失败或改变的状态。

1.4 Ansible 特点

  • 简单部署
    Ansible 的部署过程非常简单,只需在控制节点上安装 Ansible,远程主机无需做任何操作。

  • 基于 SSH 的管理
    默认情况下,Ansible 使用 SSH 协议连接和管理远程设备,这种方式安全可靠。

  • 集中化管理
    Ansible 提供主从架构,用户可以集中管理多个节点,降低了运维复杂性。

  • 功能强大与扩展性
    Ansible 的配置简单,同时功能强大,支持用户自定义模块和插件,能够满足各种复杂的自动化需求。

  • 通过 API 和自定义模块扩展
    用户可以通过 API 和 Python 自定义模块轻松扩展 Ansible 的功能,以适应特定的业务需求。

  • 使用 Playbooks
    Playbooks 允许用户定制复杂的配置和状态管理,支持更灵活的自动化方案。

  • 支持云计算和大数据环境
    Ansible 对云计算平台(如 AWS、Azure 等)和大数据框架(如 Hadoop、Spark 等)有很好的支持,能够有效管理云基础设施。

二、Ansible 

在进行 Ansible 的使用之前,我们需要在管理端安装 Ansible。假设我们的管理端 IP 为 192.168.10.23,被管理端 IP 分别为 192.168.10.14192.168.10.15

2.1 管理端安装 Ansible

首先,安装 EPEL(Extra Packages for Enterprise Linux)源,然后安装 Ansible:

# 安装 EPEL 源
yum install -y epel-release# 安装 Ansible
yum install -y ansible

2.2 Ansible 目录结构

安装完成后,Ansible 的主要目录结构如下:

2.3  配置主机清单

/etc/ansible 目录中配置主机清单 hosts,定义需要管理的主机:

cd /etc/ansible
vim hosts# 配置组名和被管理主机
[webservers]
192.168.10.14[dbservers]
192.168.10.15

2.4 配置密钥对验证

为了实现免密登录,我们需要生成 SSH 密钥对并将公钥复制到被管理的主机上:

# 生成 SSH 密钥对
ssh-keygen -t rsa  # 一路回车# 将公钥复制到被管理主机
sshpass -p 'your_password' ssh-copy-id root@192.168.10.14
sshpass -p 'your_password' ssh-copy-id root@192.168.10.15

三、Ansible 命令行模块

Ansible 的命令行格式如下:

ansible <组名> -m <模块> -a <参数列表>
1. 使用 ansible-doc

可以使用 ansible-doc 命令列出所有已安装的模块:

ansible-doc -l  # 列出所有模块
2. command 模块

command 模块用于在远程主机执行命令,不支持管道和重定向等 shell 特性。

# 查看 command 模块的描述
ansible-doc -s command# 在指定 IP 执行命令
ansible 192.168.10.14 -m command -a 'date'
ansible webservers -m command -a 'date'

常用参数:
  • chdir:在远程主机上运行命令前切换到指定目录。
  • creates:判断指定文件是否存在,如果存在,则不执行后续操作。
  • removes:判断指定文件是否存在,如果存在,则执行后续操作。
ansible all -m command -a "chdir=/home ls ./"

3. shell 模块

shell 模块用于在远程主机执行命令,支持管道等 shell 特性。

# 查看 shell 模块的描述
ansible-doc -s shell# 使用 shell 模块执行命令
ansible dbservers -m shell -a 'echo 123456 | passwd --stdin test'
ansible dbservers -m shell -a 'echo $(ifconfig ens33 | awk "NR==2 {print $2}")'

4. cron 模块

cron 模块用于在远程主机定义任务计划。

# 查看 cron 模块的描述
ansible-doc -s cron# 添加计划任务
ansible webservers -m cron -a 'minute="*/1" job="/bin/echo helloworld" name="jqg crontab"'# 列出计划任务
ansible webservers -a 'crontab -l'# 移除计划任务
ansible webservers -m cron -a 'name="jqg crontab" state=absent'


http://www.ppmy.cn/devtools/126759.html

相关文章

鸿蒙ArkTS实用开发技巧: 提高效率的关键知识点

ArkTS作为鸿蒙系统的核心开发语言,为开发者提供了强大的工具来创建跨设备、高性能的应用。本文将重点介绍一些实用的ArkTS开发技巧和知识点,帮助开发者提高开发效率和应用质量。 1. 高效的状态管理 ArkTS提供了多种状态装饰器,用于不同场景的状态管理: Entry Component struc…

C#中Task.ContinueWith如何使用

Task.ContinueWith 方法是 Task 类的一个成员&#xff0c;它允许你为一个任务添加一个延续操作。这个延续操作会在任务完成时执行&#xff0c;无论是成功完成、发生异常还是被取消。你可以使用这个方法来执行一些清理工作&#xff0c;或者基于前一个任务的结果来启动另一个任务…

STM32—PWR电源控制

1.PWR简介 PWR&#xff08;Power Control&#xff09;电源控制PWR负责管理STM32内部的电源供电部分&#xff0c;可以实现可编程电压监测器和低功耗模式的功能可编程电压监测器&#xff08;PVD&#xff09;可以监控VDD电源电压&#xff0c;当VDD下降到PVD阀值以下或上升到PVD阀…

路由器原理

路由器原理 路由器&#xff1a;能够将数据转发到正确的目标&#xff0c;而在这一转发过程中选中最佳路径 路由器原理&#xff1a;根据IP地址转发 路由表&#xff1a;记录的转发的路径 路由表生成: 手动配置路由器自己学习 路由器基础命令&#xff1a; 含义指令查看路由表di…

spark统一内存模型 详解

Apache Spark 是一个用于大规模数据处理的分布式计算框架&#xff0c;它支持多种处理模型&#xff08;如批处理、流处理、SQL、机器学习等&#xff09;。为了高效地在分布式环境中处理这些多样化的工作负载&#xff0c;Spark 在 2.x 版本后引入了统一内存管理模型&#xff0c;以…

运动骨传导耳机怎么选?分享五款优质骨传导耳机!

运动时聆听高亢激昂的音乐&#xff0c;能让人倍感动力满满。然而&#xff0c;如今的普通蓝牙耳机已难以胜任多样化的运动场景&#xff0c;因此&#xff0c;运动型耳机逐渐成为了众多运动爱好者的新宠。但在纷繁复杂的耳机市场中&#xff0c;如何选择一款合适的运动耳机&#xf…

el-table修改指定列字体颜色 ,覆盖划过行的高亮显示文字颜色

修改指定列字体颜色 ,覆盖划过行的高亮显示文字颜色 代码如下&#xff1a; <div class"c1"><el-table:data"tableData"striperow-class-name"custom-table-row"style"width:100%"cell-mouse-enter"lightFn"cell-…

harmonyOS next之实现时间打卡定时器

需求&#xff1a;实现一个时间打卡签到按钮。 实现方法&#xff1a;每隔一秒钟获取一下当前时间。 实现代码如下&#xff1a; Column(){Text(this.curTime).fontColor(#FFFFFF).fontWeight(600).fontSize(32vp)Text(上班打卡).fontColor(#FFFFFF) } .width(170vp) .height(170…