开始之前先聊聊:这久太忙,都么得整理笔记和学自己想学的东西。真的Netty和OneNet直接要命,自己又忙着投简历等等,都么得时间弄自己的事,唉。关于Ansible的话,感觉东西也很多,慢慢学吧。
现在进入正题吧。
关于Ansible我找到的可以学的网站的话,一个是:Ansible中文权威指南,一个是W3Cschool,顺便一提,这个网站是个神奇的网站,以前只是用来学前端,但是现在感觉啥都能找到。
关于Ansible
是这样说的:
1、Ansible是个与puppet、saltstack、chef一样功能强大的组态设定工具。
2、Ansible提供一种最简单的方式用于发布、管理和编排计算机系统的工具,使得管理者可以在数分钟内搞定。
3、Ansible是一个模型驱动的配置管理器,支持多节点发布,远程任务执行。默认使用SSH进行远程连接,无需在被管理节点上安装附加软件,可使用各种编程语言进行扩展。
特性
1、拥有模块化的设计,Ansible能够调用特定的模块来完成特定的任务,本身是核心组件。
2、Ansible基于python语言实现,由paramiko(python的一个可并发连接ssh主机功能库),PyYAML和Jinja2三个关键模块实现。
3、Ansible的部署比较简单,被控端不需要安装客户端工具。
4、以主从模式工作。
5、支持自定义模块功能。
6、支持playbook剧本,连续任务先后设置顺序完成。
7、每个命令具有幂等性。
Ansible的一些组件
从上图我们可以看见,它大致包含这些东西:
1、连接插件connection plugins:负责和被控端实现通信。
2、host inventory:指定操作的主机,是一个配置文件里面定义监控的主机。
3、各种模块包括核心模块、command模块(默认),自定义模块等。
4、借助于插件完成记录日志邮件等功能。
5、playbooks
安装(centos)和公钥下发
- 安装
1 | yum install -y epel-release |
- 公钥下发
1 | ssh-keygen -P "" |
Ansible工具默认主目录为/etc/ansible,此时我们 ls -l 一下:
其中:
1、ansible.cfg:是Ansible的主配置文件,以ini格式存储配置数据,在Ansible中,几乎所有的配置项都可以通过Ansible的playbook或环境变量来重新赋值。在运行命令的时候,命令将会按照预先设定的顺序来查找配置文件:
* ANSIBLE_CONFIG:会先检查环境变量,以及这个变量指向的配置文件。
* /.ansible.cfg:当前目录下的ansible.cfg配置文件。
* ~/.ansible.cfg:当前用户家目录(home)下的ansible.cfg文件。
* /etc/ansible.cfg:最后是安装时自动生成的配置文件。
2、hosts:是Ansible的inventory档案,里面配置了被控的主机列表,可以配置分组,可以定义IP以及相关规则。
3、roles:为角色或者插件路径,默认空的。
现在,我们简单测试一下:
1 | echo -e "[local]\n localhost ansible_connection=local" >> /etc/ansible/hosts |
此时,会看见输出:
Ansible命令的执行过程
1、加载自己的配置文件
2、加载自己对应的模块文件
3、通过ansible将模块或者命令生成对应的临时py文件,并将该文件传输至远程服务器
4、对应执行用户的家目录的.ansible/tmp/XXX/XXX.py文件
5、赋予文件执行权限,执行并返回结果
6、删除临时py文件,sleep 0退出