目录

1. Ansible 简介

1.1 Ansible 的核心概念

1.2 Ansible 的架构

2. Ansible 环境部署

2.1 安装 Ansible

2.2 配置库存文件(Inventory)

2.3被控节点Ansible管理环境配置

3,Ansible 的使用方法


1. Ansible 简介

1.1 Ansible 的核心概念

  • 无代理架构(Agentless):
    Ansible 不需要在被管理节点上安装额外的软件,只需通过 SSH(或 Windows 的 WinRM)进行连接。这大大降低了系统维护的复杂度和资源占用。

  • 基于声明式语言的 Playbook:
    Ansible 使用 YAML 格式编写 Playbook,描述你希望系统达到的最终状态。Playbook 简洁明了,易于维护和版本控制。

  • 模块化设计与幂等性:
    每个任务调用独立的模块,模块设计时追求幂等性,即多次执行不会导致系统状态异常。这保证了系统在连续多次执行 Playbook 时保持稳定。

1.2 Ansible 的架构

Ansible 主要由以下几个部分构成:

  • 控制节点(Control Node):
    安装 Ansible 的机器,你可以在该节点上编写 Playbook、管理库存(Inventory)以及执行命令。

  • 库存(Inventory):
    列出所有被管理节点(例如服务器、虚拟机、云实例等)的列表文件,可以采用静态或动态方式生成。默认位置为 /etc/ansible/hosts

  • 被管理节点(Managed Nodes):
    通过 SSH/WinRM 进行远程连接的主机,Ansible 在执行任务时会在这些节点上临时传输并执行模块代码。

2. Ansible 环境部署

下面介绍在控制节点上部署 Ansible 环境的基本步骤。

2.1 安装 Ansible

控制节点一般运行 Linux 或 macOS,确保已安装 Python(推荐使用 Python 3)。常见安装方式有通过 pip 安装:

## 被控节点pubserver主机安装ansible软件
[root@server ~]# yum -y install ansible      #安装Ansible软件
[root@server ~]# ansible --version           #确认ansible命令可用

配置主机名解析

## 配置hosts文件,确保控制节点通过主机名访问到被控节点
[root@server ~]# vim /etc/hosts                      #编辑hosts文件配置主机名解析
192.168.88.240  server
192.168.88.101  web1
192.168.88.102  web2
#测试hosts文件配置
[root@pubserver ~]# for i in pubserver web1 web2 db1    
 do
 ping -c 2 $i
 done

配置免密登录被控节点

## 配置控制节点免密登录被控节点
[root@server ~]# ssh-keygen -t rsa -f /root/.ssh/id_rsa -N ''    #非交互生成秘钥对
#发送公钥到被控节点
[root@pubserver ~]# for i in web1 web2 db1              
 do
 ssh-copy-id root@$i
 done
 
#确认免密登录,结果显示web1,web2
[root@server ~]# for i in web1 web2              
 do 
 ssh root@$i "hostname"
 done

2.2 配置库存文件(Inventory)

Ansible 通过库存文件管理目标主机。你可以编辑 /etc/ansible/hosts 文件或在项目目录中自定义库存文件。示例内容如下:

# 示例库存文件内容
[webservers]
192.168.1.10
192.168.1.11

[databases]
db1.example.com
db2.example.com

 2.3被控节点Ansible管理环境配置

  • 配置目标

    • 使用同一套Ansible软件管理多个环境,如开发环境、测试环境、生产环境
    • 多用户使用同一个控制节点管理不同主机
    • 每个用户有属于自己的配置环境(工作目录)
  • Ansible配置文件查找顺序

    • 首先检测ANSIBLE_CONFIG变量定义的配置文件
    • 其次检查当前目录下的./ansible.cfg文件
    • 再次检查当前用户家目录下的~/ansible.cfg文件
    • 最后检查/etc/ansible/ansible.cfg文件
# 1. 查看默认的 Ansible 配置文件(通常不直接修改此文件)
[root@server ~]# cat /etc/ansible/ansible.cfg
# 此命令会显示系统默认的 Ansible 配置内容

# 2. 初始化并查看所有可配置条目
[root@server ~]# ansible-config init
# 根据提示查看配置条目,了解 Ansible 的所有默认配置项

# 3. 创建自定义的 Ansible 工作目录
[root@server ~]# mkdir ansible       # 创建名为 ansible 的工作目录(名称可自定义)
[root@server ~]# cd ansible/         # 进入该工作目录,后续的所有操作均在此目录下进行

# 4. 配置 Ansible 工具:编辑自定义的 ansible.cfg 配置文件
[root@server ansible]# vim ansible.cfg
# 在编辑器中输入以下内容:
#
# [defaults]                  # 默认通用配置节
# inventory = inventory       # 指定库存文件路径(本目录下的 inventory 文件)
# host_key_checking = false   # 禁用 SSH 主机密钥检查,避免首次连接时的提示

# 5. 编辑库存文件,定义主机组和主机列表
[root@server ansible]# vim inventory
# 示例库存文件内容:
#
# [webservers]        # 定义一个名为 webservers 的主机组
# web[1:2]            # 使用范围表达式,表示主机名为 web1 和 web2
#
# [cluster:children]  # 定义组 cluster,使用 :children 表示其包含下级子组
# webservers          # 将 webservers 作为 cluster 的子组

# 6. 确认配置结果
# 确保以下命令在自定义工作目录中执行

# 查看所有被控主机列表
[root@pubserver ansible]# ansible all --list-hosts
# 输出示例:
#   hosts (3):
#     web1
#     web2

# 查看 webservers 组的主机列表
[root@pubserver ansible]# ansible webservers --list-hosts
# 输出示例:
#   hosts (2):
#     web1
#     web2

3,Ansible 的使用方法

编写 Playbook:
用户根据需要定义 YAML 格式的 Playbook 文件,Playbook 中定义一个或多个 Play(剧本),每个 Play 通过 hosts 指定目标主机,并列出任务列表(tasks),每个任务调用对应的模块及其参数。例如:

---
- name: 检查目标主机连通性 - 重复执行 ping 模块指定次数
  hosts: all
  tasks:
    - name: 测试连接(执行 3 次 ping)
      ping:
      loop: "{{ range(1, 4) | list }}"
      loop_control:
        label: "Ping 第 {{ item }} 次"

使用 ansible-playbook 命令来运行 Playbook,例如:
ansible-playbook -i inventory_file playbook.yml

总结来说,Ansible 以其简单、无代理和模块化的特性,使得 IT 自动化变得更加轻松高效。无论是通过编写 Playbook 进行批量部署,还是使用 Ad Hoc 命令进行快速操作,都能满足日常运维和大规模环境管理的需求。希望这些内容对你撰写关于 Ansible 的博客有所帮助!

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐