Ansible快速入门指南

news2025/5/25 15:26:54

Ansible 是一款基于 Python 开发的开源自动化运维工具,主要用于实现服务器配置管理、应用部署、任务自动化执行等功能。它通过 简单的 YAML 脚本(Playbook) 定义任务,结合 SSH 协议 对远程主机进行管理,无需在被控节点安装额外代理程序,具有轻量、易上手、模块化等特点。

  • 优势:
    • 无代理架构,远程主机无需安装代理,只需在控制主机上部署;
    • YAML 语法简洁,易读易维护;
    • 社区活跃,模块丰富(支持云计算、容器化等新兴技术)。

一、Ansible 核心概念与组件

  1. Modules(模块)
    • 是 Ansible 的执行单元,封装了具体操作(如文件管理、系统配置、服务控制等)。
    • 分为内置模块(如 shellcopyyum)和自定义模块,通过 SSH 推送至被管理节点执行。
    • 如:selinux 模块用于配置 SELinux 模式,copy 模块用于文件拷贝。

常用模块:

模块名称功能描述示例代码
command执行 shell 命令(不支持 $ 符号)ansible all -m command -a “date”
shell执行 shell 命令(支持脚本)ansible all -m shell -a “sh /script.sh”
copy复制文件到远程主机copy: src=/local/file dest=/remote/file
yum/apt软件包管理yum: name=nginx state=latest
service管理系统服务service: name=nginx state=restarted
  1. Inventory(主机清单)
    • 定义被管理主机的分组、IP/域名、连接参数(如端口、用户、密码)。
    • 默认路径:/etc/ansible/hosts,支持分组嵌套和变量继承。
    • 格式示例
#可以按照范围指定主机,一组相似的hostname []是匹配
[webservers]
www[01:50].example.com   # 批量定义主机
[dbservers]
db-[a:f].example.com     # 范围匹配
  1. Playbook(剧本)
    • 自动化任务的脚本,以 YAML 格式定义任务流程,支持变量、条件判断和循环。
    • 示例
- hosts: webservers
  tasks:
  - name: 安装 Nginx
    yum: name=nginx state=present
  - name: 启动服务
    service: name=nginx state=started
  1. Roles(角色)
    • 用于组织和复用 Playbook,将任务按功能拆分为独立目录(如 nginx 角色包含安装、配置、启动任务)。
  • 目录结构:
role_name/
├── tasks/       # 主要任务
├── handlers/    # 事件处理器
├── templates/   # Jinja2 模板文件
├── files/       # 静态文件
├── vars/        # 变量
├── defaults/    # 默认变量
└── meta/        # 依赖和元数据
  • 在 Playbook 中引用角色
- hosts: webservers
  roles:
    - geerlingguy.nginx  # 直接引用 Galaxy 下载的角色

6. Plugins(插件)

  • 扩展 Ansible 核心功能,包括连接插件、缓存插件、lookup 插件等。

7. Variables(变量)
用于动态传递参数,支持在 Playbook、Inventory、命令行中定义。

vars:
  app_port: 8080

8.Facts(主机信息)
Ansible 自动收集的远程主机信息(如 IP 地址、操作系统版本等),可直接在 Playbook 中使用。

- debug:
    var: ansible_distribution  # 输出主机操作系统名称

二、Playbook的YAML 基础语法

  1. 列表(List)
    • - 开头,每个元素占一行:
fruits:
  - Apple
  - Orange
  1. 字典(Dictionary)
    • 键值对格式 key: value,支持缩进或紧凑格式:
user:
  name: John
  job: Developer
# 紧凑格式
{name: John, job: Developer}
  1. 变量引用
    • 使用 {{ var_name }} 引用变量,包含特殊符号时需用引号包裹:
message: "Hello, {{ username }}!"
  1. 注意事项
    • 文件以 --- 开头,缩进严格(空格而非制表符)。
    • 布尔值支持 yes/notrue/false(不区分大小写)。

三、安装与配置

  1. 安装(CentOS/RHEL)
yum -y install ansible
  1. 配置文件ansible.cfg
    • 常用配置:
[defaults]
inventory = /etc/ansible/hosts   # 主机清单路径
host_key_checking = False        # 禁用 SSH 密钥验证
remote_user = root               # 默认远程用户
  1. 主机清单配置

    vi /etc/ansible/hosts

    • 分组与变量:

这些变量可以给 /usr/bin/ansible-playbook 使用,但不能给 /usr/bin/ansible 使用。

[webservers]
host1 ansible_ssh_port=2222   # 可单独给某主机自定义端口、用户等信息

# 组变量定义方式
#通过对atlanta组指定vars变量,相应的host1和host2相当于相应的指定了ntp_server和proxy变量参数值
[atlanta]
host1
host2
[atlanta:vars]
ntp_server=ntp.atlanta.example.com
proxy=proxy.atlanta.example.com

可以把一个组作为另一个组的子成员:

[atlanta]  #定义atlanta
host1
host2

[raleigh]  #定义raleigh
host2
host3

[southeast:children]    #把atlanta、raleigh加入southeast组
atlanta
raleigh

四、常用模块与命令

  1. 基础命令
    • 测试连通性:ansible all -m ping
    • 执行 shell 命令:ansible webservers -m shell -a "df -h"
  2. 文件操作模块
  • 拷贝文件到远程主机(支持备份和权限设置):
ansible webservers -m copy -a "src=/local/file dest=/remote/path mode=0644"
  • 在远程主机执行本地脚本:
ansible webservers -m script -a "/local/script.sh"
  1. Playbook 执行
    • 运行剧本:ansible-playbook /path/to/playbook.yaml
    • 示例剧本
- hosts: webservers
  tasks:
  - name: 安装依赖
    yum: name=epel-release state=present
  - name: 部署代码
    copy: src=/code dest=/var/www/html

五、最佳实践

  1. 连接方式
    • 默认通过 SSH 连接,支持 ansible_connection=local(本地执行)。
    • 建议使用 SSH 密钥认证,避免明文密码。
  2. 变量作用域
    • 优先级:主机变量 > 组变量 > 默认变量。
    • 通过 ansible-playbook --extra-vars "var=value" 临时传参。
  3. 错误处理
    • 使用 register 捕获命令结果,结合 failed_when 判断任务失败条件:
- shell: /usr/local/nginx/sbin/nginx -t
  register: nginx_check
  failed_when: "'failed' in nginx_check.stderr"
  1. 权限管理
    • 使用 --sudobecome 提升权限:
ansible webservers -m yum -a "name=nginx state=present" --sudo
  1. 项目形式的目录结构设计
- /etc/ansible:
    inventory:
      - 项目1:
          - hosts        # 主机清单列表文件
          - ansible.cfg  # 环境配置变量文件
          - group_vars  # 组变量目录
          - host_vars   # 主机变量目录
          - *.yaml      # 项目1的 play-book文件
      - 项目2:
          - hosts        # 主机清单列表文件
          - ansible.cfg  # 环境配置变量文件
          - group_vars  # 组变量目录
          - host_vars   # 主机变量目录
          - *.yaml 			# 项目2的 play-book文件
  1. 为ansible启用ssh多路复用和流水线

在 Ansible 中启用 SSH 多路复用和流水线(pipelining)可以显著提升大量主机并行操作时的性能。这两项优化分别通过减少 SSH 连接开销和简化模块执行流程来加速任务执行。

A. SSH 多路复用(SSH Multiplexing)

SSH 多路复用允许 Ansible 在已建立的 SSH 连接上复用会话,避免为每个任务重新建立连接(开销约 200-500ms)

创建 SSH 配置文件(通常位于 ~/.ssh/config/etc/ssh/ssh_config):

Host *
    ControlMaster auto
    ControlPersist 600  # 连接保持 10 分钟
    ControlPath ~/.ssh/mux-%r@%h:%p
ControlMaster auto:自动创建主连接 
ControlPersist:控制连接的持续时间(秒)
ControlPath:套接字文件路径,需保证用户有读写权限

在 Ansible 配置中启用(ansible.cfg):

[ssh_connection]
ssh_args = -o ControlMaster=auto -o ControlPersist=600s

B. 流水线(Pipelining)

默认情况下,Ansible 执行模块时需先将模块文件复制到远程主机,再执行。
启用流水线后,模块直接通过 SSH 管道执行,减少文件传输开销。

在 ansible.cfg 中添加:

[ssh_connection]
pipelining = True

sudo 权限限制:若使用 become: true(sudo),需在目标主机的 /etc/sudoers 中添加:

Defaults !requiretty
Defaults visiblepw
  • 安全风险:流水线可能增加远程命令注入的风险,需确保 Playbook 安全性。

组合优化的完整配置示例:

# ansible.cfg
[defaults]
forks = 50  # 并行连接数
host_key_checking = False  # 关闭主机密钥检查(生产环境建议保留)

[ssh_connection]
ssh_args = -o ControlMaster=auto -o ControlPersist=600s -o ServerAliveInterval=30 -o ServerAliveCountMax=10
pipelining = True
control_path =  ~/.ansible/cp/%%h-%%p-%%r   # 复用连接的套接字文件存储位置

7. Ansible Galaxy

如果你需要将一个开源系统部署到你的主机上,很有可能有人已经实现了相应的Role.

Ansible Galaxy 是 Ansible 官方的 共享平台,用于发布和下载可重用的 角色(Roles) 和 集合(Collections)。

目录结构:

role_name/
├── tasks/       # 主要任务
├── handlers/    # 事件处理器
├── templates/   # Jinja2 模板文件
├── files/       # 静态文件
├── vars/        # 变量
├── defaults/    # 默认变量
└── meta/        # 依赖和元数据

你可以在Ansible Galaxy的网站(https://galaxy.ansible.com/)浏览所有Role

六、示例

  • 传统方式从远程下载文件
    使用 scp 命令(非 Ansible 模块):
scp -r root@192.168.1.10:/remote/dir /local/path
  • Ansible 替代方案
    通过 fetch 模块从远程拉取文件(Playbook 中使用):
- name: 拉取远程文件
  fetch:
    src: /remote/file.txt
    dest: /local/downloads/
    flat: yes  # 不保留远程目录结构

七、适用场景

  • 中小型企业服务器集群管理;
  • DevOps 流程自动化(CI/CD);
  • 多环境(开发、测试、生产)配置同步。

八、学习资源

  • 官方文档:Ansible Documentation
  • 入门教程:Ansible 官方入门指南
  • 实战案例:GitHub 上搜索ansible-playbook-example查看开源项目。
  • web 管理(Ansible AWX):是 Ansible Tower 的开源社区版本,由 Red Hat 赞助并贡献代码。它提供了与 Tower 类似的核心功能(如 Web UI、API、作业调度),但不包含企业级特性。
    • GitHub 仓库:ansible/awx
    • 适合个人或小型团队使用

通过 Ansible,运维人员可以大幅提升工作效率,开发人员也能更便捷地管理基础设施,实现 “基础设施即代码”(Infrastructure as Code, IaC)的理念。

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

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

相关文章

华为2025年校招笔试真题手撕教程(一)

一、题目 输入: 第一行为记录的版本迭代关系个数N,范围是[1,100000]; 第二行到第N1行:每行包含两个字符串,第一个字符串为当前版本,第二个字符串为前序版本,用空格隔开。字符串包含字符个数为…

第9.2讲、Tiny Decoder(带 Mask)详解与实战

自己搭建一个 Tiny Decoder(带 Mask),参考 Transformer Encoder 的结构,并添加 Masked Multi-Head Self-Attention,它是 Decoder 的核心特征之一。 1. 背景与动机 Transformer 架构已成为自然语言处理(NLP…

基于PCRLB的CMIMO雷达网络多目标跟踪资源调度

针对分布式组网CMIMO雷达多目标跟踪(MTT)场景,博客分析了一种目标-雷达匹配方案与功率联合优化算法。在采用分布式组网融合架构的基础上,推导包含波束和功率分配的后验克拉美罗界(PCRLB)。随后,将该效用函数结合CMIMO雷达系统资源&#xff0c…

AtCoder Beginner Contest 407(ABCDE)

A - Approximation 翻译&#xff1a; 给你一个正整数 A 和一个正奇数 B。 请输出与实数 的差最小的整数。 可以证明&#xff0c;在约束条件下&#xff0c;这样的整数是唯一的。 思路&#xff1a; 令。比较来判断答案。 实现&#xff1a; #include<bits/…

VILT模型阅读笔记

代码地址&#xff1a;VILT Abstract Vision-and-Language Pre-training (VLP) has improved performance on various joint vision-andlanguage downstream tasks. Current approaches to VLP heavily rely on image feature extraction processes, most of which involve re…

掌握 npm 核心操作:从安装到管理依赖的完整指南

图为开发者正在终端操作npm命令&#xff0c;图片来源&#xff1a;Unsplash 作为 Node.js 生态的基石&#xff0c;npm&#xff08;Node Package Manager&#xff09;是每位开发者必须精通的工具。每天有超过 1700 万个项目通过 npm 共享代码&#xff0c;其重要性不言而喻。本文…

OpenCV CUDA模块特征检测与描述------一种基于快速特征点检测和旋转不变的二进制描述符类cv::cuda::ORB

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::cuda::ORB 是 OpenCV 库中 CUDA 模块的一部分&#xff0c;它提供了一种基于快速特征点检测和旋转不变的二进制描述符的方法&#xff0c;用于…

Awesome ChatGPT Prompts:释放AI对话潜力的开源利器

项目概览 Awesome ChatGPT Prompts 是由土耳其开发者 Fatih Kadir Akın 发起的开源项目,托管于 GitHub,旨在通过精心设计的提示词模板(Prompts)优化用户与 ChatGPT 的交互体验。项目以 Markdown 和 CSV 格式管理模板,无需复杂编程语言,但需文本处理能力,目前已在 GitH…

PP-YOLOE-SOD学习笔记2

一、解析X-Anylabeling标注后的json格式问题 最近在使用自动标注工具后json格式转化过程中&#xff0c;即标注框的四点坐标转换为两点坐标时&#xff0c;发现json格式的四点顺序是按顺时针方向开始的&#xff0c;那么在转换其实就是删除2、4坐标或者1、3坐标即可。 二、数据集…

算法学习——从零实现循环神经网络

从零实现循环神经网络 一、任务背景二、数据读取与准备1. 词元化2. 构建词表 三、参数初始化与训练1. 参数初始化2. 模型训练 四、预测总结 一、任务背景 对于序列文本来说&#xff0c;如何通过输入的几个词来得到后面的词一直是大家关注的任务之一&#xff0c;即&#xff1a;…

win10使用nginx做简单负载均衡测试

一、首先安装Nginx&#xff1a; 官网链接&#xff1a;https://nginx.org/en/download.html 下载完成后&#xff0c;在本地文件中解压。 解压完成之后&#xff0c;打开conf --> nginx.config 文件 1、在 http 里面加入以下代码 upstream GY{#Nginx是如何实现负载均衡的&a…

2025电工杯数学建模B题思路数模AI提示词工程

我发布的智能体链接&#xff1a;数模AI扣子是新一代 AI 大模型智能体开发平台。整合了插件、长短期记忆、工作流、卡片等丰富能力&#xff0c;扣子能帮你低门槛、快速搭建个性化或具备商业价值的智能体&#xff0c;并发布到豆包、飞书等各个平台。https://www.coze.cn/search/n…

【日志软件】hoo wintail 的替代

hoo wintail 的替代 主要问题是日志大了以后会卡有时候日志覆盖后&#xff0c;改变了&#xff0c;更新了&#xff0c;hoo wintail可能无法识别需要重新打开。 有很多类似的日志监控软件可以替代。以下是一些推荐的选项&#xff1a; 免费软件 BareTail 轻量级的实时日志查看…

Ollama-OCR:基于Ollama多模态大模型的端到端文档解析和处理

基本介绍 Ollama-OCR是一个Python的OCR解析库&#xff0c;结合了Ollama的模型能力&#xff0c;可以直接处理 PDF 文件无需额外转换&#xff0c;轻松从扫描版或原生 PDF 文档中提取文本和数据。根据使用的视觉模型和自定义提示词&#xff0c;Ollama-OCR 可支持多种语言&#xf…

OpenCV CUDA 模块中图像过滤------创建一个拉普拉斯(Laplacian)滤波器函数createLaplacianFilter()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::cuda::createLaplacianFilter 是 OpenCV CUDA 模块中的一个函数&#xff0c;用于创建一个 拉普拉斯&#xff08;Laplacian&#xff09;滤波器…

图论学习笔记 3

自认为写了很多&#xff0c;后面会出 仙人掌、最小树形图 学习笔记。 多图警告。 众所周知王老师有一句话&#xff1a; ⼀篇⽂章不宜过⻓&#xff0c;不然之后再修改使⽤的时候&#xff0c;在其中找想找的东⻄就有点麻烦了。当然⽂章也不宜过多&#xff0c;不然想要的⽂章也不…

【将WPS设置为默认打开方式】--突然无法用WPS打开文件

1. 点击【开始】——【WPS Office】——【配置工具】&#xff1b; 2. 在出现的弹窗中&#xff0c;点击【高级】&#xff1b; 3. 在“兼容设置”中&#xff0c;将复选框勾上&#xff0c;点击【确定】。

电子人的分水岭-FPGA模电和数电

为什么模电这么难学&#xff1f;一文带你透彻理解模电 ——FPGA是“前期数电&#xff0c;后期模电”的典型代表 在电子工程的世界里&#xff0c;有两门基础课程让无数学生“闻之色变”&#xff1a;数字电路&#xff08;数电&#xff09; 和 模拟电路&#xff08;模电&#xff0…

(6)python爬虫--selenium

文章目录 前言一、初识selenium二、安装selenium2.1 查看chrome版本并禁止chrome自动更新2.1.1 查看chrome版本2.1.2 禁止chrome更新自动更新 2.2 安装对应版本的驱动程序2.3安装selenium包 三、selenium关于浏览器的使用3.1 创建浏览器、设置、打开3.2 打开/关闭网页及浏览器3…

Python之两个爬虫案例实战(澎湃新闻+网易每日简报):附源码+解释

目录 一、案例一&#xff1a;澎湃新闻时政爬取 &#xff08;1&#xff09;数据采集网站 &#xff08;2&#xff09;数据介绍 &#xff08;3&#xff09;数据采集方法 &#xff08;4&#xff09;数据采集过程 二、案例二&#xff1a;网易每日新闻简报爬取 &#xff08;1&#x…