Ansible特性
下面介绍下Ansible的主要特性:
1.模块化:调用特定的模块,完成特定任务
2.支持自定义模块
3.基于Python语言实现
4.部署简单,基于python和SSH(默认已安装),agentless
5.安全,基于OpenSSH
6.支持playbook编排任务
7.幂等性:一个任务执行1遍和执行n遍效果一样,不因重复执行带来意外情况
8.可使用任何编程语言写模块
9.YAML格式,编排任务,支持丰富的数据结构
10.较强大的多层解决方案
Ansible架构
先来看看这张架构图,然后对各个组成部分做一个简单的说明。
1.核心引擎:即图中所看到的Ansible。
2.核心模块(Core Module):和大多数运维工具一样,将系统和应用提供的能力模块化,一个模块有点像编程中一个功能接口,要使用的时候调用接口并传参就可以了。比如Ansible的service模块,你要保证名为nginx的service处于启动状态,只需要调用service模块,并配置参数name: nginx,state: started即可。
3.自定义模块(Custom Modules):显而易见,如果Ansible的核心模块满足不了你的需求,你可以添加自定义化的模块。
4.插件(Plugins):模块功能的补充,如循环插件、变量插件、过滤插件等,也和模块一样支持自定义,这个功能不常用。
5.剧本(playbooks):说到这个,先说说Ansible完成任务的两种方式,一种是Ad-Hoc,就是ansible命令,另一种就是Ansible-playbook,也就是ansible-playbook命令。他们的区别就像是Command命令行和Shell Scripts,比如,要在远程主机上安装nginx或许一条命令ansible apps -m yum -a “name=nginx state=present”,但是要进行一个完整的nginx安装配置启动的固化流程性质的操作,最好写成一个playbooks(可以看作是任务的合集)。
6.连接插件(connectior plugins):Ansible默认是基于SSH连接到目标机器上执行操作的。但是同样的Ansible支持不同的连接方法,要是这样的话就需要连接插件来帮助我们完成连接了。
7.主机清单(host inventory):为Ansible定义了管理主机的策略。一般小型环境下我们只需要在host文件中写入主机的IP地址即可,但是到了中大型环境我们有可能需要使用静态inventory或者动态主机清单来生成我们所需要执行的目标主机。
结合图中的Cloud元素提一提Ansible的host inventory和SSH,Ansible默认是基于SSH连接到目标机器上执行操作,这样就需要目标主机上有一个用户用来执行Task中定义的操作,在cloud环境中可以在镜像内置用户和公钥,然后通过调用云主机供应商提供的脚本动态生成host inventory。这样对主机的管理提供了很大的方便。
yum源安装:sudo yum install ansible
基本参数
ansible_ssh_host 将要连接的远程主机名.与你想要设定的主机的别名不同的话,可通过此变量设置. ansible_ssh_port ssh端口号.如果不是默认的端口号,通过此变量设置. ansible_ssh_user 默认的 ssh 用户名 ansible_ssh_pass ssh 密码(这种方式并不安全,我们强烈建议使用 --ask-pass 或 SSH 密钥) ansible_sudo_pass sudo 密码(这种方式并不安全,我们强烈建议使用 --ask-sudo-pass) ansible_sudo_exe (new in version 1.8) sudo 命令路径(适用于1.8及以上版本) ansible_connection 与主机的连接类型.比如:local, ssh 或者 paramiko. Ansible 1.2 以前默认使用 paramiko.1.2 以后默认使用 'smart','smart' 方式会根据是否支持 ControlPersist, 来判断'ssh' 方式是否可行. ansible_ssh_private_key_file ssh 使用的私钥文件.适用于有多个密钥,而你不想使用 SSH 代理的情况. ansible_shell_type 目标系统的shell类型.默认情况下,命令的执行使用 'sh' 语法,可设置为 'csh' 或 'fish'. ansible_python_interpreter 目标主机的 python 路径.适用于的情况: 系统中有多个 Python, 或者命令路径不是"/usr/bin/python",比如 \*BSD, 或者 /usr/bin/python |
常见使用命令
# 执行远程命令 # ansible test -m command -a 'uptime'
# 执行主控端脚本 # ansible test -m script -a '/etc/ansible/script/test.sh'
# 执行远程主机的脚本 # ansible test -m shell -a 'ps aux|grep zabbix'
# 类似shell # ansible test -m raw -a "ps aux|grep zabbix|awk '{print \$2}'"
# 创建软链接 # ansible test -m file -a "src=/etc/resolv.conf dest=/tmp/resolv.conf state=link"
# 删除软链接 # ansible test -m file -a "path=/tmp/resolv.conf state=absent"
# 复制文件到远程服务器 # ansible test -m copy -a "src=/etc/ansible/ansible.cfg dest=/tmp/ansible.cfg owner=root group=root mode=0644" |