Ansible 是一款由 Red Hat 主导开发的 开源自动化工具,专注于 配置管理、应用部署、任务编排和IT自动化。它基于 无代理(Agentless)架构,通过 SSH(默认)或 WinRM 协议与目标设备通信,无需在被控节点安装额外软件,因此部署和维护成本极低。

一、Ansible 的核心优势

1. 无代理架构(Agentless)
  • 被控节点(服务器、网络设备、云实例等)无需安装 Ansible 客户端,仅需支持 SSH(Linux/Unix)或 WinRM(Windows),极大降低了运维复杂度。
  • 控制节点(安装 Ansible 的主机)通过 SSH 远程执行命令或传输文件,适合大规模设备管理。
2. 基于 Python,简单易用
  • 配置文件采用 YAML 语法(人类可读的标记语言),Playbook(自动化脚本)结构清晰,学习成本低(例如:几行 YAML 即可完成服务部署)。
  • 支持 Python 自定义模块,扩展灵活,可适配各类特殊场景(如网络设备、存储系统的自动化)。
3. 幂等性(Idempotency)
  • 核心设计原则:多次执行同一 Playbook,结果一致(不会因重复执行导致错误)。例如,创建用户时若用户已存在,则自动跳过,避免重复操作。
4. 模块化与丰富的生态
  • 内置 数千个模块(Modules),覆盖系统管理(用户、服务、文件)、云服务(AWS、Azure、GCP)、网络设备(Cisco、Juniper、SONiC)、数据库(MySQL、PostgreSQL)等场景。
  • 支持 Roles(角色)和 Galaxy(社区共享平台),可复用他人编写的自动化代码(如通过 ansible-galaxy install 下载现成 Roles)。
5. 跨平台支持
  • 控制节点支持 Linux/macOS(Windows需通过 WSL 或 Linux 虚拟机),被控节点支持 Linux、Windows、网络设备(如交换机、路由器)、嵌入式系统等。

二、Ansible 的核心组件

1. 控制节点(Control Node)
  • 安装 Ansible 的主机(通常为 Linux 系统),负责运行 ansible 或 ansible-playbook 命令,解析 Playbook 并向被控节点发送指令。
2. 被控节点(Managed Nodes)
  • 被管理的设备(服务器、网络设备等),需开启 SSH(或 WinRM),并允许控制节点通过 SSH 密钥或密码登录。
3. Inventory(资产清单)
  • 定义被控节点的配置文件(默认路径 /etc/ansible/hosts),可按 分组(如 webserversdatabases)或 变量(如 IP、端口、登录用户)管理设备。
  • 支持静态文件(INI/YAML)或动态生成(通过脚本从 CMDB、云平台拉取设备列表)。
4. Playbook(剧本)
  • 核心自动化脚本,采用 YAML 格式,包含 Tasks(任务,如执行命令、复制文件)、Handlers(触发器,如服务重启)、Variables(变量)、Roles(角色引用)等。
  • 示例(部署 Nginx 服务的 Playbook):
- name: Deploy Nginxhosts: webservers  # 目标主机组(来自 Inventory)tasks:- name: Install Nginx packageapt: name=nginx state=present  # 使用 apt 模块安装 Nginx- name: Start Nginx serviceservice: name=nginx state=started enabled=yes  # 启动并设置开机自启
5. Modules(模块)
  • 执行具体操作的“工具函数”,Ansible 任务通过调用模块实现功能(如 apt 模块管理 Debian 包,copy 模块复制文件,sonic_config 模块配置 SONiC 交换机)。
  • 支持 命令模块command/shell 执行原生命令)和 功能模块(更安全、幂等,优先推荐)
6. Roles(角色)
  • 自动化代码的 模块化组织方式,将 Playbook、变量、模板、文件等按功能拆分(如 nginx 角色、database 角色),便于复用和维护。
  • 典型 Roles 目录结构:
roles/nginx/tasks/        # 主任务文件handlers/     # 触发器vars/         # 变量定义templates/    # Jinja2 模板(如 Nginx 配置模板)files/        # 静态文件(如证书)
7. Vault(加密工具)
  • 用于加密 Playbook 中的敏感信息(如密码、API 密钥),避免明文存储,提升安全性。

三、Ansible 的典型应用场景

1. 配置管理
  • 批量配置服务器(如统一时区、SSH 密钥、防火墙规则),确保环境一致性。
2. 应用部署
  • 自动化部署 Web 服务(Nginx、Tomcat)、微服务(Docker/K8s 容器)、数据库(MySQL 主从复制)等。
3. 任务编排
  • 按依赖关系执行复杂流程(如:先部署数据库 → 再部署后端 API → 最后部署前端,并在每个阶段验证服务可用性)。
4. 网络自动化
  • 管理网络设备(交换机、路由器)的配置(如 VLAN 创建、ACL 规则、OSPF 路由),代表框架如 Ansible Network Automation(支持 Cisco IOS、Juniper Junos、SONiC 等)。
5. 云资源管理
  • 通过模块创建/删除云资源(AWS EC2 实例、Azure 存储桶、GCP 虚拟机),实现“基础设施即代码(IaC)”。
6. 测试与运维
  • 自动化测试(如服务健康检查、日志收集)、故障恢复(如重启异常服务)、系统升级等。

四、SONiC 部署概述、测试平台搭建及测试情况

此 Ansible 脚本包含以下功能:

  • 部署 SONiC
  • 搭建 SONiC 测试环境
  • 运行 SONiC 测试

五、在系统上安装 Ansible

sudo apt-get install git gcc make python python-dev python-cffi libffi-dev libssl-dev sshpass libxml2 libxslt1-dev
sudo pip install setuptools ipaddr lxml netaddr
git clone https://github.com/ansible/ansible
cd ansible
git checkout v2.0.0.2-1 -b v2.0.0.2-1
git submodule update --init --recursive
make
sudo make install

这是源码安装,不推荐,

pip3 install ansible  # 自动安装所有依赖(包括 paramiko),无需手动处理

六、Ansible playbook布局

# Ansible top level file and directory structure
# adapted from http://docs.ansible.com/ansible/playbooks_best_practices.htmlprod                      # inventory file for production servers
pre_prod                  # inventory file for staging environment
lab                       # inventory file for test lab environmentgroup_vars/prod                   # here we assign variables to particular groupspre_prod               # groups can be environments, geographical, role basedlabhost_vars/hostname1              # if an individual system must have specific variables, put them herehostname2              # (use of host_vars should be avoided)library/                  # if any custom modules, put them here (optional)
filter_plugins/           # if any custom filter plugins, put them here (optional)deploy_sonic.yml          # playbook to initialize a SONiC switch after imaging process is completeroles/sonic_common/         # common "role" for the SONiC switch, only add tasks here that are for all SONiC switchestasks/            #main.yml      #  <-- tasks file can include smaller files if warrantedhandlers/         #main.yml      #  <-- handlers filetemplates/        #  <-- files for use with the template resourcentp.conf.j2   #  <------- templates end in .j2files/            #bar.txt       #  <-- files for use with the copy resourcefoo.sh        #  <-- script files for use with the script resourcevars/             #main.yml      #  <-- variables associated with this roledefaults/         #main.yml      #  <-- default lower priority variables for this rolemeta/             #main.yml      #  <-- role dependenciessonicv2/              # role for installing SONiC v2 components (syncd, orchagent, quagga, etc)sonic_test/           # same kind of structure as above, but for the integration test role,#        see http://github.com/sonic-net/sonic-integrationtestsonic_s6000/          # place Dell s6000 specific tasks heresonic_msn2700/        # place Mellanox msn2700 specific tasks here

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

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

相关文章

瑞芯微RK3568与君正X2600e平台Linux系统CS创世SD NAND应用全解析与驱动架构详解

前言 今天就瑞芯微平台和北京君正平台下的linux系统中关于CS创世 SD NAND的使用做一些经验的分享&#xff0c;如有不正&#xff0c;请批评指正&#xff1b; 采用的开发板是RK3568和x2600e&#xff0c;ubuntu版本是20.04&#xff0c;交叉编译工具链是aarch64-linux-gnu-和mips…

深入解析 Flink Function

RichFunctionFunction只是个标记接口public interface Function extends java.io.Serializable {}RichFunction 的核心语义是为用户定义的函数&#xff08;UDF&#xff09;提供生命周期管理和运行时上下文访问的能力。任何一个普通的 Flink Function 接口&#xff08;例如 MapF…

JMeter —— 压力测试

目录 常用的性能指标 一、吞吐量类指标 二、响应时间类指标 三、资源利用率指标 JMeter 一、JMeter 简介 二.下载安装JMeter&#xff1a; 三.如何使用JMeter&#xff1a; 压力测试考察当前软硬件环境下系统所能承受的最大负荷并帮助找出系统瓶颈所在。压测都是为了系统…

Transformer在哪⾥做了权重共享?

1、什么是权值共享权重共享是指在模型的不同层之间复⽤相同的参数。这可以减少模型的总体参数数量&#xff0c;并使得模型在训练时更容易学习。2、在Transformer中的应用常见的做法是共享词嵌入层&#xff08;embedding layer&#xff09;和输出层&#xff08;output layer&…

将 agents 连接到 Elasticsearch 使用模型上下文协议 - docker

我们在之前的文章 “将 agents 连接到 Elasticsearch 使用模型上下文协议” 及 “使用 MCP 将代理连接到 Elasticsearch 并对索引进行查询” 详述了如何使用 Elasticsearch MCP server 来和我们的 Elasticsearch 进行对话。细心的开发者可能已经注意到我们的 Elasticsearch MCP…

Shell 编程基础与实践要点梳理

目录 前言 一、认识 Shell 1.1 Shell 的定义与作用 1.2 Shell 解释器 二、Shell 脚本入门 2.1 编写 Shell 脚本 2.2 赋予执行权限与执行脚本 三、Shell 变量 3.1 变量定义与规则 3.2 变量使用与操作 3.3 变量类型 四、Shell 字符串 4.1 字符串定义方式 4.2 字符串…

Python自动化测试完整教程:pytest + selenium实战

目录 前言环境搭建pytest基础教程selenium基础教程pytest selenium实战项目页面对象模式(POM)测试报告生成持续集成配置最佳实践和进阶技巧总结 前言 自动化测试是现代软件开发中不可或缺的一环。Python作为一门简洁优雅的编程语言&#xff0c;配合pytest测试框架和seleniu…

APM 系列(一):Skywalking 与 Easyearch 集成

概述 SkyWalking 是一个开源的可观测性平台&#xff0c;用于收集、分析、聚合和可视化服务和云原生基础设施的数据。SkyWalking 提供了一种简单的方法&#xff0c;即使在云之间也能保持对分布式系统的清晰视图。它是一个现代的 APM&#xff0c;专门为云原生、基于容器的分布式…

使用 AD 帐户从 ASP.NET 8 容器登录 SQL Server 的 Kerberos Sidecar

我最近在做一个项目,需要将一个 ASP.NET 8 Web API 应用程序容器化,该应用程序需要与本地运行的 SQL Server 数据库进行通信。我们决定将 ASP.NET 8 容器定位到 Linux 系统,因此必须与运行在 Windows AD 域中的数据库进行通信。 问题 我们之前的设置是使用 IIS 在 Windows …

More Effective C++ 条款11:禁止异常流出析构函数之外

More Effective C 条款11&#xff1a;禁止异常流出析构函数之外核心思想 在C中&#xff0c;析构函数绝对不允许抛出异常。如果异常从析构函数中传播出去&#xff0c;可能会导致程序立即终止或未定义行为&#xff0c;特别是在栈展开过程中处理已有异常时。通过捕获并处理所有析构…

商超高峰客流统计误差↓75%!陌讯多模态融合算法在智慧零售的实战解析

原创声明&#xff1a;本文为原创技术解析&#xff0c;核心技术参数、架构设计及实战数据引用自 “陌讯技术白皮书”&#xff0c;技术方案与落地案例结合aishop.mosisson.com智慧零售数据联动场景展开&#xff0c;禁止未经授权的转载与商用。 一、行业痛点&#xff1a;智慧零售…

PyTorch实战(2)——使用PyTorch构建神经网络

PyTorch实战&#xff08;2&#xff09;——使用PyTorch构建神经网络0. 前言1. PyTorch 构建神经网络初体验1.1 使用 PyTorch 构建神经网络1.2 神经网络数据加载1.3 模型测试1.4 获取中间层的值2. 使用 Sequential 类构建神经网络3. PyTorch 模型的保存和加载3.1 模型保存所需组…

关于git的安装(windows)

1.git的介绍 Git 是一个分布式版本控制系统&#xff0c;由 Linus Torvalds 在 2005 年为 Linux 内核开发而创建。它能够高效地处理从小型到超大型项目的版本管理&#xff0c;具有以下特点&#xff1a; 分布式架构&#xff1a;每个开发者本地都有完整的仓库副本高效性能&#…

Java后端开发?接口封装器!

开发接口确实是Java后端开发中最核心、最可见的产出工作。“对入参校验、处理业务逻辑、返回格式处理”——精准地描述了一个API接口的核心处理流程。 但这只是冰山之上最直观的部分。一个专业、稳健、可扩展的后端系统&#xff0c;其复杂性和价值绝大部分隐藏在冰山之下。结合…

【沉浸式解决问题】NVIDIA 显示设置不可用。 您当前未使用连接到NVIDIA GPU 的显示器。

目录一、问题描述二、环境版本三、原因分析四、解决方案一、问题描述 在看一篇cuda安装的教程时&#xff0c;第一步是打开NVIDIA 控制面板&#xff0c;但是我打不开&#xff1a; NVIDIA 显示设置不可用。 您当前未使用连接到NVIDIA GPU 的显示器。 二、环境版本 设备&#xf…

牛客周赛 Round 106(小苯的方格覆盖/小苯的数字折叠/ 小苯的波浪加密器/小苯的数字变换/小苯的洞数组构造/ 小苯的数组计数)

A 小苯的方格覆盖思路&#xff1a;怎么摆第三行都是横放的2*1&#xff1b;故若n为奇数&#xff0c;总格子数3n为奇数&#xff0c;无法被2整除&#xff0c;直接排除。#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<iostream> #include<bits/stdc…

高并发内存池(16)-三层缓存的回收过程

高并发内存池&#xff08;16&#xff09;-三层缓存的回收过程 内存池的回收过程是内存管理系统的关键环节&#xff0c;它通过分层协作和智能合并机制&#xff0c;确保内存高效重复利用。以下是完整的回收流程解析&#xff1a;一、回收触发场景 ThreadCache回收&#xff1a;线程…

深入解析MyBatis Mapper接口工作原理

在Java持久层框架中&#xff0c;MyBatis以其灵活性和易用性赢得了广大开发者的青睐。作为MyBatis的核心概念之一&#xff0c;Mapper接口机制极大地简化了数据库操作代码的编写。本文将深入剖析MyBatis Mapper接口的工作原理&#xff0c;从基础概念到底层实现&#xff0c;帮助开…

疯狂星期四文案网第49天运营日记

网站运营第49天&#xff0c;点击观站&#xff1a; 疯狂星期四 crazy-thursday.com 全网最全的疯狂星期四文案网站 运营报告 今日访问量 常州苏州那些ip锲而不舍的扫了很多php的页面 今日搜索引擎收录情况 k页面比较严重了&#xff0c;哎。 我感觉不该做其他类型文案的 网…

从GPT-5发布来分析LLM大模型幻觉收敛(一)

GPT-5 号称在任何领域都有博士级别能力。在医疗健康领域&#xff0c;能够对专业的癌症诊断报告做通俗易懂的解读。对复杂的放射治疗方案决策&#xff0c;也能提供详细的分析报告&#xff0c;帮助病人权衡利弊。一位癌症患者的家属在发布会上表示&#xff0c;“ 真正鼓舞人心的是…