GKLBB

当你经历了暴风雨,你也就成为了暴风雨

导航

软件开发 --- Ansible 之初体验

一键大规模应用部署

Ansible 是一个强大的自动化工具,广泛用于配置管理、应用部署、任务自动化等场景。接下来,我将通过一个具体的例子,展示如何使用 Ansible 来自动化常见的操作,比如安装软件、配置服务、管理文件等。

示例:使用 Ansible 安装和配置 Nginx

假设我们有多个远程服务器(如两台 Web 服务器),我们需要自动化以下任务:

  1. 在这些服务器上安装 Nginx。
  2. 配置 Nginx 为反向代理。
  3. 启动并确保 Nginx 在这些服务器上开机自启。

我们将使用 Ansible 来完成这些操作。

一、准备工作

  1. 安装 Ansible:首先,在本地机器(控制节点)上安装 Ansible。

    sudo apt update
    sudo apt install ansible
    
  2. 配置 SSH 免密码登录:确保控制节点可以通过 SSH 无密码登录到目标服务器。假设目标服务器的 IP 地址是 192.168.1.10192.168.1.11,并且我们将使用 user 用户。

    在控制节点上生成 SSH 密钥:

    ssh-keygen -t rsa -b 2048
    

    然后将公钥复制到目标服务器:

    ssh-copy-id user@192.168.1.10
    ssh-copy-id user@192.168.1.11
    
  3. 配置 Ansible 主机清单:Ansible 需要一个主机清单文件来管理目标服务器。默认情况下,主机清单位于 /etc/ansible/hosts,你可以创建自己的主机清单文件。这里我们创建一个名为 inventory 的文件,内容如下:

    [webservers]
    192.168.1.10
    192.168.1.11
    

二、编写 Ansible Playbook

Playbook 是 Ansible 自动化操作的核心部分,它是用 YAML 语言编写的,描述了要在目标主机上执行的任务。我们将创建一个 Playbook 来安装并配置 Nginx。

1. 创建 install_nginx.yml 文件

这个 Playbook 将会做以下事情:

  1. 在所有 Web 服务器上安装 Nginx。
  2. 配置 Nginx 为反向代理。
  3. 启动并确保 Nginx 服务开机自启。
---
- name: Install and configure Nginx on web servers
  hosts: webservers
  become: yes  # 以 root 权限执行任务
  tasks:
    - name: Update apt cache
      apt:
        update_cache: yes

    - name: Install Nginx
      apt:
        name: nginx
        state: present  # 安装 nginx

    - name: Copy the custom nginx config file
      copy:
        src: ./nginx.conf  # 本地配置文件
        dest: /etc/nginx/nginx.conf  # 目标服务器路径
        owner: root
        group: root
        mode: '0644'

    - name: Ensure nginx service is running
      service:
        name: nginx
        state: started
        enabled: yes  # 确保 Nginx 启动并开机自启

    - name: Check if nginx is working
      uri:
        url: http://localhost
        status_code: 200

三、创建 Nginx 配置文件

在上面的 Playbook 中,我们使用了一个 nginx.conf 配置文件。假设你有一个自定义的 Nginx 配置文件(可以是简单的反向代理配置)。例如,创建一个 nginx.conf 文件如下:

server {
    listen 80;

    location / {
        proxy_pass http://localhost:8080;  # 假设有一个应用运行在 8080 端口
    }
}

四、执行 Playbook

在本地机器上执行以下命令来运行 Playbook 并完成自动化任务:

ansible-playbook -i inventory install_nginx.yml

五、分析 Playbook 执行结果

执行上述命令后,Ansible 会连接到 inventory 文件中的所有服务器并执行任务。执行过程中的输出会显示每个任务的状态(是否成功、失败等)。

例如,执行结果可能类似于:

PLAY [Install and configure Nginx on web servers] ***
TASK [Update apt cache] ***
ok: [192.168.1.10]
ok: [192.168.1.11]

TASK [Install Nginx] ***
changed: [192.168.1.10]
changed: [192.168.1.11]

TASK [Copy the custom nginx config file] ***
changed: [192.168.1.10]
changed: [192.168.1.11]

TASK [Ensure nginx service is running] ***
ok: [192.168.1.10]
ok: [192.168.1.11]

TASK [Check if nginx is working] ***
ok: [192.168.1.10]
ok: [192.168.1.11]

PLAY RECAP ***
192.168.1.10                  : ok=5    changed=3    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
192.168.1.11                  : ok=5    changed=3    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

六、常见的 Ansible 模块

  1. apt:用于管理 Debian 系列操作系统(如 Ubuntu)上的软件包。例如:

    - name: Install a package
      apt:
        name: nginx
        state: present
    
  2. yum:用于管理 RedHat 系列操作系统(如 CentOS)上的软件包。

    - name: Install a package
      yum:
        name: nginx
        state: present
    
  3. copy:用于将文件从控制节点复制到目标主机。

    - name: Copy nginx config
      copy:
        src: ./nginx.conf
        dest: /etc/nginx/nginx.conf
    
  4. service:用于管理服务的状态(启动、停止、重启等)。

    - name: Ensure nginx is running
      service:
        name: nginx
        state: started
        enabled: yes
    
  5. uri:用于检查 web 服务是否可用。

    - name: Check if nginx is working
      uri:
        url: http://localhost
        status_code: 200
    

总结

通过上面的例子,我们展示了如何使用 Ansible 来完成一项典型的自动化任务:在多个服务器上安装并配置 Nginx。Ansible 提供了丰富的模块来管理服务器配置,简化了大规模部署和管理的工作。此外,Ansible 的 Playbook 语法简洁易懂,适合用于各种自动化任务。

posted on 2024-12-10 06:36  GKLBB  阅读(3)  评论(0编辑  收藏  举报