Ansible 入门指南:从安装到实际应用
Ansible 是一个开源的自动化工具,用于配置管理、应用程序部署和任务自动化。它无需在被管理节点上安装任何软件,只需要 SSH 访问权限。本文将介绍如何在本地环境安装 Ansible 并进行基本的配置管理。
一、安装 Ansible
Ansible 可以在各种操作系统上安装,以下是一些常见平台的安装步骤:
1. 在 CentOS 或 RHEL 上安装 Ansible
sudo yum install -y epel-release
sudo yum install -y ansible
2. 在 Ubuntu 上安装 Ansible
sudo apt update
sudo apt install -y ansible
3. 使用 pip 安装 Ansible(适用于所有平台)
sudo apt update # 或 sudo yum update
sudo apt install -y python3-pip # 或 sudo yum install -y python3-pip
pip3 install ansible
安装完成后,可以通过以下命令验证 Ansible 是否安装成功:
ansible --version
二、配置 Ansible
Ansible 使用 inventory
文件来定义和管理主机列表,使用 playbook
文件来定义任务。
1. 创建 Ansible Inventory 文件
Ansible 的 inventory
文件定义了要管理的主机,可以通过 /etc/ansible/hosts
文件配置,也可以自定义一个文件。
创建一个名为 hosts
的文件,内容如下:
[webservers]
web1.example.com
web2.example.com
[dbservers]
db1.example.com
db2.example.com
2. 配置 SSH 免密登录
确保可以通过 SSH 免密登录到被管理的主机。以下是配置步骤:
ssh-keygen # 生成 SSH 密钥对
ssh-copy-id user@web1.example.com # 将公钥复制到目标主机
对所有目标主机重复上述步骤。
三、编写并运行 Ansible Playbook
Ansible playbook
文件使用 YAML 语法定义任务。以下是一个简单的示例,用于安装 Nginx:
1. 创建 Ansible Playbook 文件
创建一个名为 nginx_playbook.yml
的文件,内容如下:
---
- hosts: webservers
become: yes
tasks:
- name: Ensure Nginx is installed
apt:
name: nginx
state: present
when: ansible_os_family == "Debian"
- name: Ensure Nginx is installed
yum:
name: nginx
state: present
when: ansible_os_family == "RedHat"
- name: Ensure Nginx is started
service:
name: nginx
state: started
2. 运行 Ansible Playbook
ansible-playbook -i hosts nginx_playbook.yml
这个命令将连接到 hosts
文件中定义的所有 webservers
主机,安装并启动 Nginx。
四、常用 Ansible 模块
Ansible 提供了许多模块用于执行各种任务。以下是一些常用模块:
-
ping:用于测试主机的连通性。
ansible -i hosts all -m ping
-
command:在远程主机上执行命令。
ansible -i hosts all -m command -a "uptime"
-
copy:将文件复制到远程主机。
- name: Copy a file copy: src: /local/path/to/file dest: /remote/path/to/file
-
service:管理服务的状态。
- name: Start a service service: name: nginx state: started
-
package:管理软件包的状态。
- name: Install a package package: name: nginx state: present
五、Ansible 高级功能
-
Handlers:用于处理状态变化后触发的操作。
- name: Install Nginx apt: name: nginx state: present notify: Restart Nginx handlers: - name: Restart Nginx service: name: nginx state: restarted
-
Variables:用于定义可重用的值。
- hosts: webservers vars: nginx_package: nginx tasks: - name: Install Nginx apt: name: "{{ nginx_package }}" state: present
-
Templates:用于动态生成配置文件。
创建一个名为
nginx.conf.j2
的模板文件:server { listen 80; server_name {{ ansible_fqdn }}; root /var/www/html; index index.html index.htm; }
在 playbook 中使用模板:
- name: Deploy Nginx configuration template: src: nginx.conf.j2 dest: /etc/nginx/nginx.conf notify: Restart Nginx
总结
Ansible 是一个功能强大的自动化工具,通过简单的配置和易于理解的 YAML 语法,使配置管理、应用部署和任务自动化变得非常简单。通过本指南的入门介绍,希望你能够快速上手 Ansible 并开始管理你的服务器。