Ansible运维自动化

什么是 Ansible?

Ansible 是一款开源的自动化工具,由 Red Hat 公司推出。它基于 Python 编写,旨在简化系统配置、部署和管理。Ansible 的核心思想是使用简单易懂的 YAML 格式的 Playbooks 来描述自动化任务。与其他自动化工具相比,Ansible 的优势在于其简单性和灵活性。您可以使用 Ansible 来自动化服务器配置、软件部署、应用程序生命周期管理等任务,而无需编写复杂的脚本或代码。

Ansible 的优势

1. 简单易用

Ansible 的语法简洁明了,使用 YAML 格式的 Playbooks,几乎没有学习曲线。即使是新手也可以很快上手。

2. 无客户端

与其他自动化工具不同,Ansible 无需在远程主机上安装客户端。它通过 SSH 或其他远程连接协议来管理远程系统,这样不仅减少了维护成本,也提高了安全性。

3. 模块化

Ansible 的模块化设计使得它能够管理各种不同类型的系统和服务。Ansible 提供了大量的内置模块,涵盖了操作系统配置、软件安装、文件管理、网络设备配置等各个方面。

4. 基于剧本(Playbooks)

使用 Ansible 的 Playbooks,您可以将一系列任务组织成一个逻辑单元,并在多台主机上同时执行。这使得对整个基础架构进行统一管理和配置成为可能。

Ansible 的使用场景

1. 自动化部署

使用 Ansible,您可以自动化部署应用程序、中间件和基础设施。通过定义简单的 Playbooks,您可以快速地在多台主机上部署同样的配置和应用程序,确保一致性和可重复性。

2. 系统配置管理

通过 Ansible,您可以轻松管理和配置服务器和网络设备。无论是更新软件包、配置文件、还是执行系统维护任务,Ansible 都可以帮助您自动化这些过程。

3. 持续集成/持续部署(CI/CD)

Ansible 可以集成到 CI/CD 流程中,实现自动化的构建、测试和部署。通过与工具如 Jenkins、GitLab 等集成,可以构建强大的自动化 CI/CD 管道。

4. 云基础设施管理

对于云环境,Ansible 提供了丰富的模块来管理云服务提供商的资源,包括 AWS、Azure、Google Cloud 等。您可以使用 Ansible 来自动创建、配置和管理云资源。

 Ansible模块

Ansible 提供了丰富的模块来管理各种不同类型的系统和服务。这些模块包括了操作系统配置、软件包管理、文件管理、服务管理、网络设备配置等等。以下是一些常用的 Ansible 模块以及它们的简要介绍:

1. apt / yum / dnf 模块

  • apt 模块:用于在 Debian/Ubuntu 系统上安装、升级、删除软件包。

  • yum 模块:用于在 CentOS/Red Hat 系统上安装、升级、删除软件包。

  • dnf 模块:用于在最新版本的 Fedora 系统上安装、升级、删除软件包。

2. copy / fetch 模块

  • copy 模块:用于在远程主机上复制文件到目标路径。

  • fetch 模块:用于从远程主机上拉取文件到控制节点。

3. file 模块

  • file 模块:用于管理文件系统,比如创建目录、更改文件权限等。

4. service 模块

  • service 模块:用于启动、停止、重新启动服务。

5. shell / command 模块

  • shell 模块:用于在远程主机上执行 Shell 命令,适用于需要交互性的命令。

  • command 模块:用于在远程主机上执行单条命令,通常用于非交互性的命令。

6. lineinfile 模块

  • lineinfile 模块:用于在文件中添加、修改或删除指定行。

7. template 模块

  • template 模块:用于使用 Jinja2 模板引擎生成文件,可以将变量和逻辑嵌入到文件中。

8. user / group 模块

  • user 模块:用于管理用户账户,比如创建、删除用户等。

  • group 模块:用于管理用户组,比如创建、删除用户组等。

9. mysql_user / mysql_db 模块

  • mysql_user 模块:用于管理 MySQL 用户,比如创建、删除用户等。

  • mysql_db 模块:用于管理 MySQL 数据库,比如创建、删除数据库等。

10. lineinfile 模块

  • lineinfile 模块:用于在文件中添加、修改或删除指定行。

11. git 模块

  • git 模块:用于从 Git 仓库中检出代码到远程主机。

12. debug 模块

  • debug 模块:用于打印调试信息,通常用于调试 Playbooks。

Playbook

Playbook 是 Ansible 的核心概念之一,是一种用于描述自动化任务的 YAML 文件。它定义了一系列任务(tasks),指定了如何在远程主机上执行这些任务。通过 Playbook,您可以实现对基础设施和应用程序的自动化管理和配置。下面是一个简单的 Playbook 示例及其介绍:

---
- name: Example Playbook
  hosts: web_servers
  become: yes
  vars:
    http_port: 80
    website_root: /var/www/html
  tasks:
    - name: Ensure Apache is installed
      package:
        name: apache2
        state: present
      become: yes

    - name: Ensure Apache is running and enabled
      service:
        name: apache2
        state: started
        enabled: yes
      become: yes

    - name: Deploy website files
      copy:
        src: /path/to/website_files
        dest: "{{ website_root }}"
      become: yes

    - name: Ensure default Apache configuration
      template:
        src: default.conf.j2
        dest: /etc/apache2/sites-available/default.conf
      become: yes
      notify:
        - restart apache

  handlers:
    - name: restart apache
      service:
        name: apache2
        state: restarted
      become: yes

Playbook 结构说明:

  • name: Playbook 的名称,用于描述这个 Playbook 的作用。
  • hosts: 指定了 Playbook 将在哪些主机上执行。web_servers 是一个在 Ansible inventory 中定义的主机组。
  • become: 表示在执行任务时是否切换到管理员权限(通常是 root)。这是一个全局设置,可以在任务级别覆盖。
  • vars: 定义了一些变量,可以在 Playbook 中多个任务中使用。例如,http_portwebsite_root 是一些通用的变量。
  • tasks: 这是一个任务列表,描述了要在目标主机上执行的操作。
    • 每个任务包含了一个 name 属性,用于描述这个任务的作用。
    • 每个任务使用不同的模块来执行特定的操作,比如 package 模块用于安装软件包,service 模块用于管理服务状态,copy 模块用于复制文件,template 模块用于根据模板生成文件等等。
  • handlers: 这是一个处理程序列表,通常用于在任务中触发的通知(notify)事件。每个处理程序也有一个 name 属性和一个或多个任务,用于定义要在事件触发时执行的操作。

Playbook 是用来描述自动化任务的 YAML 文件。它包含了一系列任务和处理程序(handlers),定义了如何在远程主机上执行这些任务以及如何处理事件。通过编写和运行 Playbook,您可以实现对基础设施和应用程序的自动化管理,确保系统的一致性和可重复性。

Ansible 的应用举例

利用ansible部署lnmp架构

打开 inventory.ini 文件并添加远程主机的 IP 地址范围:

[remote_servers]
192.168.1.101
192.168.1.102
192.168.1.103
#指定远程主机
192.168.1.[104:1110]
#指定连续的远程主机

编写 playbook.yml 文件:

---
# 这是一个 YAML 文件的开头,用于指定这是一个 Ansible Playbook 文件。

- name: Deploy LNMP Stack
# 这是一个 Play 的定义,它包含了一系列的任务。
# "Deploy LNMP Stack" 是这个 Play 的名称,用于描述这个 Play 所做的工作。

  hosts: remote_servers
# 这个 Play 会运行在名为 "remote_servers" 的 Ansible inventory 中列出的所有主机上。
# 在您的 `inventory.ini` 文件中列出了这些主机。

  become: yes
# 这个 Play 会使用 sudo 权限(即 root 权限)来执行任务。
# 这是因为安装软件、操作系统配置等操作通常需要管理员权限。

  vars:
    mysql_root_password: "your_mysql_root_password"
    php_version: "php7.4"
# 这里定义了一些变量,以便在 Playbook 中多次使用。
# 您可以在后续任务中使用 `mysql_root_password` 和 `php_version` 这两个变量。

  tasks:
    # 更新 yum 缓存
    - name: Update yum cache
      yum:
        name: '*'
        state: latest
# 第一个任务是更新 yum 缓存,确保系统中的软件包信息是最新的。
# 使用了 Ansible 的 `yum` 模块来执行这个任务。
# `name: '*'` 表示更新所有可用的软件包。

    # 安装 Nginx、MySQL、PHP 和其他必需包
    - name: Install Nginx, MySQL, PHP, and other required packages
      yum:
        name: "{{ item }}"
        state: present
      loop:
        - nginx
        - mysql-server
        - mysql-client
        - php-fpm
        - php-mysql
        - php-cli
        - php-common
        - php-curl
        - php-gd
        - php-mbstring
        - php-xml
        - unzip
# 下一个任务是安装一些软件包,包括 Nginx、MySQL、PHP 等。
# 使用了 Ansible 的 `yum` 模块来执行这个任务。
# `loop` 循环将会依次安装列表中的软件包。

    # 启动并启用 Nginx 和 PHP-FPM 服务
    - name: Start and enable Nginx and PHP-FPM services
      service:
        name: "{{ item }}"
        state: started
        enabled: yes
      loop:
        - nginx
        - php-fpm-{{ php_version }}
# 接下来的任务是启动并设置 Nginx 和 PHP-FPM 服务开机自启动。
# 使用了 Ansible 的 `service` 模块,并使用 `loop` 循环来对多个服务进行操作。
# `php-fpm-{{ php_version }}` 将会根据 `php_version` 变量来确定具体的 PHP-FPM 版本。

    # 安全设置 MySQL
    - name: Secure MySQL installation
      mysql_user:
        login_user: root
        login_password: ""
        name: root
        password: "{{ mysql_root_password }}"
        host: localhost
        state: present
        update_password: always
# 在这个任务中,使用了 Ansible 的 `mysql_user` 模块来设置 MySQL 的 root 用户的密码。
# `update_password: always` 选项表示每次运行都会更新密码,即使密码已经存在。

    # 创建一个简单的 PHP 信息页面
    - name: Create a simple PHP info page
      template:
        src: info.php.j2
        dest: /var/www/html/info.php
# 下一个任务是创建一个简单的 PHP 信息页面,用于显示 PHP 的配置信息。
# 这里使用了 Ansible 的 `template` 模块,它会根据一个模板文件生成目标文件。

    # 重启 Nginx 和 PHP-FPM 以应用更改
    - name: Restart Nginx and PHP-FPM to apply changes
      service:
        name: "{{ item }}"
        state: restarted
      loop:
        - nginx
        - php-fpm-{{ php_version }}
# 最后一个任务是重新启动 Nginx 和 PHP-FPM 服务以应用上述更改。
# 这里同样使用了 Ansible 的 `service` 模块,并使用 `loop` 循环来对多个服务进行操作。
# `php-fpm-{{ php_version }}` 将会根据 `php_version` 变量来确定具体的 PHP-FPM 版本。

  • 19
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值