跳到主要内容

CentOS Ansible 配置

介绍

Ansible 是一款强大的自动化工具,广泛用于配置管理、应用部署和任务自动化。它使用简单的 YAML 语法来描述任务,并通过 SSH 与目标主机通信,无需在目标主机上安装额外的代理程序。本文将指导你在 CentOS 系统上配置和使用 Ansible,帮助你快速上手自动化运维。

安装 Ansible

在 CentOS 上安装 Ansible 非常简单。首先,确保你的系统已经更新到最新版本:

bash
sudo yum update -y

接下来,安装 epel-release 仓库,因为 Ansible 位于 EPEL 仓库中:

bash
sudo yum install epel-release -y

然后,安装 Ansible:

bash
sudo yum install ansible -y

安装完成后,可以通过以下命令验证 Ansible 是否安装成功:

bash
ansible --version

输出应类似于:

ansible 2.9.27
config file = /etc/ansible/ansible.cfg
configured module search path = ['/home/user/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
...

配置 Ansible

Ansible 的配置文件位于 /etc/ansible/ansible.cfg。你可以根据需要修改此文件,但通常默认配置已经足够满足大多数需求。

配置 Inventory 文件

Inventory 文件用于定义 Ansible 管理的主机。默认的 Inventory 文件位于 /etc/ansible/hosts。你可以编辑此文件,添加你需要管理的主机。

例如,添加一个名为 webservers 的主机组:

ini
[webservers]
192.168.1.10
192.168.1.11

你还可以为主机指定变量:

ini
[webservers]
192.168.1.10 ansible_user=root ansible_password=your_password
192.168.1.11 ansible_user=root ansible_password=your_password
警告

在生产环境中,建议使用 SSH 密钥认证而不是明文密码。

使用 Ansible

执行 Ad-Hoc 命令

Ansible 允许你通过命令行直接执行任务,这些任务称为 Ad-Hoc 命令。例如,你可以使用以下命令在所有 webservers 主机上执行 ping 操作:

bash
ansible webservers -m ping

输出应类似于:

192.168.1.10 | SUCCESS => {
"changed": false,
"ping": "pong"
}
192.168.1.11 | SUCCESS => {
"changed": false,
"ping": "pong"
}

编写 Playbook

Playbook 是 Ansible 的核心,它使用 YAML 格式描述任务。以下是一个简单的 Playbook 示例,用于在所有 webservers 主机上安装 Apache:

yaml
---
- hosts: webservers
become: yes
tasks:
- name: Ensure Apache is installed
yum:
name: httpd
state: present

- name: Ensure Apache is running
service:
name: httpd
state: started
enabled: yes

将此 Playbook 保存为 install_apache.yml,然后使用以下命令执行:

bash
ansible-playbook install_apache.yml

输出应显示每个任务的执行结果。

实际案例

假设你需要在一个新的 CentOS 服务器上部署一个简单的 Web 应用。你可以使用 Ansible 来自动化以下步骤:

  1. 安装必要的软件包(如 Apache、PHP)。
  2. 配置 Apache 虚拟主机。
  3. 部署 Web 应用代码。

以下是一个示例 Playbook:

yaml
---
- hosts: webservers
become: yes
tasks:
- name: Install Apache and PHP
yum:
name:
- httpd
- php
state: present

- name: Configure Apache virtual host
template:
src: /path/to/vhost.conf.j2
dest: /etc/httpd/conf.d/vhost.conf
notify: Restart Apache

- name: Deploy web application
copy:
src: /path/to/webapp/
dest: /var/www/html/
owner: apache
group: apache
mode: '0755'

handlers:
- name: Restart Apache
service:
name: httpd
state: restarted

通过这个 Playbook,你可以轻松地在多台服务器上部署相同的 Web 应用。

总结

通过本文,你已经学习了如何在 CentOS 上安装和配置 Ansible,并使用它来执行 Ad-Hoc 命令和编写 Playbook。Ansible 的强大之处在于它的简单性和灵活性,能够帮助你轻松实现自动化运维。

附加资源

练习

  1. 编写一个 Playbook,用于在 CentOS 服务器上安装和配置 Nginx。
  2. 使用 Ansible 管理一组服务器,确保所有服务器上的时间同步(提示:使用 ntp 模块)。
  3. 探索 Ansible 的 roles 功能,并尝试将上述 Playbook 转换为一个可重用的角色。

通过不断练习,你将更加熟练地掌握 Ansible,并能够应对更复杂的自动化任务。