设为首页 收藏本站
查看: 1322|回复: 0

[经验分享] ansible基础应用

[复制链接]

尚未签到

发表于 2018-7-29 13:58:46 | 显示全部楼层 |阅读模式
  一、运维主要工作
DSC0000.jpg

  ansible聚集以上功能于一身,能够完整轻易的实现应用部署和批量命令功能,适用于主机数量不太多,再大的用puppet。
  二、ansible特性
  (1)模块化:调用特定的模块,完成特定任务;
  (2)基于python语言实现,由paramiko,PYYAML和JINJa2三个关键模块组成
  (3)部署简单:agentless,被红帽收购,故备收入epel源
  (4)支持自定义模块
  (5)支持playbook(剧本)
  三、ansible组成+部署
  部署:yum -y install ansible
  配置文件:/etc/ansible/ansible.cfg
  主机清单:/etc/ansible/hosts
  主程序:ansible、ansible paly-book、ansible-doc
  四、准备工作
  1、主机(要管理的)纳入主机清单
  2、基于ssh的方式与要管理主机通信(密钥)
  (1)生成一对密钥:ssh-keygen -t rsa -f ~/.ssh/id_rsa -N ''
  (2)将公钥发给要管理的主机:ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.1.124
  3、然后进行我们的第一个ansible命令吧
  简单实用格式:ansible <host-pattern> [-m module_name] [-a args] [options]
  ping管理的所有主机:ansible all -m ping
DSC0001.jpg

  五、ansible的常用模块(用ansible-doc -l可以显示)
  (1)command模块:远程主机上运行命令
  例如:ansible webservers -m command -a "ls /var"
DSC0002.jpg

  ansible webservers -a "useradd user1",command模块可以省
  ansible webservers -a "echo magedu |passwd –stdin user1" ,不成功,不支持管道
DSC0003.jpg

  (2)shell模块:(管道可以用)远程主机在shell进程下运行命令,支持shell特性
  例如:ansible webservers -m shell -a "echo cwj1111|passwd –stdin user1"
DSC0004.jpg

  (3)copy模块:把文件复制到远程位置
  例如:ansible all -m copy -a "src=/etc/fstab dest=/tmp/fstab" 可以指明mode(权限),group(组),owner(主)。
DSC0005.jpg

  (4)cron:管理任务计划的
  minute=,day=,month=,weekday=,hour=,job=,name=(必须要给),state=
  例如:ansible all -m cron -a "minute=*/5 job=&apos;/sbin/ntpdate 192.168.1.109 &> /dev/null&apos; name=Synctime "
DSC0006.jpg

  在被管理主机上使用crontab -l便可以看到
  ansible all -m cron -a "state=absent name=Synctime" 就可以删除
  (5)fetch模块:拉取文件的(从远程主机上拉取文件到本地)
  ansible-doc -s fetch 查看
  (6)file模块:设定文件属性(属组,属主)
  例如:ansible all -m file -a "src=/tmp/fstab path=/tmp/fstab.link state=link"

  修改属性:path= ,owner= ,mode= ,group=
  创建目录:ansible all -m file -a "path=/tmp/tmpdir state=directory "
  (7)pip模块:管理python的模块
  (8)yum模块:用yum包管理,管理包
  例如:ansible all -m yum -a "name=httpd state=present"
DSC0007.jpg

  上面显示的是我已经装过了,就没有改变,现在我们卸载了看看:ansible all -m yum -a "name=httpd state=absent"
DSC0008.jpg

  在使用rpm看一下就没有了
DSC0009.jpg

  (9)service模块:管理服务
  name=,state=, started(启动),stopped(停止),restarted(重启), enabled=,runlevel=
  例如:先查看两台主机的80端口,再启动
  ansible all -m shell -a "ss -tnl |grep :80 "
  ansible all -m service -a "name=httpd state=started"
DSC00010.jpg

  启动之后:
DSC00011.jpg

  (10)user模块:管理用户,账号,组
  name=,system=,uid=,shell=,group=,groups=,home=,passwd=,remove=(state=absent,同时删除家目录)
  例如:ansible all -m user -a "name=user2 system=yes state=present uid=306 "
DSC00012.jpg

  (11)setup模块,收集变量
  六、ansible-playbook
  ansible使用YAML语法描述配置文件,YAML语法以简洁明了、结构清晰著称。ansible的任务配置文件被称为playbook,就是剧本,每个剧本里面包含一系列的任务,每个任务在ansible中又被称为“戏剧”(play)。
  (1)YAML语法格式
  数据结构可以用类似大纲的缩排方式呈现,结构通过通过缩进来表示,连续的项目可以通过减号“-”来表示,map结构里面的key/value对用冒号“:”来分隔。如下:
DSC00013.jpg DSC00014.jpg

  (2)例子
  先创建一个working文件夹,再cd到working里面,把yaml文件移到里面,创建一个files目录,把配置好的httpd.conf移到里面去,改一下监听端口,改成8080
  ansible-playbook –check web.yaml
  测试一下:
  启动:ansible all -m service -a "name=httpd state=restarted"
  ansible all -m shell -a "ss -tnl |grep :8080"
DSC00015.jpg

  (3)上面的有一个缺陷,我改动那个配置文件了怎么办,这个时候就要用handlers了
  在特定条件下触发;接收到其他任务的通知时被触发。Tasks中的任务都是有状态的,changed或者ok。 在Ansible中,只在task的执行状态为changed的时候,才会执行该task调用的handler。Handlers 最佳的应用场景是用来重启服务,或者触发系统重启操作.除此以外很少用到了。我改了配置文件要重启吧。
DSC00016.jpg

  (4)指定哪一出独唱用tags
  我只想运行playbook的某一步,其他的不运行
  (5)variables变量
  1、facts:可以直接调用
  2、ansible-playbook命令的命令行中可以自定义变量:-e 使用变量
DSC00017.jpg

  ansible-playbook -e pkname=memcached –check web2.yaml
  3、通过roles传递变量
  4、Host Inventory
DSC00018.jpg

  (6)模版templates:是一个文本文件内容嵌套脚本,是使用模版编程语言编程。
  Jinja2:
DSC00019.jpg

  template模块:基于模版方式生成一个文件复制到远程主机
  例子,
  (1)首先:ansible all -m setup | grep ansibleprocessorvcpus
DSC00020.jpg

  (2)在working/files/ 下,编辑一个epel源,这里我们直接wget 阿里的好了:wget -O working/files/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
  (3)复制过去:ansible all -m copy -a "src=files/epel.repo dest=/etc/yum.repos.d "
  (4)装上nginx:ansible all -m yum -a "name=nginx state=present "
  (5)创建模版文件:cp /etc/nginx/nginx.conf files/nginx.conf.j2
  vim files/nginx.conf.j2
  workerprocesses ` ansibleprocessor_vcpus `;
  (6)使用template将模版复制过去:
DSC00021.jpg

  好了,现在做的结果是让worker_processes跟cpu的内核数相等。它比copy更厉害的是,它配置的是模版文件,就像作文模版一样,可以根据你的需要配置吻合不同机器一个模版文件,而copy的文件是固定不变的。
  (7)条件判断,when语句,在task中使用,支持jinja2的语法格式
DSC00022.jpg

  (8)循环,迭代,我一下装好几个包
DSC00023.jpg

  文章来源:马哥教育
  官方微信:马哥linux运维
  技术交流群:485374463

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-543136-1-1.html 上篇帖子: Ansible学习笔记(六):Ansible使用时常见问题总结 下篇帖子: Ansible入门notify和handlers
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表