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

[经验分享] Ansible & Ansible-playbook部署使用详解

[复制链接]

尚未签到

发表于 2018-1-2 13:33:18 | 显示全部楼层 |阅读模式
  Ansible & Ansible-playbook使用详解
  自动化类别:
  OS Provisioning(系统安装部署)
  PEX,cobbler(PEX的升级版)
  OS config(主机的配置文件修改)
  cfengine,puppet,saltstack,chef
  Deployment(多台主机的部署方式)
  func(ssl)
  fabric(ssh)
  ansible(ssh)
  __Ansible模块__
  Core Modules(核心模块)
  Custom Modules(自定义模块)
  Plugins(email,logging,other)(执行完毕后通过邮件或记录的日志方式存档)
  Playbook(任务剧本)
  Connection Plugins
  Host Inventory(主机池、分组)
  Ansible安装____
  安装环境如下:
  服务器2台
  操作系统:centos6.8 x64
  ip地址分配情况:
  ansible分发端:172.18.119.102
  被部署端:172.18.119.112
  软件下载:
  https://pkgs.org/centos-6/epel-i386/ansible1.9-1.9.6-2.el6.1.noarch.rpm.html
  Ansible install:
  注意:Ansible是基于python开发的,有很多的以来的包需要安装,这边我们使用epel的yum的方式安装
  1、Download the latest epel-release rpm from
  http://dl.fedoraproject.org/pub/epel/6/i386/
  2、Install epel-release rpm:
  # rpm -Uvh epel-release*rpm
  3、Install ansible1.9 rpm package:
  # yum install ansible1.9
  ————————————————
  设置ssh免密钥分发到client
  1、#ssh-keygen -t rsa -P ''
  2、ssh-copy-id -i  ~/.ssh/id_rsa.pub root@172.18.119.112
  Ansibled 配置文件
  /etc/ansible/host
  注释已有的主机列表示例,行添加一行主机或者主机组的方式:
[clients]

  172.18.119.112
  ______________
  Ansible使用手册及案例
  基本语法格式:
  ——————————————————
  ansible <host-pattern> [-f forks] [-m module_name] [-a args]
  基本案例使用
  ————————————————
  1、探测指定主机或者所有主机是否在线:
  ansible 172.18.119.112 -m ping或者ansible all -m ping
  .参数m:指定使用的模块(命令:ansible-doc -l可查看ansible支持的所有模块)
  eg:
[iyunv@server ansible]# ansible 172.18.119.112 -m ping

  172.18.119.112 | success >> {
  "changed": false,
  "ping": "pong"
  }
  2、探测指定主机或者所有主机的时间是否一致:
  ansible all -a 'date'
  eg:
[iyunv@server ansible]# ansible all -a 'date'

  172.18.119.112 | success | rc=0 >>
  Tue Dec 20 17:01:56 CST 2016
  3、检查指定主机的nginx服务的运行状态:
  eg:
[iyunv@server ansible]# ansible all -a 'service nginx status'

  172.18.119.112 | FAILED | rc=3 >>
  nginx 已停
[iyunv@server ansible]# ansible all -a 'service nginx status'

  172.18.119.112 | success | rc=0 >>
  nginx (pid  26668) 正在运行...
  4、把本地安装包复制到被部署的服务器的opt目录上去:
  ansible-doc -s copy可以查看模块可以使用的参数;
  eg:
[iyunv@server opt]# ansible 172.18.119.112 -m copy -a "src=/opt/ansible1.9-1.9.6-2.el6.1.noarch.rpm dest=/opt/"

  172.18.119.112 | success >> {
  "changed": true,
  "checksum": "3f900edf50b32f557bf4286b47ecf0fa64fd4a67",
  "dest": "/opt/ansible1.9-1.9.6-2.el6.1.noarch.rpm",
  "gid": 0,
  "group": "root",
  "md5sum": "e84e5001b0718336f3834ce38c86f08b",
  "mode": "0644",
  "owner": "root",
  "size": 1844424,
  "src": "/root/.ansible/tmp/ansible-tmp-1482227767.15-125559515403616/source",
  "state": "file",
  "uid": 0
  }
  检查是否copy成功:
[iyunv@server opt]# ansible 172.18.119.112 -a 'ls /opt'

  172.18.119.112 | success | rc=0 >>
  ansible1.9-1.9.6-2.el6.1.noarch.rpm
  5、为所有的主机设置个定时任务(每3分钟执行一次时间同步):
  eg:
[iyunv@server opt]# ansible all -m cron -a 'name="custom jobs" minute=*/3 hour=* month=* weekday=* job="/usr/sbin/ntpdate 172.18.119.1"'

  172.18.119.112 | success >> {
  "changed": true,
  "jobs": [
  "custom jobs"
  ]
  }
  检查一下定时任务是否添加成功:
[iyunv@server opt]# ansible all -a 'crontab -l'

  172.18.119.112 | success | rc=0 >>
  #Ansible: custom jobs
  */3 * * * * /usr/sbin/ntpdate 172.18.119.1
  6、为所有主机添加一个mysql的系统组:
  eg:
[iyunv@server ~]# ansible all -m group -a 'name="mysql" gid=700 system=yes'

  172.18.119.112 | success >> {
  "changed": true,
  "gid": 700,
  "name": "mysql",
  "state": "present",
  "system": true
  }
  7、使用yum方式为所有主机安装程序包;
  eg:
  172.18.119.112 | success >> {
  "changed": true,
  "msg": "",
  "rc": 0,
  "results": [
  "Loaded plugins: fastestmirror, security\nSetting up Install Process\nLoading mirror speeds from cached hostfile\n ....信息该多省略;
  检查是否安装成功:
[iyunv@server opt]# ansible all -a "rpm -qa corosync"

  172.18.119.112 | success | rc=0 >>
  corosync-1.4.7-5.el6.x86_64
  8、设置主机上的nginx服务为开机启动:
  eg:
[iyunv@server ~]# ansible all -m service -a 'state="started" name="nginx" enabled="yes"'

  172.18.119.112 | success >> {
  "changed": true,
  "enabled": true,
  "name": "nginx",
  "state": "started"
  }
  检查nginx开机启动是否设置成功:
[iyunv@server ~]# ansible all -a 'chkconfig --list nginx'

  172.18.119.112 | success | rc=0 >>
  nginx          0:off1:off2:on3:on4:on5:on6:off
  以上的使用方式,在生产环境尽然,我们有时候需要安装软件同时配置其配置文件 并设置计划任务等等,混合部署
  那么这样单一的去一条一条执行命令比较繁琐,也不太现实,这里我们引入了一个叫 ansible中playbook的插件,我们称之为ansbilbe任务剧本
  或者叫 剧本队列。
  Playbook详解:
  ————————————
  依赖的语言YAML
  YAML是一个可读性高的用来表达资料序列的格式,YAML参考了其他的多重语言,它不是xml。
  YAML的特点:
  可读性好
  脚本语言交互性好
  基于流来处理
  扩展性号
  有一个一致的信息模型
  YAM的语法
  eg:
  name:kuaiwenwu
  age:41
  gender:Male
  spouse:
  name:Yaru.wang
  age:37
  gender:sales
  children:
  -name:kuaixiaoduo
  age:weichusheng
  gender:baby
  -name:kuaianqi
  age:weichusheng
  gender:baby
  Ansible playbooks实例:
  ——————————|———————————
  - hosts:webserver
  vars:
  http_port: 256
  max_clients: root
  remote_user: root
  tasks:
  - name:ensure nginx is at the latest version
  yum:name=nginx state=latest
  name:ensure nginx is running
  service:name=nginx state=started
  handlers:
  - name: restart nginx
  service:name=nginx state=restarted
  接下来我们写个ansible-paly方式的yaml脚本来感受下;
  脚本的名称:test.yaml
  脚本代码:
  - hosts: all    (指定的主机为所有的主机,这里也可以写上我们之前hosts配置文件定义的主机组名称,- 和hosts;和面的all 必须是有空格)
  remote_user: root (指定远程主机以root用户执行任务)
  tasks:     (注意这里不能写host而是hosts)
  - name: add a group任务名称
  group: gid=800 name=testgroup system=no添加组的参数 不需要加""
  - name: excute a command任务描述或者名称
  command: /bin/date执行的命令
  看看执行后返回的状态:
[iyunv@server ansible]# ansible-playbook test.yaml  (YAML脚本的执行方式)

  PLAY [all] ********************************************************************
  GATHERING FACTS ***************************************************************
  ok: [172.18.119.112]
  TASK: [add a group] ***********************************************************
  changed: [172.18.119.112]
  TASK: [excute a command] ******************************************************
  changed: [172.18.119.112]
  PLAY RECAP ********************************************************************
  172.18.119.112             : ok=3    changed=2    unreachable=0    failed=0
  注意:
  remote_user字段可以用于tasks的任务列表中
  eg:
  - hosts:webserver
  remote_user:eason
  task:
  - name:test connection
  ping:
  remote_user:eason
  sudo:yes

运维网声明 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-430800-1-1.html 上篇帖子: ansible-copy 下篇帖子: Ⅰ. Playbook介绍
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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