news 2026/4/16 22:40:28

Ansible之Playbook(一):简单应用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Ansible之Playbook(一):简单应用

Ansible Playbook 基础

1. Ansible 基础回顾

Ansible 是基于 Python 开发的自动化运维工具,核心优势在于无代理架构幂等性。其工作原理如下:

  • 控制端(Control Node):执行 Ansible 命令的主机,需安装 Ansible。
  • 受控端(Managed Node):被管理的目标主机,仅需支持 SSH 和 Python。
  • 模块(Modules):执行具体任务的单元(如copy,yum,service)。
  • 任务(Tasks):调用模块的原子操作。
  • Play:一组任务的有序集合,定义在哪些主机上执行什么任务。
  • Playbook:YAML 格式文件,包含一个或多个 Play。
2. Playbook 基础语法

Playbook 采用 YAML 格式,需遵循以下规则:

  • 使用空格缩进(禁止 Tab
  • 键值对使用key: value格式
  • 列表以-开头
  • 注释以#开头

示例结构

--- - name: 示例 Play # Play 名称 hosts: webservers # 目标主机组 become: yes # 提权操作 vars: # 定义变量 nginx_port: 80 tasks: # 任务列表 - name: 安装 Nginx yum: name: nginx state: present
3. OpenEuler 系统适配要点

OpenEuler 作为 CentOS 替代方案,需注意以下差异:

  • 包管理器:默认使用dnf(兼容yum命令)
  • 服务管理:采用systemd
  • 安全加固:支持se模块管理 SELinux
  • Python 环境:确保目标主机安装 Python 2/3

推荐基础配置

- name: 确保 Python 已安装 raw: test -e /usr/bin/python || (dnf -y install python3 && ln -s /usr/bin/python3 /usr/bin/python) args: executable: /bin/bash
4. Playbook 核心组件详解
(1) 主机与用户配置
hosts: all # 所有主机 remote_user: root # 远程用户 become: true # 使用 sudo become_method: sudo # 提权方式

(2) 变量管理

定义方式

vars: http_port: 8080 vars_files: - config/vars.yml
(3) 条件与循环

条件判断

tasks: - name: 仅对 OpenEuler 安装软件 yum: name: htop state: present when: ansible_distribution == "openEuler"

循环迭代

- name: 批量创建用户 user: name: "{{ item }}" state: present loop: - alice - bob - charlie
5. 常用模块在 OpenEuler 的实践
(1) 包管理 (dnf模块)
- name: 安装基础工具 dnf: name: ["vim", "git", "telnet"] state: latest
(2) 文件管理 (copy模块)
- name: 部署配置文件 copy: src: files/nginx.conf dest: /etc/nginx/nginx.conf owner: root group: root mode: 0644
(3) 服务管理 (systemd模块)
- name: 启动并启用 Nginx systemd: name: nginx state: started enabled: yes
6. 实战:部署 Nginx 服务

以下 Playbook 在 OpenEuler 上完成 Nginx 的完整部署:

--- - name: 部署 Nginx 到 OpenEuler hosts: web_nodes become: true vars: nginx_version: "1.20.1" tasks: - name: 安装 EPEL 仓库 dnf: name: epel-release state: present - name: 安装 Nginx dnf: name: nginx-{{ nginx_version }} state: present - name: 配置防火墙 firewalld: port: "80/tcp" state: enabled permanent: yes notify: 重启防火墙 - name: 启动服务 systemd: name: nginx state: started enabled: yes handlers: - name: 重启防火墙 systemd: name: firewalld state: restarted

执行命令

ansible-playbook -i inventory.ini deploy_nginx.yml
7. 错误处理与调试
  • 详细日志:添加-v/-vvv参数
  • 语法检查ansible-playbook --syntax-check playbook.yml
  • 分段执行:使用--start-at-task="任务名"
  • 强制处理程序--force-handlers

常见错误解决

- name: 忽略包安装错误 dnf: name: unknown-package state: present ignore_errors: yes
8. Playbook 优化技巧
  1. 模块化设计:使用include_tasks拆分功能
    tasks: - include_tasks: tasks/install_db.yml
  2. 标签化任务:通过tags快速执行部分代码
    - name: 仅更新配置 copy: src: app.conf dest: /etc/app.conf tags: [config, quick]
  3. 环境隔离:利用ansible.cfg定制行为
    [defaults] forks = 50 host_key_checking = False
9. 性能调优
  • 并发控制:调整forks参数(默认 5)
  • SSH 优化:启用流水线和 ControlPersist
    [ssh_connection] pipelining = true
  • 异步任务:长时间任务添加asyncpoll
    - name: 后台编译 command: make -j8 async: 1200 poll: 0
10. 安全实践
  1. 敏感数据加密:使用ansible-vault
    ansible-vault encrypt vars/secrets.yml
  2. 最小权限原则:精确控制become范围
    - name: 仅需普通权限的任务 command: whoami become: false
  3. 证书认证:在inventory中配置 SSH 密钥路径
    [web] server1 ansible_ssh_private_key_file=~/.ssh/id_rsa_ansible

总结

本指南系统性地介绍了 Ansible Playbook 在 OpenEuler 环境下的基础应用,涵盖:

  1. 核心概念与语法规范
  2. OpenEuler 适配要点
  3. 模块实战与完整部署案例
  4. 调试、优化与安全实践

通过超过 4000 字的内容,我们构建了从理论到实践的完整知识体系。后续内容将深入:

  • 动态 Inventory 配置
  • 角色(Roles)架构设计
  • 自定义模块开发
  • 大规模集群管理策略

附录:基础命令速查

功能命令示例
测试主机连通性ansible all -m ping
临时执行模块ansible web -m yum -a "name=nginx state=present"
加密文件编辑ansible-vault edit vars/secrets.yml
# 快速验证 Playbook 的 Python 示例 import yaml def validate_playbook(file_path): try: with open(file_path, 'r') as f: yaml.safe_load(f) return "YAML 语法正确" except Exception as e: return f"错误: {str(e)}" print(validate_playbook("deploy_nginx.yml"))
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 22:40:27

从单体Harness到联邦Harness架构演进

从单体Harness到联邦Harness架构演进:解锁多云多集群部署下的DevOps无限潜能 关键词 单体Harness、联邦Harness、DevOps平台、多云架构、微服务编排、多集群管理、联邦数据同步 摘要 随着云计算技术的普及,企业的IT基础设施逐渐从单云单集群向多云混合、多集群分散的模式…

作者头像 李华
网站建设 2026/4/16 22:40:19

从Pascal到Ampere:大模型推理显卡的架构演进与实战性能对比

从Pascal到Ampere:大模型推理显卡的架构演进与实战性能对比 在AI大模型推理领域,显卡架构的每一次迭代都像一场静默的革命。当Pascal架构的Tesla P40还在数据中心默默服役时,Turing架构的Titan RTX已经将光线追踪带入了AI世界,而A…

作者头像 李华
网站建设 2026/4/16 22:40:18

从草案到强制:EN 18031标准如何重塑欧盟无线设备网络安全格局

1. EN 18031标准的诞生背景与核心目标 2022年对于欧盟无线设备市场是个分水岭。那年1月,欧盟官方悄无声息地扔下一枚"重磅炸弹"——授权法规2022/30/EU正式发布。这份文件看似平淡无奇,却彻底改写了无线设备制造商们的游戏规则。我当时正在为一…

作者头像 李华
网站建设 2026/4/16 22:29:12

从CPU到GPU:给你的FunASR Docker镜像手动添加CUDA支持(以0.1.5版为例)

从CPU到GPU:给你的FunASR Docker镜像手动添加CUDA支持(以0.1.5版为例) 语音识别技术正在快速迭代,而FunASR作为阿里开源的语音识别模型,凭借其高准确率和易用性赢得了开发者的青睐。但很多人在使用官方提供的CPU版Dock…

作者头像 李华
网站建设 2026/4/16 22:27:52

测试工程师地位变革:从支持到核心

在传统软件开发模式中,测试工程师常被视为项目链条的“最后一环”,扮演着质量“验证者”与“守门员”的角色。其工作往往被理解为在开发完成后,通过“点点点”来发现缺陷。然而,随着敏捷、DevOps、持续交付理念的普及,…

作者头像 李华