ANSIBLE自动部署实践
Posted 平台云课堂
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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支持不同的连接方法,要是这样的话就需要连接插件来帮助我们完成连接了。
结合图中的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进行更深入的学习。
——//////////——
平台云课堂
为 科技人带来有价值有温度的阅读
以上是关于ANSIBLE自动部署实践的主要内容,如果未能解决你的问题,请参考以下文章