远行的心 发表于 2018-1-2 15:35:07

ansible + jenkins + 邮件

基础知识介绍
  1 什么是ansible
  ansible 是一种自动化运维工具 , 基于Python研发 。 糅合了众多老牌运维工具的优点实现了批量操作系统配置、批量部署、批量运行命令等功能。 仅需在管理工作站上安装 ansible 程序配置被管控主机的 IP 信息,被管控的主机无客户端。 ansible 应用程序存在于 epel( 第三方社区 ) 源,依赖于很多 python 组件。
  2、优点和特性
  (1)、agentless:不需要在被管控主机上安装任何客户端;
  (2)、ssh by default:基于SSH工作;
  (3)、no server:无服务器端,使用时直接运行命令即可;
  (4)、modules in any languages:模块化涉及,基于模块工作,可使用任意语言开发自定义模块;
  (5)、yaml,not code:使用yaml语言定制剧本playbook,只需要告诉被监控端的期望状态,不需要关注过程;
  (6)   具有幂等性,不会重复执行相同的指令。例如不会重复安装软件。
  3. 配置 文件:
  (1)ansible 应用程序的 主配置文件:/etc/ansible/ansible.cfg
  (2) Host定义管控主机 :/etc/ansible/hosts
  4.为何使用。
  1> 层级管理iplists.批量执行命令时,不用再花时间准备ip列表,以及进行ip处理。
  2> 比起手动编写脚本,不需要手动打印输出,及判断返回值。
  3 > 按分组做支付系统初始化,配置管理。
  5.安装方式
  配置fedoraepel 源后yum install -y ansible
  6.ansible 命令基本格式
  ansible<host-pattern>   [-m module_name][-a args]
  <host-pattern>
  指明需要操作的主机,以模式形式表示或者直接给定 IP ,必须事先定义在/etc/ansible/hosts文件中; all 设置所有
[-m module_name]
  使用何种模块进行操作,所有的操作都需要通过模块来指定
[-a args]
  指明模块专用参数; args 一般为 key=value 格式
  如 ansible all -m shell -a "uptime"
  获取所有主机已运行时间。
详细配置过程
一 > 整合zodiac ansible
  安装ansible
  编写shell脚本从 借贷宝 zodiac 运维管理系统 api接口获取当前 appid 与ip对应关系。
  并转化为ansible inventory 主机组配置文件格式。
  脚本会从api获取到所有appid中 状态为"online"的 iplist。
  配置cron自动执行,使ansible inventory与 zodiac中appid信息一致。
http://www.cnblogs.com/download/attachments/20189163/image2017-3-10%2017%3A50%3A29.png?version=1&modificationDate=1489139427000&api=v2
http://www.cnblogs.com/download/attachments/20189163/image2017-3-10%2017%3A51%3A13.png?version=1&modificationDate=1489139471000&api=v2
  脚本执行后会生成 分组策略inventory文件(文件路径/etc/ansible/hosts)
  从 zodiac自动同步a.b.c.d 层级结构。额外再加一级idc为五级结构。调用父主机组可以把下属子主机组IP调出来。
  结构类似 jdb.paycenter.payapi.tomcat.xy代表 支付中心- 支付网关-tomcat-晓月 所有机器
  备注:
  使用[]声明一个组名
  使用:children 关键字 声明下属的子组
  第一层 公司名称

  jdb.paycenter
  jdb.paycenter-beta (支付beta环境)
  .......
  第二层 公司名称-部门小组

  jdb.paycenter.acmcore
  jdb.paycenter.actcore
  ........
  第三层 公司名称-部门小组-业务系统

  jdb.paycenter.precard.nginx
  jdb.paycenter.precard.tomcat
  第四层 公司名称-部门小组-业务系统-应用种类
  jdb.paycenter.precard.nginx:children]
  jdb.paycenter.precard.nginx.xy
  jdb.paycenter.precard.nginx.yz
  第五层 公司名称-部门小组-业务系统-应用种类-idc信息

  100.95.0.55
  100.95.0.58
  .......

  100.95.0.55
  100.95.0.58
  可以结合常用模块,批量执行系统操作
  模块名:ping 不解释
  如 ansible all -m ping(ping模块不需要加-a 指定参数)
  解释:探测已配置在/etc/ansible/hosts里所有主机是否存活
  模块名:setup采集主机信息
  如 ansible jdb.paycenter-m setup -a 'filter=ansible_processor'
  解释:获取支付中心所有主机CPU核数。
  模块名 shell/cmd/raw   三个模块都可执行shell命令 (区别:cmd模块为基本命令执行模块,不支持变量,shell模块 为/bin/sh环境下执行。raw模块可使用管道"|")
  如 ansible jdb.paycenter.payorder.nginx -m shell-a 'hostname'
  解释:获取所有支付中心-订单系统 nginx主机名。
  模块名 script在每个远程主机执行本地脚本
  ansible jdb.paycenter.*.tomcat-m script -a '/opt/test.sh'
  解释:在支付中心-所有tomcat机器 执行本地/opt/test.sh 的脚本。
  模块名 copy 文件拷贝到远程主机
  ansible jdb.paycenter.payorder.nginx.xy-m copy -a 'src=/etc/resolv.conf dest=/etc/resolv.conf'
  解释:把本地/etc/resolv.conf 拷贝到 支付订单中心-nginx【1-5】晓月所有机器对应位置。
  ps ;主机组名支持正则匹配。
  ansible jdb.paycenter.*.*.xy   "free -g"
  在支付中心-所有idc为晓月机器 统计内存使用。
  ansible 100.93.1.8* -a "ntpdate xxip"
  批量同步100.93.1.80~89 的系统时间。
  按机器分组,编写playbook, 做状态统一。
  支付运维 部分play-book 解析
  1>初始密码,公钥,目录权限 配置统一                                                                执行效果
http://www.cnblogs.com/download/attachments/20189163/image2017-3-10%2020%3A17%3A31.png?version=1&modificationDate=1489148250000&api=v2      http://www.cnblogs.com/download/attachments/19406564/image2017-2-17%2018%3A1%3A50.png?version=1&modificationDate=1487325710000&api=v2
  2> falcon监控客户端配置管理
  完成以下功能:
  1 未安装falcon-agent 主机自动安装falcon-agent,并启动。
  2 已安装falcon-agent,但未启动进程的主机,自动启动进程。
  3 rsync falcon插件目录到所有机器。
  4 发现主机存在多falcon-agent进程的异常状态,杀掉所有falcon-agent 进程并重启服务。
http://www.cnblogs.com/download/attachments/19413033/image2017-2-21%2013%3A56%3A36.png?version=1&modificationDate=1487656596000&api=v2       http://www.cnblogs.com/download/attachments/19413033/image2017-2-21%2013%3A56%3A58.png?version=1&modificationDate=1487656618000&api=v2
二> 配置jenkins,整合jenkins ansible。
  部署jenkins。以管理员登入后,进入插件管理,安装ansible_plugin插件。
http://www.cnblogs.com/download/attachments/20189163/image2017-3-10%2018%3A22%3A12.png?version=1&modificationDate=1489141330000&api=v2
  把每个运维日常周期性工作(如 falcon,elk客户端部署,密码,公钥,文件权限,配置统一,日志备份,切割,系统校时相关任务的执行与检测等)
  配置成单独jenkins project。指定已写好的ansible-playbook路径。
  并在“构建触发器“栏选择 Build periodically 配置计划任务。让每个ansible 剧本 自动运行
http://www.cnblogs.com/download/attachments/20189163/image2017-3-10%2018%3A32%3A58.png?version=1&modificationDate=1489141976000&api=v2http://www.cnblogs.com/download/attachments/20189163/image2017-3-10%2018%3A43%3A52.png?version=1&modificationDate=1489142631000&api=v2
  3> 配置邮件通知
  配置
Editable Email Notification  日常运维任务 构建后,将结果邮件通知给运维支付组每个成员。
  日常运维 ansible-playbook 任务构建后效果
http://www.cnblogs.com/download/attachments/20189163/image2017-3-10%2018%3A54%3A18.png?version=1&modificationDate=1489143257000&api=v2
  如此便实现了一个 轻量级的支付系统配置管理平台。
页: [1]
查看完整版本: ansible + jenkins + 邮件