Ansible-playbook 概述
Ansible 是一个开源的配置管理、应用部署和任务执行系统,它使用 SSH 协议与远程服务器进行通信,无需在远程主机上安装代理软件。ansible-playbook
是 Ansible 的核心组件之一,用于执行预定义的任务集合,即 Playbook。Playbook 以 YAML 格式编写,由一个或多个 plays 组成,每个 play 包含一系列 tasks,用于定义在目标主机上执行的操作。
Playbook 结构
一个基本的 Playbook 包含以下几个核心元素:
- hosts:指定目标主机或主机组。
- remote_user:指定以哪个用户身份执行任务。
- vars:定义变量。
- tasks:定义顺序执行的动作,每个 action 调用一个 Ansible module。
- handlers:定义在某些条件下触发的操作,通常用于服务重启等。
实战案例
案例1:在 web 服务器上部署 Apache
以下是一个简单的 Playbook 示例,用于在 web 服务器上部署 Apache 服务:
---
- hosts: webservers
remote_user: root
tasks:
- name: Install Apache
yum:
name: httpd
state: present
- name: Start Apache Service
service:
name: httpd
state: started
enabled: yes
- name: Configure Firewall for Apache
firewalld:
service: http
state: enabled
immediate: yes
permanent: yes
在这个案例中,我们定义了三个 tasks:安装 Apache、启动 Apache 服务以及配置防火墙允许 HTTP 流量。
案例2:安装并配置 NFS 服务
以下 Playbook 用于在一台服务器上安装并启动 NFS 服务,并在另一台服务器上配置 NFS 客户端挂载:
---
- name: Configure NFS Server
hosts: nfs_server
tasks:
- name: Install NFS Utilities
yum:
name: nfs-utils
state: present
- name: Start NFS Server
systemd:
name: nfs-server
state: started
enabled: yes
- name: Modify Firewall Rule for NFS
firewalld:
service: '{
{ item }}'
permanent: yes
state: enabled
immediate: yes
with_items:
- nfs
- rpc-bind
- mountd
- name: Configure NFS Client
hosts: nfs_client
tasks:
- name: Install NFS Utilities
yum:
name: nfs-utils
state: present
- name: Create Mount Point
file:
path: /mnt/nfs
state: directory
- name: Mount NFS
mount:
src: '{
{ nfs_server_ip }}:/ansible_data'
path: /mnt/nfs
fstype: nfs
state: mounted
在这个案例中,我们定义了两个 plays,一个用于配置 NFS 服务器,另一个用于配置 NFS 客户端。
案例3:多剧本实现
以下 Playbook 展示了如何在不同的主机上执行不同的任务:
---
- name: Install and Start httpd
hosts: node01
tasks:
- name: Install httpd
yum:
name: httpd
state: present
- name: Start httpd
service:
name: httpd
state: started
enabled: yes
- name: Configure Firewall for httpd
firewalld:
service: http
state: enabled
immediate: yes
permanent: yes
- name: Install and Start MariaDB
hosts: node02
tasks:
- name: Install MariaDB
yum:
name: mariadb-server
state: latest
- name: Start MariaDB
service:
name: mariadb
enabled: yes
state: started
- name: Configure Firewall for MariaDB
firewalld:
service: mysql
state: enabled
immediate: yes
permanent: yes
在这个案例中,我们定义了两个独立的 plays,一个用于在 node01 上安装和启动 httpd,另一个用于在 node02 上安装和启动 MariaDB。
总结
Ansible-playbook 是一个强大的工具,它允许我们以声明式的方式定义和管理配置任务。通过上述案例,我们可以看到 Ansible-playbook 在实际运维中的应用,包括服务部署、配置管理和环境搭建等。这些案例只是冰山一角,Ansible 的灵活性和扩展性使其能够适应各种复杂的运维场景。