Loading... <p>Ansible</p> <h2><span style="font-family: 宋体">简介</span></h2> <p style="background: white;line-height: 28px">ansible是个什么东西呢?官方的title是“Ansible is Simple IT Automation”——简单的自动化IT工具。这个工具的目标有这么几项:自动化部署APP;自动化管理配置项;自动化的持续交互;自动化的(AWS)云服务管理。所有的这几个目标从本质上来说都是在一个台或者几台服务器上,执行一系列的命令而已。通俗的说就是批量的在远程服务器上执行命令 。当然,最主要的是它是基于 paramiko 开发的。这个paramiko是什么呢?它是一个纯Python实现的ssh协议库。因此fabric和ansible还有一个共同点就是不需要在远程主机上安装client/agents,因为它们是基于ssh来和远程主机通讯的。简单归纳一下:</p> <p style="background: white;line-height: 28px">Ansible</p> <p style="background: white;line-height: 28px;text-indent: 28px;margin-left: 28px">—基于 Python paramiko 开发,分布式,无需客户端,轻量级,配置语法使用 YMAL 及 Jinja2模板语言,更强的远程命令执行操作</p> <p style="background: white;line-height: 28px">类似的自动化运维工具有很多常用的还有:</p> <p style="background: white;line-height: 28px">Puppet</p> <p style="background: white;line-height: 28px;text-indent: 28px;margin-left: 28px">—基于 Ruby 开发,采用 C/S 架构,扩展性强,基于 SSL,远程命令执行相对较弱</p> <p style="background: white;line-height: 28px">SaltStack</p> <p style="background: white;line-height: 28px;text-indent: 28px;margin-left: 28px">—基于 Python 开发,采用 C/S 架构,相对 puppet 更轻量级,配置语法使用 YMAL,使得配置脚本更简单</p> <h2>Ansible<span style="font-family: 宋体">工作机制</span></h2> <p style="background: white;line-height: 28px">Ansible 在管理节点将 Ansible 模块通过 SSH 协议(或者 Kerberos、LDAP)推送到被管理端执行,执行完之后自动删除,可以使用 SVN 等来管理自定义模块及编排</p> <p><img title="1435911911139657.png" alt="ansible.png" src="//cto.wang/usr/uploads/2016/07/20160703165625-13.png" /></p> <p style="background: white;line-height: 28px">由上面的图可以看到 Ansible 的核心组件组成由 5 个部分组成:</p> <p style="background: white;line-height: 28px"> Ansible core: 核心;</p> <p style="background: white;line-height: 28px"> core Modules: 包括 Ansible 自带的核心模块及自定义模块;</p> <p style="background: white;line-height: 28px"> connect Plugins: 完成模块功能的补充,包括连接插件、邮件插件等;</p> <p style="background: white;line-height: 28px"> Playbooks: 网上很多翻译为剧本,个人觉得理解为编排更为合理;定义 Ansible 多任务配置文件,由 Ansible 自动执行;</p> <p style="background: white;line-height: 28px"> host Inventory: 定义 Ansible 管理主机的清单、主机池、主机列表;</p> <p style="background: white;line-height: 28px"> </p> <p style="background: white;line-height: 28px"><span style="font-size: 20px"><strong>一、ansible安装配置:</strong></span></p> <p style="background: white;line-height: 28px"><span style="font-size: 16px">1、yum安装ansible</span></p> <p style="background: white;line-height: 28px"> yum install ansible (ansible依赖于Python 2.6或更高的版本、paramiko、PyYAML及Jinja2。)</p> <p style="background: white;line-height: 28px">2、ansible的master/clinet认证方法:</p> <p style="background: white;line-height: 28px"> a、基于SSH密钥认账(默认认证)</p> <p style="background: white;line-height: 28px"> ssh-keygen -t rsa ssh-copy-id -i /root/.ssh/id_rsa.pub root@node1</p> <p style="background: white;line-height: 28px"> b、在inventory文件中制定用户名和密码认账</p> <p style="background: white;line-height: 28px"> 方法:vim /etc/ansible/hosts添加</p> <p style="background: white;line-height: 28px"> client_host ansibly_ssh_user=root ansible_ssh_pass=password</p> <p style="background: white;line-height: 28px">3、ansible配置hosts主机:</p> <p style="background: white;line-height: 28px"><img title="1460685881693837.jpg" alt="hosts.jpg" src="//cto.wang/usr/uploads/2016/07/20160703165625-50.jpg" /></p> <p style="background: white;line-height: 28px">4、ansible命令应用基础: </p> <p style="background: white;line-height: 28px"> 语法:ansible <host-pattern> [-f forks] [-m module_name] [-a args]<br /> -f启动多个个主机执行任务 -m要使用的模块 -a模块特有的参数</p> <p style="background: white;line-height: 28px"> </p> <p style="background: white;line-height: 28px"><span style="font-size: 20px"><strong>二、ansible常用模块:</strong></span></p> <p style="background: white;line-height: 28px">1、command:命令模块,默认模块,用于在远程执行命令,不支持变量。ansible 192.168.139.128 -a 'date' </p> <p style="background: white;line-height: 28px"><img title="1460682971840994.jpg" alt="ansible-date.jpg" src="//cto.wang/usr/uploads/2016/07/20160703165625-74.jpg" /></p> <p style="background: white;line-height: 28px">2、cron:计划任务模块:ansible 192.168.139.128 -m cron -a 'minute="*/10" job="/bin/echo "hell"" name="test job" '</p> <p style="background: white;line-height: 28px"><img title="1460683084465368.jpg" alt="cron.jpg" src="//cto.wang/usr/uploads/2016/07/20160703165625-71-1.jpg" /></p> <p style="background: white;line-height: 28px"><img title="1460683049879040.jpg" alt="client-cron.jpg" src="//cto.wang/usr/uploads/2016/07/20160703165625-100.jpg" /></p> <p style="background: white;line-height: 28px">3、user:用户管理模块:ansible webserver -m user -a 'name="node1" '</p> <p style="background: white;line-height: 28px"><img title="1460683619294110.jpg" alt="master-user.jpg" src="//cto.wang/usr/uploads/2016/07/20160703165625-57.jpg" /></p> <p style="background: white;line-height: 28px"><img title="1460683663480035.jpg" alt="client-user.jpg" src="//cto.wang/usr/uploads/2016/07/20160703165625-27.jpg" /></p> <p style="background: white;line-height: 28px">4、copy:远程复制模块</p> <p style="background: white;line-height: 28px"> a、复制文件至远程主机:ansible webserver -m copy -a 'src=/etc/motd dest=/tmp/moth owner=root mode=640'</p> <p style="background: white;line-height: 28px"> <img title="1460683815562193.jpg" alt="master-copy.jpg" src="//cto.wang/usr/uploads/2016/07/20160703165625-74-1.jpg" /></p> <p style="background: white;line-height: 28px"> b、往远程主机文件写入内容:使用content代替src。</p> <p style="background: white;line-height: 28px"> ansible webserver -m copy -a 'content="ansible test\n test" dest=/tmp/moth '</p> <p style="background: white;line-height: 28px">5、file:设置文件属性模块</p> <p style="background: white;line-height: 28px"> a、设置指定文件属性:ansible webserver -m file -a 'owner=mysql group=mysql mode=644 path=/etc/motd' </p> <p style="background: white;line-height: 28px"> <img title="1460683969928600.jpg" alt="file-master.jpg" src="//cto.wang/usr/uploads/2016/07/20160703165625-51.jpg" /></p> <p style="background: white;line-height: 28px"> <img title="1460684081371463.jpg" alt="client-file-link.jpg" src="//cto.wang/usr/uploads/2016/07/20160703165625-18.jpg" /></p> <p style="background: white;line-height: 28px">b、创建文件符号链接:ansible webserver -m file -a ' path=/tmp/motd.link src=/etc/motd state=link'</p> <p style="background: white;line-height: 28px"> <img title="1460684052567960.jpg" alt="file-link.jpg" src="//cto.wang/usr/uploads/2016/07/20160703165625-97-2.jpg" /></p> <p style="background: white;line-height: 28px"> <img title="1460684066227240.jpg" alt="client-file-link.jpg" src="//cto.wang/usr/uploads/2016/07/20160703165626-41.jpg" /></p> <p style="background: white;line-height: 28px">6、ping:测试指定主机网络是否通讯:ansible webserver -m ping </p> <p style="background: white;line-height: 28px"><img title="1460684434622763.jpg" alt="master-ping.jpg" src="//cto.wang/usr/uploads/2016/07/20160703165626-26.jpg" /> </p> <p style="background: white;line-height: 28px">7、service:指定服务状态模块管理(必须保证远程主机事先安装好指定服务)</p> <p style="background: white;line-height: 28px"> enableed:是否开机自动启动 true/false<br /> name:服务名称<br /> start:状态,取值为startd,stopd,restartd</p> <p style="background: white;line-height: 28px">ansible webserver -m service -a 'enabled=true name=httpd state=started'</p> <p style="background: white;line-height: 28px"><img title="1460684566913188.jpg" alt="httpd-service.jpg" src="//cto.wang/usr/uploads/2016/07/20160703165626-33.jpg" /></p> <p style="background: white;line-height: 28px">8、shell模块: 在远程主机上运行命令,支持管道、变量等在使用复制命令时使用。</p> <p style="background: white;line-height: 28px">ansible webserver -m shell -a 'echo password |passwd –stdin node1' </p> <p style="background: white;line-height: 28px"><img title="1460684733573350.jpg" alt="shell-master.jpg" src="//cto.wang/usr/uploads/2016/07/20160703165626-74.jpg" /></p> <p style="background: white;line-height: 28px">9、script:将本地脚步复制到远程主机上并运行(注意本地主机脚步路径使用相对路劲)</p> <p style="background: white;line-height: 28px">ansible webserver -m script -a "test.sh"</p> <p style="background: white;line-height: 28px"><img title="1460684874162000.jpg" alt="master-script-shell.jpg" src="//cto.wang/usr/uploads/2016/07/20160703165626-73.jpg" />10、yum:程序安装<br /> name:指定要安装的程序包,可以带上版本号 state:preset,laster表示安装最新,absent卸载</p> <p style="background: white;line-height: 28px"><img title="1460685164122414.jpg" alt="yum-master.jpg" src="//cto.wang/usr/uploads/2016/07/20160703165626-55.jpg" /><img title="1460685475663981.jpg" alt="yum-client1.jpg" src="//cto.wang/usr/uploads/2016/07/20160703165626-7.jpg" /></p> <p style="background: white;line-height: 28px">11、setup:收集远程主机的facts ansible hostname -m setup</p> <p style="background: white;line-height: 28px"> 每个被管理节点在接受并运行管理命令之前,会将自己主机相关信息,操作系统版本、ip地址等会报告给ansible主机<br /> 用于将状态报告给ansible主机直接调用其变量。</p> <p style="background: white;line-height: 28px">12、查看模块帮助命令:<br /> ansible-doc -l ansible-doc -s Modules 查看支持模块</p> <p style="background: white;text-align: right;line-height: 28px"> 感谢马哥,每天进步一点点! </p> 最后修改:2021 年 12 月 10 日 10 : 53 AM © 允许规范转载 赞赏 如果觉得我的文章对你有用,请随意赞赏 赞赏作者 支付宝微信