1. Ansible是什么?原理是什么

ansible是新出现的自动化运维工具,由python开发,集合了众多自动化运维工具的优点,实现了批量系统部署、批量程序部署,批量运行命令等功能。ansible是基于模块工作的,本身没有批量部署的能力,真正具有批量部署能力的是ansible运行的模块,ansible只是提供一个框架。

  • ansbile:核心程序
  • modules:包括ansible自带的核心模块以及自定义模块
  • plugins:完成模块功能的补充,包括连接插件,邮箱插件
  • palybooks:剧本,定义ansbile多任务配置文件,由ansible自动执行
  • inventory:定义ansbile管理的主机清单
  • connection plugins:负责和被监控端实现通信

2. 有没有使用ansible部署过什么服务

有,例如:

  • 安装nginx并且修改配置文件
  • 生成hosts解析文件
  • 生成nginx配置文件
  • 循环创建用户
  • 使用角色安装httpd
  • 使用角色安装java+nginx+halo
  • 综合案例:搭建typecho博客

3. 什么是 Ansible 模块?常用模块

Ansible模块是用于执行特定任务的脚本或可执行程序。模块提供了一种标准化的方式来与远程节点交互,执行各种操作,例如文件操作、软件包管理、用户管理等。

  1. yum/apt:用于安装、升级、删除软件包,适用于基于yum和apt软件包管理的Linux发行版。
  2. copy/template:用于在远程节点上复制文件或模板文件,并可选地设置文件权限和所有者。
  3. command/shell:用于在远程节点上执行命令,类似于在终端上直接运行命令。
  4. service/systemd:用于启动、停止、重启服务,适用于使用systemd或init等系统服务管理工具的系统。
  5. user/group:用于管理系统用户和用户组,包括创建、删除、修改用户和用户组。
  6. cron:用于管理cron作业,包括创建、删除、修改crontab条目。
  7. apt_repository/yum_repository:用于管理包管理器的软件源,添加或删除软件源。
  8. git:用于在远程节点上进行源码的拉取和版本控制操作。
  9. debug:用于打印调试信息,可用于查看Ansible变量的值。

4. ansible使用copy模块来将/opt/aa.txt复制到/home/jack中

[root@server1 ~]# vim copy.yml
---
- name: Copy file using Ansible
  hosts: your_target_host   # 你的目标主机
  tasks:
    - name: Copy file from /opt/aa.txt to /home/jack
      copy:
        src: /opt/aa.txt
        dest: /home/jack/aa.txt

[root@server1 ~]# ansible-playbook   copy.yml

5. 简述什么是playbook

Playbook(剧本)是Ansible中用于定义自动化任务执行流程的脚本文件。每个Playbook是一个YAML文件,其中包括了一系列任务,用于描述系统管理和自动化配置的过程。

Playbook文件通常包含以下几个基本要素:

  1. hosts(主机清单):指定任务执行的目标主机或主机组。可以是具体的主机名或IP地址,也可以是在Ansible主机清单中定义的主机组。
  2. 变量定义:定义在Playbook中需要用到的变量。变量可以包括主机清单中定义的变量,也可以是自定义的Playbook变量。
  3. 任务:定义需要执行的一系列操作。每个任务都是按照特定的模块来执行,例如文件操作、软件包管理、用户管理等。
  4. 处理结果:可以定义处理任务执行结果的机制或行为,例如设置告警、进行通知等。

通过Playbook,用户可以以清晰、可读的方式定义自动化任务的执行过程,将不同的模块按照任务顺序组织和执行,实现自动化配置、应用程序部署、系统管理等任务。Playbook文件可以被反复执行,保证了任务的一致性和可重复性。

6. Ansible如何实现任务的循环

在Ansible中,可以使用循环结构来实现对任务的循环执行。可以使用 with_items 关键字来指定一个列表,然后循环执行任务。

---
- name: Example of loop in Ansible
  hosts: your_target_host
  tasks:
    - name: Create multiple directories
      file:
        path: "/path/to/{{ item }}"
        state: directory
      with_items:
        - dir1
        - dir2
        - dir3

在这个示例中,with_items 关键字用于循环执行一个名为 "Create multiple directories" 的任务,该任务创建了多个目录。{{ item }} 是一个占位符,Ansible会将 with_items 中的每个项依次赋值给 {{ item }},执行对应的任务。

运行上面的Playbook时,它会循环遍历列表中的项目,并为列表中的每一项执行创建目录的任务。这使得Ansible在遇到需要循环执行任务的场景时非常灵活,可以根据需要来执行多次相同的任务。

7. Ansible hanlder的作用

在Ansible中,handler是用于处理任务通知的机制。当任务执行后,可以触发handler执行,并且指定何时执行。这使得Ansible非常适合处理通知和配置改变事件。

handler的作用包括:

  1. 处理通知:当任务完成后,handler可以根据需要执行通知操作,比如重启服务、发送邮件通知、执行特定的操作等。
  2. 延迟执行:不同于任务,handler本身不会在每次执行时都触发,而是会在一系列任务完成后被触发执行。
  3. 减少冗余执行:由于handler只有在需要时才会执行,在某些情况下可以避免任务在重复执行时产生冗余结果。
- name: restart apache
  service:
    name: apache2
    state: restarted
  notify: restart apache

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

在这个示例中,当apache服务启动或重载时,handler会被触发来重新启动服务。这样,无论多少个任务通知了重启apache的handler,实际上只会在最终一次运行重启操作。

总之,handlers提供了一种灵活的机制,用于在任务执行后延迟处理通知或执行操作。

8. Ansible角色的作用

Ansible角色是一种用于组织和封装Playbooks和相关文件的结构化方式。角色旨在使您的Playbooks更加模块化、可复用和易于维护。每个角色都包含与特定功能、服务或应用程序相关的任务、变量、处理程序和文件。

Ansible角色的作用包括:

  1. 模块化可重用性:将任务、变量和处理程序封装在单独的角色中,使其可以在不同的Playbooks中重复使用,从而实现了模块化和可重用性。
  2. 易于维护:将相关功能和任务分组到角色中,使得对特定功能或应用程序的配置和管理更加清晰和易于维护。
  3. 命名空间隔离:每个角色都有自己的变量命名空间,可以避免变量冲突,使得角色可以在不同环境中安全地重用。
  4. 规范和组织结构:角色的结构和组织规范,使得团队成员在共同的项目中能够更容易地理解和协作。

9. Ansible的优缺点和局限性

优点:

  • 简单易用:Ansible 使用 YAML 语法,易于学习和理解,上手成本低。
  • 无代理:无需在被管理的主机上安装客户端,使用 SSH 直接管理远程主机,安全性高。
  • 模块化和扩展性:拥有丰富的模块和插件,支持自定义模块和插件,具有较高的扩展性。
  • 基于剧本的自动化:使用 Playbook 进行自动化任务的编排,使得管理、分发和执行复杂的任务流程更加简单和直观。
  • 社区和生态系统:拥有活跃的社区和丰富的文档、角色等,对基础设施和云的支持较好。
  • 多平台支持:可以用于管理 Windows 和各种 Linux 发行版等多种平台。

局限性:

  • 性能:大规模环境下执行速度较慢,对大规模环境的扩展性和性能有一定局限性。
  • 复杂任务流处理:对于复杂的任务流处理和分支逻辑,支持相对较弱。
  • Windows支持:Ansible 对 Windows 的支持相对较弱,而且需要较高版本的 PowerShell。
  • 缺乏图形化管理:对于要求图形化操作和管理的用户,Ansible 相对不太友好。