ansible总结

如题所述

第1个回答  2022-06-27

ansible是一种自动化运维工具,基于paramiko开发的,并且基于模块化工作,Ansible是一种集成IT系统的配置管理、应用部署、执行特定任务的开源平台,它是基于python语言,由Paramiko和PyYAML两个关键模块构建。集合了众多运维工具的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能.ansible是基于模块工作的,本身没有批量部署的能力.真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架.ansible不需要在远程主机上安装client/agents,因为它们是基于ssh来和远程主机通讯的.

ansible被定义为配置管理工具,配置管理工具通常具有以下功能:

常用的自动化运维工具技术特性比较:

ansible系统由控制主机和被管理主机组成,控制主机不支持windows平台

部署简单, 只需要在控制主机上部署ansible环境,被控制端上只要求安装ssh和python 2.5以上版本,这个对于类unix系统来说相当与无需配置.

Ansible任务执行模式分为以下两种:

ansible配置文件查找顺序

ansible配置文件
ansible 有许多参数,下面我们列出一些常见的参数:

ansible的主要功用在于批量主机操作,为了便捷地使用其中的部分主机,可以在inventory file中将其分组命名。默认的inventory file为/etc/ansible/hosts。
inventory file可以有多个,且也可以通过Dynamic Inventory来动态生成。

Inventory文件格式:

inventory其他的参数

ansible通过ssh实现配置管理、应用部署、任务执行等功能,因此,需要事先配置ansible端能基于密钥认证的方式联系各被管理节点。

ansible命令使用语法:

例如:

可以通过 ansible-doc -l 列出所有可用的module,常用的module有:

ansible -s <module-name> 可以查看指定module的用法,或者参看 官方帮助文档 :

playbook是由一个或多个“play”组成的列表。play的主要功能在于将事先归并为一组的主机装扮成事先通过ansible中的task定义好的角色。从根本上来讲,所谓task无非是调用ansible的一个module。将多个play组织在一个playbook中,即可以让它们联同起来按事先编排的机制同唱一台大戏。

下面是一个简单示例:

playbooks的组成部分

执行过程:

playbook安装配置apache实战

ansilbe自1.2版本引入的新特性,用于层次性、结构化地组织playbook。roles能够根据层次型结构自动装载变量文件、tasks以及handlers等。要使用roles只需要在playbook中使用include指令即可。简单来讲,roles就是通过分别将变量、文件、任务、模块及处理器放置于单独的目录中,并可以便捷地include它们的一种机制。角色一般用于基于主机构建服务的场景中,但也可以是用于构建守护进程等场景中。

一个roles的案例如下所示:

在playbook中,可以这样使用roles:

也可以向roles传递参数:

也可以用条件来使用roles:

ansible运行playbook时会启动很多ssh连接来执行复制文件,运行命令这样的操作.openssh支持这样一个优化,叫做ssh Multiplexing,当使用这个ssh Multiplexing的时候,多个连接到相同主机的ssh回话会共享相同的TCP连接,这样就只有第一次连接的时候需要进行TCP三次握手.

ansible会默认使用ssh Multiplexing特性,一般不需要更改配置,相关的配置项为:

ansible执行过程中,他会基于调用的模块生成一个python脚本,然后将python脚本复制到主机上,最后执行脚本.ansible支持一个优化,叫做pipelining,在这个模式下ansible执行脚本时并不会去复制它,而是通过管道传递给ssh会话,这会让ansible的ssh会话从2个减少到1个,从而节省时间.

pipelining默认是关闭的, 因为他需要确认被管理主机上的/etc/sudoers文件中的 requiretty 没有启用, 格式如下:

ansible开启pipelining方法, 修改ansible.cfg配置文件:

ansible playbook会默认先收集fact信息,如果不需要fact数据可以在playbook中禁用fact采集:

也可以全局禁用fact采集:

另一种解决方案就是使用fact缓存,目前ansible支持下面几种fact缓存:

JSON文件做fact缓存示例
ansible把采集到的fact写入控制主机的json文件中,如果文件已经存在,那么ansible不会再去主机上采集fact

启用JSON文件缓存,修改ansible.cfg文件:

ansible默认并发数是5,可以用下面两种方法修改并发数:

ansible内置多种云计算相关模块,如aws,openstack,docker等,下图是ansible与docker相关的模块:

通过playbook和dockerfile相结合的方式生成镜像, 示例如下:

ansible可以通过docker模块来操作容器,示例如下:

相似回答