Ansible在运维工作当中的应用.



目录

Ansible在运维工作当中的应用... 1

一、        Ansible介绍... 2

1.     总体架构... 2

2.     特性... 2

3.     优点... 3

4.     任务执行流程... 3

二、        Ansible安装... 4

1.     Python2.7安装... 4

2.     安装Ansible. 5

3.     配置免密登录... 5

三、        Ansible配置... 5

四、        常用模块使用... 6

五、        运用实例:批量安装jdk1.7. 7

六、        高级应用:Playbook介绍... 8

1.     介绍... 8

2.     Rules. 9

 

 

一、   Ansible介绍

Ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。

1.  总体架构

Ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。主要包括:

(1)、连接插件connectionplugins:负责和被监控端实现通信;

(2)、hostinventory:指定操作的主机,是一个配置文件里面定义监控的主机;

(3)、各种模块核心模块、command模块、自定义模块;

(4)、借助于插件完成记录日志邮件等功能;

(5)、playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。

2.  特性

(1)no agents:不需要在被管控主机上安装任何客户端;

(2)no server:无服务器端,使用时直接运行命令即可;

(3)、modules inany languages:基于模块工作,可使用任意语言开发模块;

(4)、yaml,not code:使用yaml语言定制剧本playbook;

(5)、ssh bydefault:基于SSH工作;

(6)、strongmulti-tier solution:可实现多级指挥。

3.  优点

(1)、轻量级,无需在客户端安装agent,更新时,只需在操作机上进行一次更新即可;

(2)、批量任务执行可以写成脚本,而且不用分发到远程就可以执行;

(3)、使用python编写,维护更简单,ruby语法过于复杂;

(4)、支持sudo。

4.  任务执行流程

说明:

(1)、以上内容大多是基于他人分享的基础上总结而来,学习借鉴之用;

(2)、本次安装基于CentOS 6 系统环境。

二、   Ansible安装

Ansible

1.       Python2.7安装

1)        安装常用文件

yum -y groupinstall"Development tools"

yum -y installopenssl-devel zlib-devel ncurses-devel bzip2-devel readline-devellibtool-ltdl-devel sqlite-devel tk-devel tcl-devel wget vim lrzsz

2)        安装python

wgethttp://python.org/ftp/python/2.7.4/Python-2.7.4.tgz

tar -xvf Python-2.7.4.tgz

cd Python-2.7.4

./configure--prefix=/usr/local/python2.7

make

make install

mv/usr/bin/python /usr/bin/python.old

ln -s/usr/local/python2.7/bin/python2.7 /usr/bin/python

3)        修改yum配置(否则yum无法正常运行)

vim /usr/bin/yum

将第一行的#!/usr/bin/python修改为系统原有的python版本地址#!/usr/bin/python2.6

4)        添加环境变量

PATH=$PATH:/usr/local/python2.7/bin

5)        安装easy_install

pythonez_setup.py

easy_install--version

easy_install pip

pip –version

2.  安装Ansible

yum -y installepel-release

yum -y installansible

3.  配置免密登录

主控机ssh-keygen -t rsa

这时当前用户home目录下面会生成一对密钥,id_rsa为私钥,id_rsa.pub 为公钥。

(ls /root/.ssh)

传输公钥:你要控制几台机器,就把公钥拷到几台机器上,参考如下语句

ssh-copy-id -i/root/.ssh/id_rsa.pub [email protected]

ssh-copy-id -i/root/.ssh/id_rsa.pub [email protected]

4.       集中关闭selinux

ansible all -mshell -a "sed -i 's/SELINUX=enforcing/SELINUX=disabled/g'/etc/selinux/config"

ansible all -mshell -a "reboot"

三、   Ansible配置

Ansible需要配置一下你要操纵的机组

 vim/etc/ansible/hosts

定义方式:

定义一个主机组,把主机地址或主机名写进去,然后通过组名来调用这个组

[webservers]

192.168.14.129

192.168.14.128

……

 

保存后就配置完成。

Ansible语法:ansible 机组名 -m 模块 -a 执行的内容

简单测试一下:

ansiblewebservers -m ping

四、   常用模块使用

Ansible语法:ansible 机组名 -m 模块 -a 执行的内容

1)   Setup模块

用来查看远程主机的一些基本信息

ansiblestorm_cluster -m setup

2)        Ping模块

## 用来测试远程主机的运行状态

# ansiblestorm_cluster -m ping

3)        Copy模块

复制文件到远程主机

示例:将本地文件“/etc/ansible/ansible.cfg”复制到远程服务器

ansiblestorm_cluster -m copy -a "src=/etc/ansible/ansible.cfgdest=/tmp/ansible.cfg owner=root group=root mode=0644"

4)        Command模块

## 在远程主机上执行命令

相关选项如下:

ansible storm_cluster-m command -a "uptime"

5)        Shell模块

## 切换到某个shell执行指定的指令,参数与command相同。

这个模块与script不同的是,首先要将写好的sh脚本分发到机组,再执行

与command不同的是,此模块可以支持命令管道,同时还有另一个模块也具备此功能:raw。

示例:

先在本地创建一个SHELL脚本

vim/tmp/rocketzhang_test.sh

将创建的脚本文件分发到远程

ansiblestorm_cluster -m copy -a "src=/tmp/rocketzhang_test.shdest=/tmp/rocketzhang_test.sh owner=root group=root mode=0755"

远程执行

# ansiblestorm_cluster -m shell -a "/tmp/rocketzhang_test.sh"

6)        Script模块

用script模块可以实现到对象节点上执行本机脚本。有点类似copy+shell+删除copy的脚本的这样一个综合的功能。

ansible host32-m script -a /tmp/hello.sh

7)        更多模块

其他常用模块,比如:service、cron、yum、synchronize就不一一例举,可以结合自身的系统环境进行测试。

service:系统服务管理

cron:计划任务管理

yum:yum软件包安装管理

synchronize:使用rsync同步文件

user:系统用户管理

group:系统用户组管理

更多模块可以参考:

#ansible-doc –l

其中shell commandscript copy是我们最常用的四个模块

五、   运用实例:批量安装jdk1.7

使用ansible给三台机器同时安装jdk1.7,并配置环境变量

前提:主控机ansible安装好,host配置好受控机,jdk1.7的rpm包下载并放在主控机上。

操作步骤如下:

1)   将rpm包分发到受控机下

ansible all -m copy -a "src=jdk-7u80-linux-x64.rpmdest=/home/ owner=root group=root mode=0755"

2)        批量安装rpm包

ansible all -m shell -a "rpm -ivh/home/jdk-7u80-linux-x64.rpm"

3)        配置环境变量

ansible all -m shell -a "export JAVA_HOME=/usr/java/jdk1.7.0_80/"

ansible all -m shell -a"export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar"

ansible all -m shell -a "export PATH=$JAVA_HOME/bin:$PATH"

4)        查看jdk安装情况

ansible all -m shell -a "java -version"

六、   高级应用:Playbook介绍

playbook是由一个或多个”play”组成的列表。play的主要功能在于将事先归为一组的主机装扮成事先通过ansible中的task定义好的角色。从根本上来将,所谓的task无法是调用ansible的一个module。将多个paly组织在一个playbook中,即可以让他们联通起来按事先编排的机制同唱一台大戏。

1.       介绍

语法 ansible-playbookXXX.yml

Playbook剧本定义在一个yml文件中

1)   playbook基础组件

hosts playbook中的每一个paly的目的都是为了让某个或某些以某个指定用户的身份执行任务。hosts用于指定要执行指定任务的主机,其可以是一个或多个由冒号分割主机组。

user remote_user则用于指定远程主机上的执行任务的用户。

2)        任务列表

play的主体部分是tasklist. task list中的各任务按次序逐个在hosts中指定的所有主机上执行,即在所有主机上完成第一个任务后再开始第二个。

3)        action

任务执行过程

4)        handlers

用于当前关注的资源发生变化时采取一定指定的操作

2.  Rules

1)   ansible的roles介绍:

ansible的roles用于层次性、结构化地组织palybook。roles能够根据层次型结构自动装载变量文件、tasks及handlers等。要使用roles只需要playbook中使用include指令即可。

2)        rules的组成:

root@node1playbook]# tree  roles/

roles/ \\ansible所有的信息都放到此目录下面对应的目录中

└── nginx  \\角色名称

    ├── default  \\为当前角色设定默认变量时使用此目录,应当包含一个main.yml文件;

    ├── files  \\存放有copy或script等模块调用的文件

    ├── handlers \\此目录总应当包含一个main.yml文件,用于定义各角色用到的各handler

    ├── meta \\应当包含一个main.yml,用于定义角色的特殊设定及其依赖关系;1.3及以后版本支持

    ├── tasks \\至少包含一个名为main.yml的文件,定义了此角色的任务列表,可使用include指令

    ├── templates\\template模块会自动在此目录中寻找Jinja2模板文件

    └── vars  \\应当包含一个main.yml文件,用于定义此角色用到的变量

3.  运用实例:playbook批量安装运行tomcat

将解压后配置好的tomcat包放在file下面。

定义一个playbook文件main.yml

内容如下:

保存后执行:

执行结果如下:

虽然没有报错,我们还是要检查一下tomcat是否启动成功,依然使用ansible

服务启动成功。

使用playbook编写剧本有很大的拓展空间,网络上也有丰富的资料,有需要的话应该首先在网上看有没有现成写好的playbook来用,不需要第一时间手动编写。


你可能感兴趣的:(Ansible在运维工作当中的应用.)