Ansible 模式
一、Ansible 命令
1、Ansible 命令执行的方式有两种:Ad-Hoc、Ansible-playbooks,这两种方式没有本质的区别,Ad-Hoc用于临时执行命令;Ansible-playbooks可以理解为Ad-Hoc的集合,通过一定的规则编排在一起,也就是剧本。
2、Ansible通讯机制是ssh,有秘密和秘钥验证,一般来说都是配置秘钥验证。秘钥配置使用ssh-keygen。
3、使用命令格式:
ansible <host-pattent> [options]
解释:
ansible Ansible命令
<host-pattern>是Inventory中定义的主机名、IP、group组名、具有 "." 或 "*" 或 ":"等特殊字符的匹配型字符串。<>表示该选项是必须。
[options]是Ansible的参数选项,可选参数。
常用选项如下:
-m NAME,--module-name=NAME:指定执行使用的模块(ansible的功能都是基于模块化的)。
-u USERNAME,--user=USERNAME:指定远程主机以USERNAME执行。
-s,--sudo:远程执行命令时使用sudo方式,相当于Linux系统下的sudo命令。
-U SUDO_USERNAME,--sudo-user=SUDO_USERNAME:sudo 用户
注意:上述的-s和-U选项在新版中已经失效。新版本选项如下两项:
-s,--sudo 被改成 -b,--become
-U,--sudo-user被改成 --become-user
-K, --ask-become-pass:使用--become或者--become-user时使用的密码认证。
-f FORKS, --forks=FORKS:并行线程数量。
-k, --ask-pass:连接到远程主机的密码,当没有使用免密认证时使用
eg:
1、---测试 -m -u选项;-m指定 ping模块,以yjt用户执行ping存活检测。如果不指定用户,在远程机器上默认是以root用户执行。
[root@manager1 ~ 15:53:53]#ansible 192.168.4.46 -m ping -u yjt ---注意,ip需要在/etc/ansible/hosts提前里面配置,如果想在多个主机测试,这里可以改成all,当然,前提是需要在hosts文件配置好。 192.168.4.46 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python" }, "changed": false, "ping": "pong" }
提示SUCCESS就表示成功了。
2、测试 -b;以yjt用户sudo到root执行ping存活检测。这种方式需要在远程主机的/etc/sudoers文件中配置yjt用户,如果没有配置NOPASSWD,则需要加上-K选项。
远程主机/etc/sudoers文件添加如下:
yjt ALL=(root)NOPASSWD: ALL
[root@manager1 ~ 16:26:00]#ansible 192.168.4.46 -m ping -u yjt -b
192.168.4.46 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
把上诉的yjt ALL=(root)NOPASSWD: ALL换成yjt ALL=(root) ALL,再次执行
[root@manager1 ~ 16:37:19]#ansible 192.168.4.46 -m ping -u yjt -b
192.168.4.46 | FAILED! => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"module_stderr": "Shared connection to 192.168.4.46 closed.\r\n",
"module_stdout": "sudo: a password is required\r\n",
"msg": "MODULE FAILURE\nSee stdout/stderr for the exact error",
"rc": 1
}
发现报错了,这个时候由于远程机器的yjt用户不能免密登录到root用户,所以,执行方式改成如下,加-K(大写)选项
[root@manager1 ~ 16:30:34]#ansible 192.168.4.46 -m ping -u yjt -b -K
BECOME password: ---输入yjt用户的密码。
192.168.4.46 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
二、ansible-galaxy
用于从ansible galaxy官网上传下载roles。
命令用法:
ansible-galaxy [delete|import|info|init|install|list|login|remove|search|setup] [--help] [options]
init:用于初始化本地的roles,以备上传至galaxy。
info:指定roles的详细信息。
install:下载roles到本地。
list:列出本地已经存在的roles。
remove:删除本地已经存在的roles。
eg:下载nginx的roles,默认存放在/etc/ansible/roles
[root@manager1 kvm 17:19:05]#ansible-galaxy --ignore-errors install azavea.git - downloading role 'git', owned by azavea - downloading role from https://github.com/azavea/ansible-git/archive/0.1.0.tar.gz - extracting azavea.git to /root/.ansible/roles/azavea.git ---这里存放在了这个目录下。 - azavea.git (0.1.0) was installed successfully
三、ansible-pull
远端拉取命令或者剧本,效率无限提升,对运维要求较高
该指令的使用涉及Ansible的另一种工作模式:pull模式(Ansible默认使用push模式)。这和通常使用的push模式工作机理刚好相反,其适用于以下场景:
1、你有数量巨大的机器需要配置,即使使用高并发线程依旧要花费很多时间;2、你要在刚启动的、没有网络连接的主机上运行Anisble
Usage: ansible-pull -U <repository> [options] [<playbook.yml>]
例: */20 * * * * root /usr/local/bin/ansible-pull -o -C 2.1.0 -d /srv/www/king-gw/ -i /etc/ansible/hosts -U git:// git.kingifa.com/king-gw-ansiblepull >> /var/log/ansible-pull.log 2>&1
它是通过通过ansible-pull结合Git和crontab一并实现,其原理如下:通过crontab定期拉取指定的Git版本到本地,并以指定模式自动运行预先制订好的指令
注:ansible-pull通常在配置大批量机器的场景下会使用,灵活性稍有欠缺,但效率几乎可以无限提升,对运维人员的技术水平和前瞻性规划有较高要求