当前位置: 首页 > news >正文

ansible使用教程

ansible使用教程

Ansible是一款强大的开源自动化运维工具,凭借其无代理(Agentless)架构和简洁的YAML语法,可以帮助我们高效地完成配置管理、应用部署、任务自动化等工作。下面我将带你从基础概念到实战,快速上手Ansible。

🎯 Ansible 核心概念

理解以下几个核心概念,能帮你更好地使用Ansible:

  • 控制节点:安装并运行Ansible的机器。
  • 受管节点:被Ansible管理的机器。
  • 主机清单:一个文件(通常是INI或YAML格式),里面定义了你的受管节点信息,还可以对主机进行分组。
  • 模块:Ansible执行任务的单元。每个模块都是一个独立的脚本,用于完成特定任务,如安装软件、管理服务、拷贝文件等。
  • Playbook:一个用YAML语言编写的文件,它描述了一系列自动化任务(“plays"和"tasks”)。Playbook是Ansible自动化能力的核心,允许你定义复杂的多机工作流。

为了让你对Ansible的核心工作流程有个直观的印象,可以参考下面的序列图,它展示了一个典型的Playbook任务执行过程:

🛠️ 安装与环境准备

1. 安装Ansible

在控制节点上(通常是你的本地机器或一台专门的服务器),根据你的操作系统,选择以下命令之一安装Ansible:

Ubuntu/Debian:

bash
sudo apt update
sudo apt install ansible -y

CentOS/Fedora:bash
sudo yum install ansible

使用pip安装(跨平台):

bash
pip install ansible

配置SSH免密登录
Ansible主要通过SSH协议与受管节点通信。为了让Ansible能无缝连接受管节点,建议设置SSH密钥认证。

在控制节点上生成SSH密钥对(如果还没有):

bash

ssh-keygen -t rsa -b 4096

将公钥拷贝到受管节点(将 username@remote_host 替换为你的实际用户名和主机名/IP):

bash
ssh-copy-id username@remote_host

📝 编写主机清单

主机清单文件告诉Ansible需要管理哪些服务器。

创建清单文件:你可以创建一个自定义的清单文件,例如 hosts.ini。

编辑清单内容:按以下示例格式添加主机和分组:

ini
[webservers]
web1 ansible_host=192.168.1.101
web2 ansible_host=192.168.1.102[databases]
db1 ansible_host=192.168.1.103
db2 ansible_host=192.168.1.104

方括号 [] 内的名称代表一个主机组,方便你按组操作主机。

🚀 运行你的第一个Ansible命令

安装好Ansible并配置好清单后,你可以先运行一个简单的Ad-Hoc命令来测试连通性。

使用 ping 模块检查所有受管节点的连通性:

bash
ansible all -i hosts.ini -m ping
  • all: 目标主机,这里代表清单中的所有主机。

  • -i hosts.ini: 指定使用的清单文件。

  • -m ping: 使用 ping 模块(Ansible的ping模块用于测试连接性和受管节点的Python环境是否正常)。

如果遇到SSH连接问题,可以暂时禁用主机密钥检查(注意这有安全风险,仅用于测试):

bash
export ANSIBLE_HOST_KEY_CHECKING=False

📜 编写你的第一个Playbook

Playbook是Ansible自动化的核心。我们来创建一个简单的Playbook,用于在 webservers 组的主机上安装并启动Nginx。

创建Playbook文件:创建一个名为 install_nginx.yml 的文件。

编辑内容:


yaml
- name: Install and start Nginxhosts: webservers  # 指定在哪个主机组上执行任务become: yes        # 表示以提升的权限(如sudo)运行任务tasks:             # 定义任务列表- name: Install Nginx packageapt:           # 使用apt模块(适用于Debian/Ubuntu)name: nginxstate: present- name: Start Nginx serviceservice:name: nginxstate: startedenabled: yes  # 设置服务开机自启

Playbook YAML语法要点:

  • 文件以 — 开始(可选的YAML文档开始标记)。

  • name: 用于描述Play或Task的目的,提高可读性。

  • hosts: 指定目标主机或主机组。

  • become: yes 表示需要提权执行。

  • tasks: 下面是具体任务列表。

  • 模块参数通常以 key=value 形式传递。缩进和对齐非常重要。

运行Playbook:

bash
ansible-playbook -i hosts.ini install_nginx.yml

🔧 常用模块与Playbook技巧

掌握以下模块和技巧,能让你的Playbook更强大和灵活。

常用模块示例:

package模块:通用包管理模块,可自动选择yum或apt。

yaml
- name: Ensure nginx is installed (using generic package module)package:name: nginxstate: present

copy模块:复制本地文件到远程主机。

yaml

- name: Copy a configuration filecopy:src: files/myapp.confdest: /etc/myapp.confowner: rootgroup: rootmode: '0644'

template模块:基于Jinja2模板动态生成文件,并复制到远程主机。可以结合变量使用。

yaml
- name: Configure Nginx using templatetemplate:src: templates/nginx.conf.j2dest: /etc/nginx/nginx.conf

file模块:管理文件和目录的属性,或创建目录。

yaml
- name: Ensure directory existsfile:path: /opt/myappstate: directorymode: '0755'

使用变量:
你可以在Playbook中定义变量,使其更灵活。

yaml
- name: Install Nginx with custom versionhosts: webserversbecome: yesvars:nginx_version: "1.21"  # 定义变量tasks:- name: Install Nginx packageapt:name: "nginx={{ nginx_version }}"state: present

使用条件判断:
你可以根据条件来决定是否执行某个任务。

yaml
- name: Install Nginx (conditionally)hosts: webserversbecome: yestasks:- name: Install Nginx on Debian familyapt:name: nginxstate: presentwhen: ansible_os_family == "Debian"  # 条件判断- name: Install Nginx on RedHat familyyum:name: nginxstate: presentwhen: ansible_os_family == "RedHat"

🗂️ 使用角色组织Playbook
当Playbook变得越来越复杂时,可以使用角色来组织任务、变量、文件、模板等,实现代码的复用和模块化。

创建角色结构:
使用 ansible-galaxy init 命令创建一个标准的角色目录结构。

bash
ansible-galaxy init nginx_role

这会创建一个名为 nginx_role 的目录,里面包含 tasks, vars, files, templates, handlers 等子目录。

在Playbook中使用角色:
创建好角色后,你可以在Playbook中通过 roles 关键字来使用它。

yaml
- name: Install and configure Nginx using rolehosts: webserversbecome: yesroles:- nginx_role

💎 实战示例:系统更新与重启

最后,我们来看一个稍微复杂一点的Playbook示例,它负责更新服务器所有包并安全重启。

yaml
- name: Upgrade all nodes and reboothosts: "{{ variable_hosts }}"  # 使用变量指定主机组,运行时通过 -e 传递become: yesserial: 1  # 每次只在一台主机上执行,确保服务高可用tasks:- name: Update and upgrade packagesapt:update_cache: yesupgrade: 'yes'- name: Reboot the machine (wait for it to come back)reboot:reboot_timeout: 300  # 重启后等待节点恢复在线的超时时间pre_reboot_delay: 60  # 执行重启任务前的等待时间- name: Wait for system to become reachablewait_for_connection:timeout: 300

运行此Playbook(假设你的清单文件中有一个名为 powerful 的主机组):

bash
ansible-playbook -i ./inventory.ini -e "variable_hosts=powerful" upgrade_and_reboot.yml

希望这份教程能帮助你顺利踏上Ansible自动化之旅!从简单的Ad-Hoc命令到复杂的Playbook,多练习是关键。

http://www.dtcms.com/a/597374.html

相关文章:

  • 图文设计公司起名长春seo公司长春网站设计
  • 搜索引擎seo如何优化怎样优化关键词到首页
  • 如何有效阅读Python开源项目的源代码?
  • 传输控制协议TCP
  • iOS开发系列--Swift语言
  • 《Spring Framework 核心原理与实践指南》
  • Java 开发 - 粘包处理器 - 基于分隔符实现
  • 高阅读量CSDN文章分析
  • Linux基本命令与工具(一)
  • 类似12306网站开发行唐县网站建设
  • 基于Django实现的智慧校园考试系统-自动组卷算法实现
  • Java垃圾收集器全解:从Serial到G1的进化之旅
  • 如何免费建造网站苏州有哪些做网站公司
  • 基于IMM交互式多模型卡尔曼滤波的目标位置和速度估计matlab仿真
  • 微信_网站提成方案点做南昌网站建设推广专家
  • Phoenix+Hbase和Doris两个方案如何选择,能不能拿Doris完全替代Phoenix+Hbase?有什么难点?
  • 免费网站大全下载全球速卖通卖家注册
  • 生物信息学 (101计划核心教程)Chapter4
  • 【疑难解答】@Value 注解不生效的原因
  • 【题解】【深基2.例2】英文字母
  • 关于建设殡葬网站的报告范文wordpress免费模板小而美
  • ssm项目,邮箱验证码
  • 多网卡同网段 IP 引发的 ARP Flux
  • 机器学习日报16
  • 11月份运维面试题
  • H100服务器维修“病历卡”:五大常见故障现象与根源分析
  • 9. Linux-riscv内存管理41-46问
  • 用mcu做灯光效果网站大连金州新区规划建设局网站
  • React 实战: Todo 应用学习小结
  • 网站性能优化方案网络设计及网络设计文档