简介
Ansible是一种自动化运维工具,基于Python开发,用于自动化部署、配置管理和应用程序的编排。它提供了一种轻量级、可扩展的方式来管理和配置多个计算机系统。Ansible使用简单的声明性语法,并基于SSH协议进行通信,使得在大规模的基础设施中执行任务变得简单和高效。
以下是Ansible的一些主要特性:
- 模块化架构:Ansible提供了丰富的模块库,用于执行各种类型的任务,如文件操作、软件包管理、服务管理等。这些模块具有统一的接口和命令,可以方便地组合和调用,满足各种不同场景的需求。
- 有Parmiko,PyYAML,Jinjia2(模板语言)三个关键模块
- 支持自定义模块,用户根据自己的需求通过Python、Shell脚本等编程语言编写自定义模块,用于与特定的API集成,或者编写一个自定义模块用于在目标主机上执行一些特定的操作。
- 部署简单,基于Python和SSH(默认以安装)
- 安全,Ansible通过SSH协议与目标主机进行通信,无需在目标系统上安装任何额外的代理程序或客户端
- 支持playbook编排任务。通过Playbooks,可以定义一套操作步骤,以及要应用到哪些主机上。
- 幂等性:一个任务执行一遍和执行N遍效果一样,不会因为重复执行带来意外错误
- 可以使用任何的编程语言写模块
- YAML格式,编排任务,支持丰富的数据结构
- 较强大的多层解决方案(多层概念:多个playbook的集合)
-
Ad-hoc命令层:Ad-hoc命令是一种临时执行的命令,用于在目标主机或主机组上执行简单的任务。这些命令可以直接在命令行中使用ansible命令进行执行,无需编写剧本。Ad-hoc命令适用于一次性、快速的任务执行,如查看主机信息、执行单个命令等。
-
Playbooks层:Playbooks是一种声明性的配置文件,用于定义一系列任务和配置操作。通过Playbooks,可以按照特定的顺序来执行任务,并根据条件语句和循环结构来控制任务的执行流程。Playbooks支持变量、模块、剧本引用等功能,使得配置更加灵活和可复用。Playbooks适用于较为复杂的自动化配置和管理需求。
-
Roles层:Role是对Playbooks的更高级组织和抽象。一个Role可以包含多个Playbooks以及相关的任务、变量和文件等。通过将任务和配置逻辑按照角色进行组织,可以实现更好的代码复用和可维护性。Roles适用于大规模和复杂的自动化配置和管理场景。
工作原理
Ansible工作原理:一般从Host invertory中获取所需要处理的主机列表,然后前往目的主机上执行任务。采取
Playbook剧本任务时,会根据剧本中一系列任务生成一个临时的脚本文件,然后发送到目的主机,脚本文件在远程主机上执行完成后返回结果,然后删除本地临时文件。
架构图
架构图说明:
1 2 3 4 5 6 7 8 9 10 |
|
插件和模块的区别:模块是用来实现任务的,增强ansible平台自己的功能就需要使用插件(loggin插件记录日志,email插件发送邮件),其中最常用的是:连接插件(Connectionr Plugins)ansible基于连接插件连接到各个主机上,虽然默认情况下ansible使用ssh连接到各个主机上,但它还支持其它的连接方法。
工作机制
CMDB: 配置管理数据库(使用Ansible的一种方式)
USERS: 管理用户(使用Ansible的人员)
ANSIBLE PLAYBOOK: Ansible任务剧本(任务集)
INVERTORY: 被管理的主机清单
API: 供第三方程序调用的应用程序编程接口
MODULES: AnsIble使用的模块(内置模块,自定义模块)
PLUGINS: Ansbile使用的插件(模块功能的补充方式,这里包括很多的插件)
HOSTS: 被控端主机
NETWORKING: 被控端网络设备(交换机,路由器等)
配置文件
ansible.cfg内容
[default]
#被控端主机清单文件
inventory = /etc/ansible/hosts
#指定ansible搜索模块位置,如果需要自定ansible模块,需要放到 library 所指定的目录下
library = /usr/share/my_modules/
#临时文件远程主机存放目录
remote_tmp = ~/.ansible/tmp
#临时文件本地主机存放目录
local_tmp = ~/.ansible/tmp
#ansible在执行工作时进程数量
forks = 5
#默认轮询间隔时间,单位秒
poll_interval = 15
#被控端默认执行sudo命令所切换的用户
sudo_user = root
#每次执行sudo命令时是否询问sudo到目标用户的密码
ask_sudo_pass = True
#远程连接被控端的ssh端口
remote_port = 22
ansible.cfg获取位置
在执行 Ansible Ad-hoc 命令时,Ansible会查找 $ANSIBLE_CONFIG
环境变量指定的 Ansible 配置文件。如果该环境变量未设置,则默认搜索以下位置的 ansible.cfg
文件:
-
当前工作目录:Ansible会首先在当前执行命令的工作目录中查找
ansible.cfg
文件。如果您在执行命令时位于具有ansible.cfg
文件的目录中,Ansible将使用该文件。 -
用户家目录:如果当前工作目录中不存在
ansible.cfg
文件,Ansible会在用户的家目录中查找.ansible.cfg
文件(注意文件名以点开始)。此文件位于用户的家目录下,如~/.ansible.cfg
或%USERPROFILE%/.ansible.cfg
。 -
系统路径:如果以上两个位置都没有找到
ansible.cfg
文件,Ansible会在系统默认的配置路径中搜索。这些路径通常是/etc/ansible/ansible.cfg
和/usr/local/etc/ansible/ansible.cfg
(路径可能因操作系统和Ansible安装方式而有所不同)。
请注意,当使用Ad-hoc命令时,您也可以使用 -c <配置文件路径>
参数显式地指定要使用的 ansible.cfg
文件。例如:
ansible all -m ping -c /path/to/ansible.cfg