Linux 下Ansible使用详解
Ansible 是一个开源的自动化运维工具,它基于 Python 开发,通过 SSH 协议对远程主机进行管理和配置。以下是在 Linux 下使用 Ansible 的详细介绍:
1. 安装 Ansible
不同的 Linux 发行版安装 Ansible 的方式有所不同,以下为常见发行版的安装方法:
Ubuntu/Debian
sudo apt update
sudo apt install ansible
CentOS/RHEL
sudo yum install epel-release
sudo yum install ansible
2. 配置 Ansible
主机清单
Ansible 通过主机清单(Inventory)来管理要操作的远程主机。默认的主机清单文件是
/etc/ansible/hosts,你也可以创建自己的清单文件。以下是一个简单的主机清单示例:# 定义一个主机组
[web_servers]
192.168.1.100
192.168.1.101
# 定义另一个主机组
[db_servers]
192.168.1.102
你可以将上述内容保存为一个文件,例如
my_inventory,并在执行 Ansible 命令时使用 -i 选项指定该清单文件。SSH 密钥认证
为了方便 Ansible 远程连接主机,建议使用 SSH 密钥认证。你可以在本地生成 SSH 密钥对,并将公钥复制到远程主机上:
# 生成 SSH 密钥对
ssh-keygen
# 将公钥复制到远程主机
ssh-copy-id user@192.168.1.100
3. Ansible 基本命令
查看主机连通性
使用
ansible 命令可以对远程主机执行简单的操作,例如检查主机的连通性:ansible all -i my_inventory -m ping
all表示对清单中的所有主机执行操作。-i my_inventory指定使用my_inventory作为主机清单。-m ping指定使用ping模块来检查主机的连通性。
执行命令
可以使用
ansible 命令在远程主机上执行任意命令:ansible web_servers -i my_inventory -a "ls -l"
web_servers表示对web_servers主机组中的主机执行操作。-a "ls -l"指定要在远程主机上执行的命令。
4. Ansible 模块
Ansible 提供了丰富的模块,用于完成各种不同的任务。以下是一些常用模块的使用示例:
yum 模块(用于 CentOS/RHEL 系统)
安装
httpd 服务:ansible web_servers -i my_inventory -m yum -a "name=httpd state=present"
name=httpd指定要安装的软件包名称。state=present表示确保软件包已安装。
apt 模块(用于 Ubuntu/Debian 系统)
安装
nginx 服务:ansible web_servers -i my_inventory -m apt -a "name=nginx state=present"
service 模块
启动
httpd 服务并设置为开机自启:ansible web_servers -i my_inventory -m service -a "name=httpd state=started enabled=yes"
name=httpd指定要操作的服务名称。state=started表示启动服务。enabled=yes表示设置服务为开机自启。
5. Ansible Playbook
Ansible Playbook 是一种用于自动化配置管理和部署的脚本文件,使用 YAML 格式编写。以下是一个简单的 Playbook 示例,用于在
web_servers 主机组上安装并启动 httpd 服务:---
- name: Install and start httpd service
hosts: web_servers
become: true # 使用 root 权限执行任务
tasks:
- name: Install httpd
yum:
name: httpd
state: present
- name: Start httpd service
service:
name: httpd
state: started
enabled: yes
将上述内容保存为
httpd_install.yml,然后使用以下命令执行 Playbook:ansible-playbook -i my_inventory httpd_install.yml
6. Ansible 变量和模板
变量
在 Playbook 中可以使用变量来提高脚本的灵活性。例如,在 Playbook 中定义变量:
---
- name: Install and start service
hosts: web_servers
become: true
vars:
service_name: httpd
tasks:
- name: Install service
yum:
name: "{{ service_name }}"
state: present
- name: Start service
service:
name: "{{ service_name }}"
state: started
enabled: yes
模板
Ansible 支持使用 Jinja2 模板来生成配置文件。例如,创建一个
httpd.conf.j2 模板文件:ServerName {{ ansible_fqdn }}
在 Playbook 中使用模板生成配置文件:
---
- name: Configure httpd
hosts: web_servers
become: true
tasks:
- name: Generate httpd.conf
template:
src: httpd.conf.j2
dest: /etc/httpd/conf/httpd.conf
notify:
- Restart httpd
handlers:
- name: Restart httpd
service:
name: httpd
state: restarted
7. Ansible 角色
Ansible 角色用于组织和复用 Playbook 中的任务。可以将相关的任务、变量、模板等组织成一个角色。例如,创建一个名为
httpd 的角色:roles/
└── httpd/
├── tasks/
│ └── main.yml
├── handlers/
│ └── main.yml
├── templates/
│ └── httpd.conf.j2
└── vars/
└── main.yml
在 Playbook 中使用角色:
---
- name: Configure httpd using role
hosts: web_servers
become: true
roles:
- httpd
通过以上步骤,你可以在 Linux 下使用 Ansible 完成自动化运维任务,提高工作效率。
浙公网安备 33010602011771号