Ansible自动化工具

一、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 <参数列表>

使用 ansible-doc

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

ansible-doc -l  # 列出所有模块

3.1 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.2 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}")'

3.3 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'

3.4 user模块 (用户管理)

常用参数:

  • name: 用户名,必选
  • state: 创建或删除账号 (present 创建,absent 删除)
  • system: 是否为系统账号 (yes|no)
  • uid: 用户ID
  • group: 用户基本组
  • shell: 默认使用的shell
  • move_home: 移动现有的家目录 (yes|no)
  • password: 用户密码(建议加密)
  • comment: 用户注释信息
  • remove: 删除账号时是否删除家目录 (yes|no)
ansible dbservers -m user -a 'name="test01"'   # 创建用户test01
ansible dbservers -m user -a 'name="test01" state=absent'   # 删除用户test01

3.5 group模块 (用户组管理)

常用参数:

  • name: 组名
  • gid: 组ID
  • system: 是否为系统组 (yes|no)
ansible dbservers -m group -a 'name=kgc gid=1111 system=yes'   # 创建kgc组
ansible dbservers -m user -a 'name=jqg uid=1111 system=yes group=kgc'   # 将jqg用户添加到kgc组

3.6 copy模块

文件复制

常用参数:

  • dest: 目标路径(绝对路径)
  • src: 源文件路径
  • mode: 文件权限
  • owner: 文件属主
  • group: 文件属组
  • content: 复制的内容(不能与src一起使用)
ansible dbservers -m copy -a 'src=/home/cs.txt dest=/home/cs.txt owner=root mode=640'
ansible dbservers -m copy -a 'content="helloworld" dest=/home/hello.txt'

3.7 file模块 (文件属性设置)

常用参数:

  • path: 文件路径
  • owner: 文件属主
  • group: 文件属组
  • mode: 文件权限
  • state: 文件状态 (present/absent/link)
ansible dbservers -m file -a 'owner=jqg group=kgc mode=644 path=/home/hello.txt'   # 修改文件权限
ansible dbservers -m file -a 'path=/home/hello.link src=/home/hello.txt state=link'   # 创建链接文件
ansible dbservers -m file -a "path=/home/abc.txt state=touch"   #创建文件
ansible dbservers -m file -a "path=/home/abc.txt state=absent"   #删除文件

3.8 hostname 模块

用于管理远程主机上的主机名

ansible dbservers -m hostname -a "name=host-jqg"   #设置主机名

3.9 ping模块

用于检测远程主机的连通性

ansible all -m ping    #测试连通性

3.10 yum模块

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

ansible webservers -m yum -a 'name=tree'   #安装软件包
ansible webservers -m yum -a 'name=tree state=absent'   #卸载软件包

3.11 service/systemd 模块

用于管理远程主机上的服务运行状态

  • name: 被管理的服务名称
  • state: 服务的状态,started(启动)、stopped(停止)、restarted(重启)
  • enabled: 是否设置为开机自启,yesno
  • runlevel: 如果设定了 enabled,则定义在哪些运行目标下自启动(例如:runlevel=5
ansible webservers -a 'systemctl status nginx'   #查看服务状态
ansible webservers -m service -a 'enabled=true name=nginx state=started'   #启动服务并设置开机自启

3.12 script 模块

用于在远程主机上执行本地脚本

使用步骤:

  • 创建名为 test.sh 的 shell 脚本
#!/bin/bash
echo "hello ansible from script" > /home/script.txt
  • 赋予脚本执行权限
chmod +x test.sh
  • 使用 ansible 命令运行脚本,针对 webservers 主机组。
ansible webservers -m script -a 'test.sh'
  • 检查远程主机上的输出文件
ansible webservers -a 'cat /home/script.txt'

3.13 setup 模块

用于收集远程主机的事实信息(系统详细信息)

使用步骤:

  • webservers 组的所有主机收集事实。
ansible webservers -m setup
  • 使用 filter 选项获取 dbservers 组中主机的 IPv4 地址
ansible dbservers -m setup -a 'filter=*ipv4'

四、Ansible Inventory 主机清单

在日常的运维管理中,Ansible 是一个非常强大的自动化运维工具,能简化大量的配置管理、部署和维护工作。而在 Ansible 中,Inventory(主机清单)是其核心组成部分之一,负责管理主机及其变量。本文将带你深入了解 Ansible 的 Inventory 文件如何使用,如何通过分组和变量来管理主机。

4.1 Ansible Inventory 的基本概念

Ansible 的 Inventory 是一个包含你要管理的主机和相关配置信息的文件。它允许你将主机分成不同的组,并为每个主机和组定义特定的属性和变量。

4.1.1 主机分组

在 Inventory 中,你可以将主机分组,使得同一组的主机可以共享相同的配置。这样就能对不同的主机集群进行精细化管理。

例如,以下配置定义了两个主机组:

[webservers]
192.168.192.70:2222       # 这里指定了连接端口
192.168.192.[5:7]0[dbservers]
db-[a:f].host    # 匹配主机名为 db-a.host 到 db-f.host

4.1.2 使用主机列表

当你有多个相似的主机时,可以使用列表的方式来简化配置。

[webservers]
192.168.192.[5:7]0

上面的例子表示 192.168.10.12192.168.10.15 的四台主机都属于 webservers 组。

4.2 定义 Inventory 变量

在 Ansible 中,除了对主机进行分组外,你还可以为主机或者主机组定义变量,这些变量可以控制远程连接的各种参数(如 IP、端口、用户、密码等)。

4.2.1 主机变量

可以为每台主机指定连接的相关信息。

[webservers]
192.168.192.60 ansible_port=22 ansible_user=root ansible_password=123456

配置表示主机 192.168.192.60 使用 root 用户和 123456 密码通过 SSH 的 22 端口连接。

4.2.2 组变量

还可以为整个组中的所有主机定义统一的变量。

[webservers:vars]
ansible_user=root
ansible_password=123456

这样配置后,webservers 组中的所有主机都会使用相同的用户名和密码

4.2.3 全局变量

为所有主机定义一些通用的变量,可以使用 [all:vars],这会为所有主机默认使用 22 端口。

[all:vars]
ansible_port=22

4.3组嵌套

在实际应用中,可能需要通过子组来组织主机。比如,有 nginx 组和 apache 组,然后将这两个组放在一个大的组 webs 下面。

[nginx]
192.168.192.50
192.168.192.60
192.168.192.70[apache]
192.168.192.[8:9]0[webs:children]   # webs 组包含了 nginx 组和 apache 组的所有主机
nginx
apache

在这个配置中,webs 组是 nginxapache 两个组的父组,表示 webs 组下的所有主机即是这两个子组的所有主机。

总结

  • 主机分组:将主机分为不同的组,方便管理。
  • 主机与组变量:为不同的主机和主机组定义连接信息和其他配置变量。
  • 组嵌套:通过 children 关键词将多个子组放在一个父组下,实现更细致的分组管理。
  • 变量的应用:可以为所有主机定义全局变量,也可以为单个主机或主机组指定特定变量。

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

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

相关文章

第十七周:机器学习笔记

第十七周周报 摘要Abstratc一、机器学习——生成式对抗网络&#xff08;Generative Adversarial Networks | GAN&#xff09;——&#xff08;中&#xff09;1. GAN 的理论介绍2. 用JS散度训练存在的问题3. WGAN 算法4. 拓展——流体 总结 摘要 本周周报主要对GAN进行了详细的…

学习笔记——交换——STP(生成树)工作原理

三、工作原理 STP的基本原理是在一个有二层环路的网络中&#xff0c;交换机通过运行STP&#xff0c;自动生成一个没有环路的网络拓扑。这个无环网络拓扑也叫做STP树(STP Tree)&#xff0c;树节点为某些交换机&#xff0c;树枝为某些链路。当网络拓扑发生变化时&#xff0c;STP…

js简单基础笔记

一 . js特点 1. Js是一门解释型语言&#xff0c;不用编译&#xff0c;而是直接执行 2. js是一门动态语言&#xff0c;其中的任何内容都是不确定的 3. 语法结构和Java&#xff0c;c都很像 4. ​ js是一门面向对象的语言 5.js严格区分大小写 二 . js使用 1…

TiDB 新版本:更稳、更快、更好的数据库体验

作者&#xff1a; TiDB社区小助手 原文来源&#xff1a; https://tidb.net/blog/2d33d7db 本文内容出自&#xff1a;PingCAP 高级顾问 蓝功儒老师 在 9 月 21 日 TiDB 新版本 Meetup 中&#xff0c;PingCAP 高级顾问蓝功儒老师为我们带来了关于 TiDB 新版本的深入分享。TiD…

基于LORA的一主多从监测系统_数据发送

数据上传我这里使用了问询的方式&#xff0c;这样的好处一是可以用来统计节点的存活状态&#xff0c;二是可以避免冲突&#xff0c;主节点通过向从节点发送问询帧&#xff0c;从节点收到问询帧后开始向主节点发送数据&#xff0c;同时我们也可以加入不同的帧类型&#xff0c;比…

4.three.js网格模型介绍和绘制基础点、线、面

4.three.js网格模型介绍和绘制基础点、线、面 1、计算机中3D世界的组成 在计算机世界里&#xff0c;3D世界是由点组成&#xff0c;两个点能够组成一条直线&#xff0c;三个不在一条直线上的点就能够组成一个三角形面&#xff0c;无数三角形面就能够组成各种形状的物体&#x…

Linux基础项目开发day05:量产工具——页面系统

文章目录 一、数据结构抽象page_manager.h 二、页面管理器page_manager.c 三、单元测试1、main.page.c2、page_test.c3、Makefile修改3.1、unittest中的Makefile3.2、page中的Makefile 四、上机实验 前言 前面实现了显示、输入、文字、UI系统&#xff0c;现在我们就来实现页面的…

Axure树形菜单展开与折叠

亲爱的小伙伴&#xff0c;在您浏览之前&#xff0c;烦请关注一下&#xff0c;在此深表感谢&#xff01; 课程主题&#xff1a;Axure树形菜单展开与折叠 主要内容&#xff1a;树形菜单制作——层级关系——隐藏与显示——值的变化——多层交互 应用场景&#xff1a;关系树、菜…

Python学习的自我理解和想法(15)

学的是b站的课程&#xff08;千锋教育&#xff09;&#xff0c;跟老师写程序&#xff0c;不是自创的代码&#xff01; 今天是学Python的第15天&#xff0c;从今天开始&#xff0c;每天一到两个常用模块&#xff0c;更完恢复到原来的&#xff0c;开学了&#xff0c;时间不多&am…

Java 直接获取 pom.xml 配置的属性值

Java 直接获取 pom.xml 配置的属性值 1.需求描述2.代码示例3.结果演示 系统&#xff1a;Win10 JDK&#xff1a;1.8.0_351 IDEA&#xff1a;2022.3.3 1.需求描述 在开发一个 SpringBoot 项目的时候&#xff0c;需要从 pom.xml 中获取配置的 artifactId&#xff0c;name&#xf…

vscode配置ssh远程连接服务器

注意&#xff1a;重启软件或重启电脑&#xff0c;解决很多问题 一. vscode配置ssh vscode通过ssh连接服务器&#xff08;吐血总结&#xff09;_vscode ssh-CSDN博客 二. VScode无法远程连接主机问题 VSCode远程连接服务器报错&#xff1a;Could not establish connection to…

HCIP-HarmonyOS Application Developer 习题(十六)

&#xff08;判断&#xff09;1、HiLink通过分布式软总线的方式连接所有设备&#xff0c;强能力设备可对弱能力设备进行设备虚拟化&#xff0c;将弱设备当做本机设备直接调用。 答案&#xff1a;错误 分析&#xff1a;HiLink 主要针对的是应用开发者与第三方设备开发者&#xf…

力扣 中等 143.重排链表

文章目录 题目介绍题解 题目介绍 题解 class Solution {public void reorderList(ListNode head) {ListNode mid middleNode(head);ListNode head2 reverseList(mid);while (head2.next ! null) {ListNode nxt head.next;ListNode nxt2 head2.next;head.next head2;head2.…

Linux-正则表达式

正则表达式 定义DRE模式-纯文本/特殊字符 定义DRE模式-锚字符/点号字符 定义DRE模式-字符组/排除型字符组 定义DRE模式-区间 定义DRE模式-特殊字符组 定义DRE模式-星号 扩展正则表达式-问号 扩展正则表达式-加号 扩展正则表达式-使用花括号 扩展正则表达式-管道符号/表达式分组…

如何通过CDN优化网站服务器访问速度?

CDN&#xff0c;即内容分发网络&#xff08;Content Delivery Network&#xff09;&#xff0c;在现代互联网中起着重要作用。它可以显著提升网站服务器的访问速度。以下是CDN在加速网站访问方面的主要优势及其工作原理。 1. 全球分布的服务器节点 CDN通过在全球范围内布设多个…

【Router】路由器中NAT、NAPT、NPT是什么?

参考链接 NAT vs. NAPT: What’s the Difference? IPv6 Network Prefix Translation (NPt) | pfSense Documentation (netgate.com) 趣谈NAT/NAPT的原理&#xff0c;这篇不可不读&#xff01; - 知乎 (zhihu.com) NAT (Network Address Translation) NAT说明 NAT&#x…

成都睿明智科技有限公司电商服务可靠不?

在这个短视频风起云涌的时代&#xff0c;抖音不仅成为了人们娱乐消遣的首选平台&#xff0c;更是众多商家竞相追逐的电商新蓝海。成都睿明智科技有限公司&#xff0c;作为抖音电商服务领域的佼佼者&#xff0c;正以其独到的洞察力和专业的服务&#xff0c;助力无数品牌在这片沃…

微信小程序:miniprogram-ci自动打包工具使用介绍以及支持配置环境变量、jekins打包、taro、uni-app三方工具

微信小程序&#xff1a;miniprogram-ci自动打包工具使用介绍以及支持配置环境变量、jekins打包、taro、uni-app三方工具 背景介绍 一直都是本地电脑运行微信开发者工具打包上传。多项目中新老版本对node版本要求不一致&#xff0c;老是切来切去。而且同一个人开发上传需要打包…

pandas-使用技巧

pandas-使用技巧 简单技巧 仅个人笔记使用&#xff0c;感谢点赞关注 简单技巧 pd.to_dict()&#xff1a;Dataframe格式数据转字典数据pd.dropna()&#xff1a;去nan值& | ~&#xff1a;pd逻辑运算符pd.isnan()&#xff1a;判断是否为nan值pd.concat&#xff1a;多个pd拼接…

李宏毅机器学习2022-HW7-BERT-Question Answering

文章目录 TaskBaselineMediumStrongBoss Code Link Task HW7的任务是通过BERT完成Question Answering。 数据预处理流程梳理 数据解压后包含3个json文件&#xff1a;hw7_train.json, hw7_dev.json, hw7_test.json。 DRCD: 台達閱讀理解資料集 Delta Reading Comprehension …