ansible基础-理解篇
1. 介绍
要说现在的部署工具,ansible可以说家喻户晓了。
ansible是一个开源软件,用于软件供应、配置管理、应用部署。ansible可以通过SSH、remote PowerShell、其他API进行通讯(from Wikipedia)。
因工作中有幸能接触到puppet和ansible,对两种部署工具也有了一定了解,而且这周参加了红帽Automation with Ansible培训与考试,学习的过程中感触良多,现总结下笔者对两种部署工具的理解,供大家参考。
2. ansible与puppet的对比
ansible和puppet之强大只有使用后才能体会得到。
通过使用这两种工具,给我的感觉,感性的概括下:ansible就像一把瑞士军刀,灵活,简单,快捷,比较适合中小规模集群管理;puppet就像一个成熟,稳定,功能齐全但略显笨重的大型武器。因为能通过一定手段横向扩展master,所以对集群规模适用性更加广泛。
关于puppet-master的高可用和横向扩展方法,可参考余兴超大佬的博客https://www.cnblogs.com/yuxc/p/3147320.html
在部署openstack上,后端服务我们使用的puppet部署,本着尽量避免自己造轮子的原则,核心组件基本用的社区现成的代码,自己写一个module去调用openstack核心模块作为统一出口。前端cmp(cloud manage platform)使用ansible部署,考虑到我们的cmp是由自己定制开发的,部署代码也是全部自己编写。
2.1 共同点
有过一些了解和使用后,会发现这两个部署工具有着很多相同之处。毕竟他们的作用与目的都是相同的,都是为了实现编排部署顺序与配置管理。
- 系统基础变量都使用fact获取(获取的方式不同)
- 执行方式都是server端实现编排,然后拷贝脚本或catalog到目的主机去执行
- 受管服务的配置文件都可以采用模版的方式进行管理
2.2 异同点
如果说puppet和ansible最大的区别就是架构设计上的区别,前者是c/s架构,后者是Serverless架构。也就是说puppet需要部署master和agent服务,而ansible只要有python环境和ssh就可以使用了,这也可以说是puppet的劣势。
其它区别:
- 编程语言不同,puppet使用ruby而ansible使用python
- 通信协议不同,puppet使用ssl加密协议而ansible使用ssh协议
- 任务执行顺序规则不同,puppet资源执行顺序默认是无序的,而ansible默认是按照task定义顺序执行
2.3 好与坏
ansible的优势:
- Serverless架构使ansible拿来即用,不需要再想办法部署server和agent,减少了准备阶段的时间成本
- CLI更加丰富,ansible可以对指定主机或主机组进行批量的命令行操作,非常灵活,而puppet不能
- 不用过于关心任务的执行顺序,因为task的书写顺序就是执行顺序,而puppet要对每个资源执行顺序进行指定
- 学习成本低,ansible的语法很通俗易懂,现有的core module已经够用了,而puppet需要对ruby有一定了解才能写type和provider
- 使用python和ssh协议给ansible带来了很大优势,因为这两个东西在流行的操作系统上是默认安装的
- ansible在社区的活跃度要比puppet高很多,例如openstack-ansible openshift-ansible项目等
上面说到puppet C/S架构的劣势,在工作中这里遇到一个痛点,在扩容计算节点时,总是要用ansible部署下puppet-agent服务和配置,对于部署agent的时间成本,我觉得ansible是有绝对优势的。
puppet优势:
- 执行结果的日志输出更加完善,ansible的报错是真的不太友好
- 自定义方法更加灵活,可以使用custom resource加template共同管理配置文件。如果擅长ruby可以在module里定义很多灵活的自定义资源,类似于配置nova.conf的nova_conf资源
- 变量存储位置比较集中,除了facter就是hieradate文件夹内,而ansible定义变量的位置比较多,这就要考虑优先级的问题,关于变量优先级,后序的文章“ansible基础-变量”会详细阐述
- puppet是比较老牌的部署工具,发展比较成熟,尤其是官档写的真心不错,有些企业早年使用了puppet并有了一定规模后,就不太愿意投入时间和人力替换到其他部署工具
3. ansible系列写作计划
接下来,在长达几周的时间里,笔者会根据“红帽DO407 Automation with Ansible”课程大纲和工作经验,总结和扩展下ansible相关的基础知识,列表如下:
- ansible基础-安装与配置
- ansible基础-playbooks
- ansible基础-变量
- ansible基础-task控制
- ansible基础-Jinja2模版
- ansible基础-roles
- ansible基础-加密
- ansible基础-优化
4. 参考链接
红帽DO407 Automation with Ansible 教材
(https://www.cnblogs.com/yuxc/p/3147320.html)
(https://docs.puppet.com)
(https://docs.ansible.com/ansible/devel/user_guide/intro.html)
(https://en.wikipedia.org/wiki/Ansible_(software))
欢迎大家关注我的公众号:
ansible基础-理解篇的更多相关文章
- ansible基础-安装与配置
一 安装 1.1 ansible架构 ansible是一个非常简单的自动化部署项目,由python编写并且开源.用于提供自动化云配置.配置文件管理.应用部署.服务编排和很多其他的IT自动化需求. an ...
- 一、Ansible基础之入门篇
目录 1. Ansible基础 1.1 介绍 1.2 工作原理 1.3 如何安装 1.3.1 先决条件 1.3.2 安装Ansible 1.4 管理节点与被管理节点建立SSH信任关系 1.5 快速入门 ...
- ansible基础-Jinja2模版 | 过滤器
Jinja2模版介绍 注:本文demo使用ansible2.7稳定版 在ansible基础-变量的「8.2 模版使用变量」章节中关于模版与变量也有所提及,有兴趣的同学可以去回顾一下. ansible通 ...
- ansible基础-roles
一 简介 注:本文demo使用ansible2.7稳定版 在我看来,role是task文件.变量文件.handlers文件的集合体,这个集合体的显著特点是:可移植性和可重复执行性. 实践中,通常我们以 ...
- ansible基础-playbook剧本的使用
ansible基础-playbook剧本的使用 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.YAML概述 1>.YAML的诞生 YAML是一个可读性高,用来表达数据序 ...
- 鸟哥Linux私房菜基础学习篇学习笔记2
鸟哥Linux私房菜基础学习篇学习笔记2 第九章 文件与文件系统的压缩打包: Linux下的扩展名没有什么特殊的意义,仅为了方便记忆. 压缩文件的扩展名一般为: *.tar, *.tar.gz, *. ...
- C# Xamarin移动开发基础进修篇
一.课程介绍 英文原文:C# is the best language for mobile app development. Anything you can do in Objective-C, ...
- DNA拷贝数变异CNV检测——基础概念篇
DNA拷贝数变异CNV检测——基础概念篇 一.CNV 简介 拷贝数异常(copy number variations, CNVs)是属于基因组结构变异(structural variation), ...
- iOS 动画基础总结篇
iOS 动画基础总结篇 动画的大体分类(个人总结可能有误) 分类.png UIView 动画 属性动画 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 1 ...
随机推荐
- Django-model
Model:数据库操作 创建数据库的表: django不能自动创建数据库,但能创建表 在web的models里定义生成表 在project的settings里设置app定义和数据库信息 步骤: 1.创 ...
- OpenCV-Python:霍夫变换
霍夫变换常用来在图像中提取直线和圆等几何形状.如下图: 我们下面来看看如何使用霍夫变换来检测直线.一条直线可以用数学表达式 y = mx + 或者 ρ = xcosθ + y sinθ表示(极坐标) ...
- cmake让add_subdirectory()的所有target生成到同一目录
问题描述和解决办法 整个项目包括: 库.测试程序,都是基于源码生成:测试程序肯定是executable类型了,而如果生成的库是SHARED类型,在windows下就是.dll(以及对应的.lib)文件 ...
- Python 实现整数线性规划:分枝定界法(Branch and Bound)
今天做作业,要实现整数线性规划的分枝定界法算法.找了一些网上的博客,发现都很屎,感觉自己写的这个比较清楚.规范,所以在此记录.如有错误,请指正. from scipy.optimize import ...
- Linux-网络基础
1.如何将俩台不同网络中的电脑通信,见下图
- 三、自动化测试平台搭建-django-如何用mysql数据库做web项目
从这节开始到后面说的大概内容如下: 这里说的是Django做一个web项目的大概框架,从下篇具体说Django中的模型(查询..),视图(请求,响应,cookie,session..),模板(验证码, ...
- ISP PIPLINE (十三) CSM/CSC(color space matrix/convert)
1.RGB为何要转换为YCbCr,历史遗留问题! 一般一个技术如果为了保证原有的设备可以继续使用,就需要兼容以前的技术.黑白电视到彩色电视的进化就是转换为YCbCr的原因,同时YCbCr比RGB传输占 ...
- CF719E. Sasha and Array [线段树维护矩阵]
CF719E. Sasha and Array 题意: 对长度为 n 的数列进行 m 次操作, 操作为: a[l..r] 每一项都加一个常数 C, 其中 0 ≤ C ≤ 10^9 求 F[a[l]]+ ...
- mac效率工具
前言:在命令行中切换目录是最常用的操作,我相信一遍又一遍重复“cd ls cd ls cd ls ……”绝对会让你抓狂. 记录一下,方便下次系统重装,哈哈 一. oh-my-zsh mac 预装了 z ...
- java中的异常(二)
异常的分类 在使用上 Error不用管他虚拟机错误 Exception必须要用catch抓 RuntimeExcption可以处理也可以不用处理 说明 Error:称为错误,由java虚拟机生成并抛出 ...