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模块是用于执行特定任务的脚本或可执行程序。模块提供了一种标准化的方式来与远程节点交互,执行各种操作,例如文件操作、软件包管理、用户管理等。
- yum/apt:用于安装、升级、删除软件包,适用于基于yum和apt软件包管理的Linux发行版。
- copy/template:用于在远程节点上复制文件或模板文件,并可选地设置文件权限和所有者。
- command/shell:用于在远程节点上执行命令,类似于在终端上直接运行命令。
- service/systemd:用于启动、停止、重启服务,适用于使用systemd或init等系统服务管理工具的系统。
- user/group:用于管理系统用户和用户组,包括创建、删除、修改用户和用户组。
- cron:用于管理cron作业,包括创建、删除、修改crontab条目。
- apt_repository/yum_repository:用于管理包管理器的软件源,添加或删除软件源。
- git:用于在远程节点上进行源码的拉取和版本控制操作。
- 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文件通常包含以下几个基本要素:
- hosts(主机清单):指定任务执行的目标主机或主机组。可以是具体的主机名或IP地址,也可以是在Ansible主机清单中定义的主机组。
- 变量定义:定义在Playbook中需要用到的变量。变量可以包括主机清单中定义的变量,也可以是自定义的Playbook变量。
- 任务:定义需要执行的一系列操作。每个任务都是按照特定的模块来执行,例如文件操作、软件包管理、用户管理等。
- 处理结果:可以定义处理任务执行结果的机制或行为,例如设置告警、进行通知等。
通过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的作用包括:
- 处理通知:当任务完成后,handler可以根据需要执行通知操作,比如重启服务、发送邮件通知、执行特定的操作等。
- 延迟执行:不同于任务,handler本身不会在每次执行时都触发,而是会在一系列任务完成后被触发执行。
- 减少冗余执行:由于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角色的作用包括:
- 模块化可重用性:将任务、变量和处理程序封装在单独的角色中,使其可以在不同的Playbooks中重复使用,从而实现了模块化和可重用性。
- 易于维护:将相关功能和任务分组到角色中,使得对特定功能或应用程序的配置和管理更加清晰和易于维护。
- 命名空间隔离:每个角色都有自己的变量命名空间,可以避免变量冲突,使得角色可以在不同环境中安全地重用。
- 规范和组织结构:角色的结构和组织规范,使得团队成员在共同的项目中能够更容易地理解和协作。
9. Ansible的优缺点和局限性
优点:
- 简单易用:Ansible 使用 YAML 语法,易于学习和理解,上手成本低。
- 无代理:无需在被管理的主机上安装客户端,使用 SSH 直接管理远程主机,安全性高。
- 模块化和扩展性:拥有丰富的模块和插件,支持自定义模块和插件,具有较高的扩展性。
- 基于剧本的自动化:使用 Playbook 进行自动化任务的编排,使得管理、分发和执行复杂的任务流程更加简单和直观。
- 社区和生态系统:拥有活跃的社区和丰富的文档、角色等,对基础设施和云的支持较好。
- 多平台支持:可以用于管理 Windows 和各种 Linux 发行版等多种平台。
局限性:
- 性能:大规模环境下执行速度较慢,对大规模环境的扩展性和性能有一定局限性。
- 复杂任务流处理:对于复杂的任务流处理和分支逻辑,支持相对较弱。
- Windows支持:Ansible 对 Windows 的支持相对较弱,而且需要较高版本的 PowerShell。
- 缺乏图形化管理:对于要求图形化操作和管理的用户,Ansible 相对不太友好。