简介
Ansible是一个能够部署、管理一群本地/远程宿主机/云主机的工具。Ansible通过SSH服务实现管理节点和远程节点的通信,进而对远程节点进行操作。 因此,Ansible配置时,只需保证管理节点能够通过SSH连接到远程节点即可。
构成
Ansible提供一种框架,并基于模块(module)执行真正的工作和操作。常见的ansible module有:yum、copy、template等。当Ansible调用不同module时,其对应参数也会不同。但一般而言,ansible的CLI模式为:
ansible -m <module> -a <module_parameters>
调试测试类
- ping:管理节点ping远程节点。用于检测节点是否正确配置SSH连接,首先检查能够通过SSH登陆远程节点,然后检查远程节点的python是否满足要求。
- debug:用于管理节点调试module,打印一些消息。
文件类
- copy:从管理节点拷贝文件到远程节点,且可设置合理文件权限。在拷贝前,会比较文件的checksum,如果相同则不拷贝且返回状态ok;否则进行拷贝并返回changed。
- template:从管理节点拷贝文件到远程节点,进行变量替换。与copy不同的是,template根据所需内容进行拷贝。
- file:设置文件属性。
Linux类
- user:管理远程节点上Linux用户。
- yum:进行包管理。
- service:进行服务管理。
- firewalld:进行防火墙的服务和端口管理。
Shell类
- shell:在远程节点上执行shell命令。
- command:在远程节点上执行命令。
实践
管理主机
Ansible可以同时操作属于某个组的多台主机,组和主机间的关系通过host inventory文件配置,其默认路径为/etc/ansible/hosts。除默认文件外,还可使用多个inventory文件,也可从动态源或云上拉取该配置信息。
在inventory文件中,这些管理节点根据分类分为:数据库节点、服务节点、计算节点、存储节点等等;并且可以进一步划分:组、子组、主机、变量等。
[group:child]
subgroup1
subgroup2
[subgroup1]
host1
host2
[subgroup2]
host3
host4
命令行中传递host inventory方式为:
ansible -i hosts [host_group] ...
ansible --inventory-file hosts [host_group] ...
通过命令管理
ansible提供了CLI工具,叫做Ad-Hoc Commands。命令示例有:
# 命令格式
ansible <host-pattern> [options]
# 检查所有节点是否以用户user_test创建了ansible可访问环境
ansible all -m ping -u user_test
# 在所有节点上以当前用户执行echo命令
ansible all -a "echo hello"
通过脚本管理
通过脚本可以实现代码的复用,ansible脚本的名字为playbook,使用yaml格式,文件后缀为yml。playbook中对每一组server的操作组合称为一个play,一般一个playbook中只包含一个play。
playbook yaml文件语法及组成有:远程节点、登陆用户、执行的task、响应处理handlers、变量及控制语句。