ansible 的一种结合 jenkins,zodiac的使用方法。

 

 

基础知识介绍

 

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.安装方式

配置fedora  epel 源后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信息一致。

 

脚本执行后会生成 分组策略inventory文件(文件路径/etc/ansible/hosts)

从 zodiac自动同步a.b.c.d 层级结构。额外再加一级idc为五级结构。调用父主机组可以把下属子主机组IP调出来。

结构类似 jdb.paycenter.payapi.tomcat.xy  代表 支付中心- 支付网关-tomcat-晓月 所有机器

备注:

使用[]声明一个组名

使用:children 关键字 声明下属的子组

 

第一层 公司名称

[jdb]

jdb.paycenter

jdb.paycenter-beta (支付beta环境)

.......

第二层 公司名称-部门小组

[jdb.paycenter:children]
jdb.paycenter.acmcore
jdb.paycenter.actcore

........

第三层 公司名称-部门小组-业务系统

[jdb.paycenter.precard:children]
jdb.paycenter.precard.nginx
jdb.paycenter.precard.tomcat

第四层 公司名称-部门小组-业务系统-应用种类

jdb.paycenter.precard.nginx:children]
jdb.paycenter.precard.nginx.xy
jdb.paycenter.precard.nginx.yz

第五层 公司名称-部门小组-业务系统-应用种类-idc信息

[jdb.paycenter.precard.nginx.xy]
100.95.0.55
100.95.0.58

.......

[jdb.paycenter.precard.nginx.yz]
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[1-5].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>  初始密码,公钥,目录权限 配置统一                                                                执行效果

      

 

2> falcon监控客户端配置管理

完成以下功能: 
1 未安装falcon-agent 主机自动安装falcon-agent,并启动。 
2 已安装falcon-agent,但未启动进程的主机,自动启动进程。 
3 rsync falcon插件目录到所有机器。 
4 发现主机存在多falcon-agent进程的异常状态,杀掉所有falcon-agent 进程并重启服务。 

       

 

 

二> 配置jenkins,整合jenkins ansible。

 部署jenkins。以管理员登入后,进入插件管理,安装ansible_plugin插件。

把每个运维日常周期性工作(如 falcon,elk客户端部署,密码,公钥,文件权限,配置统一,日志备份,切割,系统校时相关任务的执行与检测等)

配置成单独jenkins project。指定已写好的ansible-playbook路径。

并在“构建触发器“栏选择 Build periodically 配置计划任务。让每个ansible 剧本 自动运行

 

3> 配置邮件通知

配置

Editable Email Notification

日常运维任务 构建后,将结果邮件通知给运维支付组每个成员。

 

日常运维 ansible-playbook 任务构建后效果

 

 

如此便实现了一个 轻量级的支付系统配置管理平台。