Ansible 服务教程
1. 什么是 Ansible? 🤖
Ansible 是一款开源的自动化管理工具,用于自动化配置管理、应用部署和任务执行。它使用简单的 YAML 配置文件进行管理,通过 SSH 无需安装代理,支持跨平台的管理。Ansible 主要通过 Playbook 来定义任务,使得自动化管理变得简单且高效。📊
特点 | 描述 |
---|---|
无代理架构 | 不需要在被管理的机器上安装代理,使用 SSH 进行管理。 |
简单易学 | 配置文件使用 YAML 格式,语法简洁明了。 |
高效且扩展性强 | 支持大规模的基础设施自动化管理。 |
丰富的模块支持 | 提供众多模块,可用于管理系统、网络、应用等。 |
2. 安装 Ansible 📥
2.1 在 Ubuntu 或 Debian 上安装 Ansible
在 Ubuntu 或 Debian 系统上,使用以下命令安装 Ansible:
sudo apt update
sudo apt install ansible
2.2 在 CentOS 或 RHEL 上安装 Ansible
在 CentOS 或 RHEL 系统上,可以使用 EPEL 仓库安装 Ansible:
sudo yum install epel-release
sudo yum install ansible
2.3 使用 Pip 安装(适用于所有平台)
你也可以通过 Python 的包管理工具 pip 安装 Ansible:
sudo apt install python3-pip # 安装 pip(如果未安装 )
pip3 install ansible
3. 配置 Ansible 🛠️
Ansible 的配置文件通常位于 /etc/ansible/ansible.cfg
。在该文件中,你可以配置默认的 SSH 用户、连接超时等设置。你也可以通过创建一个 inventory
文件来定义管理的主机。
3.1 配置 SSH 密钥(无密码登录)
Ansible 需要通过 SSH 无密码登录远程服务器。你可以使用 SSH 密钥对来设置无密码登录:
- 生成 SSH 密钥对:
ssh-keygen -t rsa -b 2048
- 将公钥复制到远程服务器:
ssh-copy-id user@remote_host
3.2 配置 inventory
文件
Ansible 使用 inventory
文件来管理被控制的主机。默认的 inventory
文件路径为 /etc/ansible/hosts
。你可以编辑该文件,添加你的主机信息:
sudo nano /etc/ansible/hosts
例如,添加一组主机:
[web_servers]
web1.example.com
web2.example.com
[db_servers]
db1.example.com
db2.example.com
4. 使用 Ansible 执行任务 ⚡
Ansible 使用命令行工具和 Playbook 来执行任务。下面是一些常用的操作:
4.1 使用 ansible
命令执行单个任务
你可以使用 ansible
命令直接在目标主机上执行一个单一的任务。例如,检查远程主机的系统信息:
ansible all -m setup
这里 -m
指定模块,setup
是 Ansible 提供的一个模块,用于收集主机的系统信息。
4.2 使用 Playbook 执行一组任务
Ansible Playbook 是一个包含一组任务的 YAML 文件,用来定义自动化的过程。以下是一个简单的 Playbook 示例,它会在一组 Web 服务器上安装 Nginx:
---
- name: Install and start Nginx on web servers
hosts: web_servers
become: yes
tasks:
- name: Install Nginx package
apt:
name: nginx
state: present
- name: Start Nginx service
service:
name: nginx
state: started
在 Playbook 中,hosts
定义了任务执行的目标主机,become: yes
表示以 sudo 权限执行任务,tasks
列出了要执行的任务。
4.3 执行 Playbook
执行 Playbook 的命令如下:
ansible-playbook playbook.yml
这将自动在 web_servers
列表中的所有服务器上安装并启动 Nginx。
5. Ansible 常用模块 🧩
Ansible 提供了丰富的模块来执行各种任务。以下是一些常用模块:
5.1 apt
模块
用于管理 Debian 和 Ubuntu 系统上的软件包。例如,安装一个包:
- name: Install nginx
apt:
name: nginx
state: present
5.2 yum
模块
用于管理 CentOS 和 RHEL 系统上的软件包。例如,安装一个包:
- name: Install nginx
yum:
name: nginx
state: present
5.3 copy
模块
用于将本地文件复制到远程服务器:
- name: Copy config file to remote server
copy:
src: /local/path/to/file.conf
dest: /remote/path/to/file.conf
5.4 service
模块
用于管理服务的状态,如启动、停止或重启服务:
- name: Ensure nginx is running
service:
name: nginx
state: started