Linux Ansible-playbook 详解及实战案例

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 的灵活性和扩展性使其能够适应各种复杂的运维场景。

猜你喜欢

转载自blog.csdn.net/qq_40797754/article/details/143422417