ANSIBLE自动部署实践

ANSIBLE自动部署实践

Ansible是什么

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

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

Ansible特性

下面介绍下Ansible的主要特性:

1.模块化:调用特定的模块,完成特定任务

2.支持自定义模块

3.基于Python语言实现

4.部署简单,基于python和SSH(默认已安装),agentless

5.安全,基于OpenSSH

6.支持playbook编排任务

7.幂等性:一个任务执行1遍和执行n遍效果一样,不因重复执行带来意外情况

8.可使用任何编程语言写模块

9.YAML格式,编排任务,支持丰富的数据结构

10.较强大的多层解决方案

Ansible架构

先来看看这张架构图,看起来是不是很简单,先就各个组成部分做一个简单的说明。

1.核心引擎:即图中所看到的Ansible。

2.核心模块(Core Module):和大多数运维工具一样,将系统和应用提供的能力模块化,一个模块有点像编程中一个功能接口,要使用的时候调用接口并传参就可以了。比如Ansible的service模块,你要保证名为nginx的service处于启动状态,只需要调用service模块,并配置参数name: nginx,state: started即可。

3.自定义模块(Custom Modules):显而易见,如果Ansible的核心模块满足不了你的需求,你可以添加自定义化的模块。

4.插件(Plugins):模块功能的补充,如循环插件、变量插件、过滤插件等,也和模块一样支持自定义,这个功能不常用。

5.剧本(playbooks):说到这个,先说说Ansible完成任务的两种方式,一种是Ad-Hoc,就是ansible命令,另一种就是Ansible-playbook,也就是ansible-playbook命令。他们的区别就像是Command命令行和Shell Scripts,比如,要在远程主机上安装nginx或许一条命令ansible apps -m yum -a “name=nginx state=present”,但是要进行一个完整的nginx安装配置启动的固化流程性质的操作,最好写成一个playbooks(可以看作是任务的合集)。

6.连接插件(connectior plugins):Ansible默认是基于SSH连接到目标机器上执行操作的。但是同样的Ansible支持不同的连接方法,要是这样的话就需要连接插件来帮助我们完成连接了。

7.主机清单(host inventory):为Ansible定义了管理主机的策略。一般小型环境下我们只需要在host文件中写入主机的IP地址即可,但是到了中大型环境我们有可能需要使用静态inventory或者动态主机清单来生成我们所需要执行的目标主机。

结合图中的Cloud元素提一提Ansible的host inventory和SSH,Ansible默认是基于SSH连接到目标机器上执行操作,这样就需要目标主机上有一个用户用来执行Task中定义的操作,在cloud环境中可以在镜像内置用户和公钥,然后通过调用云主机供应商提供的脚本动态生成host inventory。这样对主机的管理提供了很大的方便。

Ansible工作流程

简单理解就是Ansible在运行时,首先读取ansible.cfg中的配置,根据规则获取Inventory中的管理主机列表,并行地在这些主机中执行配置的任务,最后等待执行返回的结果。

Ansible实践

接下来给大家介绍一下Ansible部署微服务应用的具体案例:

01.基本配置

安装Ansible:

# yum install epel-release.noarch -y

# yum install ansible pyOpenSSH –y

Ansible修改配置:

修改Ansible的hosts文件添加机器及ssh相关配置

# vi /etc/ansible/hosts

10.15.15.88

ansible_ssh_port=2849

ansible_ssh_user=deploy

ansible_ssh_private_key_file=/opt/ansible-deploy.pem

验证连接:

返回如下信息则配置通过

# ansible all -m ping

20.5.193.201 | SUCCESS => {

"changed": false,

"ping": "pong"

}

02.微服务应用部署实践

剧本概述:

site.yml定义了我们要连接的服务器、我们希望执行的角色。将各类事项列在这里,Ansible将通过此文件中设置的顺序来执行角色。

deploy.inventory定义了一些变量,方便执行脚本中时使用:

Jdk角色:用来提供java运行的基础环境

Nginx角色:用来安装nginx的基础环境

Nginxweb角色:前端应用的安装部署

Springboot角色:后端应用的安装部署

Jdk的yml示例:

剧本执行:

ansible-playbook –i deploy.inventory site.yml

Ansiber创建了与目标主机的连接,并开始执行各种角色与任务。

由此可见,jdk、nginx等按照剧本完成执行安装。安装完成效果如下:

至此我们完成了基于Ansible部署微服务应用的前后端应用的部署,让大家对ansible也有了基本的认知,欢迎大家对ansible进行更深入的学习。

——//////////——

平台云课堂

为邮储科技人带来有价值有温度的阅读

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180829G1HXIQ00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券