DevOps--Chef/Puppet
本文摘抄自:DevOps的概念与实践
目录
Chef/Puppet 只是DevOps工具链中的可选工具
仅靠Chef/Puppet本身无法实现Full-Stack部署自动化
两种实现方式
基于PaaS的实现方式 (以Cloud Foundry为例)
Netflix的实现方式
DevOps不仅仅是工具
DevOps是Agile的延伸,Agile依靠Dev & Biz部门紧密协作,通过增量交付的方式来解决需求多变的难题。DevOps则进一步延伸到IT运维,通过Dev & Ops的紧密协作提高软件交付的质量和频率。 人的重要性大于流程,流程的重要性大于工具。 这个结论适应于Agile,也适用于DevOps。 工具带来的影响是短期的、片面的,流程和人产生的影响是长期而全面的。
Chef/Puppet 只是DevOps工具链中的可选工具
DevOps的目的是打造标准化的、可重复的、完全自动化的Delivery Pipeline,其范围涵盖需求、设计、开发、构建、部署、测试、发布。除了需求、设计和开发,其他都是可以自动化的,自动化是提高可测试性、一致性、稳定性和交付频率的核心。
DevOps流程所需要用到的工具和环境有:
源代码版本控制工具: SVN、Git等
持续集成工具: Jenkins、 Bambo等
Artifact存储仓库:持续集成构建后的artifact 都统一放在一个仓库中,比如Nexus/Artifactory,也可以是FTP、S3等
配置和部署工具:Chef/Puppet/CFEngine, Fabric/ControlTier,也包括Docker等
Cloud Provision工具:在云环境下,由于任何IT Infra资源都以编程接口提供,意味着Full-Stack Automation成为了可能。Cloud Provision工具可以自己通过API构建,也可以直接使用IaaS服务商提供的扩展服务,也可以使用第三方工具,相当一部分 ,Cloud Provision本身也集成了Chef/Puppet来实现后续的部署和配置。
测试工具:传统测试工具,模拟Infra灾难、验证系统健壮性的工具,如Netflix的Chao Monkey
发布工具:一般情况下,需要DTAP四个环境:开发、测试、Staging、生产。每种环境的作用、部署方式、代码版本等是不一样的。
云基础设施:包括AWS/Azure等公有云,CLoudstack/OpenStack等私有云
仅靠Chef/Puppet本身无法实现Full-Stack部署自动化
如果要实现Full-Stack Automation,需要实现环境创建自动化、软件安装和配置自动化、应用部署和配置自动化、监控和告警自动化、故障检测和恢复自动化、扩展自动化。
环境创建:创建VMs、网络、存储、负载均衡,协调不同角色VMs的创建过程和配置
软件安装和配置:操作系统配置,基础软件安装和配置,这些软件的特点是变动不频繁。对Chef/Puppet来说,这个步骤的自动化是最擅长的,提供大量现成的Recipes,并抽象各种异构系统之间的差异
应用部署和配置:部署应用代码,这部分代码的变动是频繁的。另外,对于复杂的系统来说,如果保证升级期间系统的可用性,系统的各个应用组件需尽量是无状态和松耦合的。如果系统的组件之间是有依赖的,那么升级期间必须动态地协调、控制好相关组件的行为。
监控和告警:包括OS级别和应用级别的可用性和性能监控。如果发现异常,需要能够自动发出告警信息。
健康检查和恢复:为了应付云基础设施故障,系统需要Design By Failure。在异常发生时,系统可以发现并进行自动处理。
自动伸缩:一般情况下,业务存在高峰期和低估期。为了节约成本,系统应该是可以自动伸缩的。
每一步都有工具来实现自动化,但实现Full-Stack 部署自动化不是通过简单的拼凑工具就可以的。
两种实现方式
基于PaaS的实现方式 (以Cloud Foundry为例)
- 环境创建:用户不需要创建物理资源环境,Cloud Foundry 会自动创建并分配资源给各个租户,用户无法控制底层OS等
- 软件安装和配置:用户不需要软件安装,Cloud Foundry已经安装好相关软件,但支持的类型和版本有限。
- 应用部署和配置:Cloud Foundry提供接口,用户调用接口进行应用部署和配置。应用类型必须是Cloud Foundry支持的,只能进行有限的配置,如Tomcat的配置参数等
- 监控和告警:Cloud Foundry提供监控服务,但Metric类型有限,无法支持自定义Metric
- 健康监测和恢复:Cloud Foundry 提供Container级别的健康监测和恢复
- 自动伸缩:基于Cloud Foundry提供的monitoring接口和应用控制接口,可以实现instance级别的自动伸缩
Cloud Foundry基本实现了所有自动化步骤,应用开发人员只需专注应用逻辑本身的开发,但Cloud Foundry也限制了用户的选择权和控制权,特别是大型的、复杂的、分布式系统,开发人员需要的是Full-Stack可控制性
Netflix的实现方式
- 环境创建:通过自己研发的Asgard管理和部署工具实现
- 软件安装和配置:基础软件和配置都打包成AMI,基于Netflix自己的打包工具Aminator
- 应用部署和配置:同上,应用代码和配置也打包进AMI
- 监控和告警:Leverage AWS Cloudwatch, 同时也将通过自己开发的Servo Lib将custom metric发送至Cloudwatch
- 健康监测和恢复:Leverage Atoscaling group, 健壮性测试有Netflix自己开发的Chaos Monkey工具
- 自动伸缩:Leverage AWS AutoScaling group
Netflix除了Leverage AWS的CloudWatch/Auto Scaling Group/ ELB等服务外,自己也开发了一系列工具完成Full-Stack部署自动化。这些工具通过Asgard这个可视化云管理和部署控制台集成起来。 另外,Deployable image这种部署模式虽可简化部署并确保一致性,但一部分复杂性转移到了应用层面。系统的各个组件是无状态和松耦合,同时还需要Eureka这种服务来实现中间层的负载和failover。
Cloud Foundry和Netflix都没有用到Chef/Puppet。
DevOps--Chef/Puppet相关推荐
- 运维管理工具+chef+puppet+ansible+SaltStack
运维管理工具+chef+puppet+ansible+SaltStack Puppet.Chef.Ansible和SaltStack让用户极容易配置和维护数十台.数百台.乃至数千台服务器.这倒不是说小 ...
- 最佳DevOps工具获奖者:CloudBees Jenkins平台
最新一期<IT新架构>宣布了第三届影响力奖的最终结果.这些获奖的产品和技术由我们读者.行业专家和编辑人员参与投票评选,并且预计将对2016年的IT运营产生显著影响.首先向所有的获胜者表示祝 ...
- DevOps的前世今生
2019独角兽企业重金招聘Python工程师标准>>> 目前在国外,互联网巨头如Google.Facebook.Amazon.LinkedIn.Netflix.Airbnb,传统软件 ...
- DevOps平台中的自动化部署框架设计
本文目录: 一.背景 二.我们的需求是什么? 三.概念澄清 四.概念模型 五.总体设计 六.关键点设计 七.总结 一.背景 说到自动化部署,大家肯定都会想到一些配置管理工具,像ansible,chef ...
- 从技术雷达看DevOps的十年 – 基础设施即代码和云计算
在上一篇文章中,我们讲到了 DevOps 和持续交付的关系.本篇将回顾最先改变运维工作的相关技术 -- 基础设施即代码和云计算,通过技术雷达上相关条目的变动来跟踪其趋势变化. 和持续交付一样,基础设施 ...
- 容器时代的DevOps部署
转载本文需注明出处:微信公众号EAWorld,违者必究. 本文目录: 一.企业应用的部署发展 二.普元容器云与DevOps的部署设计 三.面向微服务的部署设计 四.容器组装化部署 五.容器云集成之路 ...
- 性能测试之Devops相关
目录 1. 什么是Devops 1.1 定义 1.2 核心思想 1.3 主要特点 2. Devops的价值 3. Devops的技术栈与工具链 4. Devops落地实现 5. Devops与敏捷 [ ...
- DevOps专题|Packer使用教程
什么是Packer 简单介绍一下自己 Packer 是一个轻量命令行工具, 能在几乎所有主流的操作系统上运行. 在给定一份配置文件的情况下, Packer 能为多种系统架构创建云主机镜像.同时 Pac ...
- Elasticsearch Top 51 重中之重面试题及答案
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 铭毅天下 来源 | https://mp.we ...
- 苏宁海量服务器自动化配置运维实践
运维的演进 人力运维阶段 在IT产业的早期,服务器运维是通过各种Ad Hoc命令或者Shell脚本来完成基础设施的自动化工作,这种方式对于简单,一次性的工作很方便,但是对于复杂和长期的项目,后期的脚本 ...
最新文章
- python程序员总结的一些基本语法
- [译][python]ImportError:attempted relative import with no known parent package
- win7系统启动到一半停止_win7系统启动一半死机的解决方法
- 分区式存储管理算法实现_穿梭式自动化立体库的种类和特点有哪些?
- 一个深度学习痴呆选手对AlexNet网络架构的一些理解
- icmp协议_CCNA - Part7:网络层 - ICMP 应该是你最熟悉的协议了
- esxi5.1 添加vSwitch,转VM network to new vSwitch
- 关于简历:怎样才叫熟悉/精通Linux?
- Azure 中 Windows 虚拟机的大小
- lua redisson执行lua脚本
- 中文 NLP(5) -- 宾州树《汉语词性标注规范》
- 漏洞修复:Cache Management: Insecure Policy
- java facet 是什么_eclipse中project facet问题
- Cause: org.postgresql.util.PSQLException: 错误: 对于可变字符类型来说,值太长了(255)
- 通过阿里云API查询账户余额
- CSS-背景图片 | background-image
- Apple Pay线上支付的流程和app应用内接入的方法
- LeetCode刷题(python)——476. 数字的补数
- linux pdf转视频教程,Linux下PDF操作与转换
- linux 命令查询主机名,主机名命令,linux查看主机名命令