云时代基础设置自动化管理利器: Chef
云时代的到来势不可挡。尤其作为程序员,我们每天或多或少的直接或间接的使用者各种云服务。云平台有很多种,如云软件(SaaS, Software as a service)、云平台(PaaS, Platform as a service)、云设备(IaaS, Infrastructure as a service)。云计算由于其价格低廉、按需提高、使用方便等特点,越来越受到人们的欢迎。
Chef是什么?
Chef的出现正是顺应了云潮流。如果你是一个公司的devops成员,每天配置服务器上的软件和服务,为了给服务器新加一个节点而通宵作业,为了解决服务器上的一个奇诡问题而想破脑袋。
这时候,你应该考虑使用Chef。
Chef is built to address the hardest infrastructure challenges on the planet. By modeling IT infrastructure and application delivery as code, Chef provides the power and flexibility to compete in the digital economy.
通过这段话,可以总结出Chef的几个特点。
Chef是为了解决基础设施难题。
Chef通过建模将基础设施及应用程序交付抽象为代码。
Chef具有强大的能力及灵活性.
- 由于配置即代码,基础设施即代码,Chef自动具有了版本控制功能,同时添加复制服务器也变得更容易。
Chef主要包括三大块:Workstation、Chef Server、Chef Client。(另外还有个chef-solo,是个简化版的Chef-Client,不在本文讨论范围。)
以下是Chef的架构图。
Workstation
Workstation可以简单地认为是自己的工作电脑,在上面需要建立一个chef-repo。chef-repo管理了cookbooks、recipes、roles、environment等数据。cookbooks、recipes、roles是Chef对infrastructure做的一层抽象。可以打个这样的比喻,cookbooks可以理解为一个菜系,recipes就是这个菜系里面的一道道菜,比如宫保鸡丁,roles则是一桌丰富的宴席,比如满汉全席。而nodes则是一个个盛菜的桌子。我们可以来一个满汉全席(直接给这个node设置一个role),也可以从菜系里抽一些菜品来做一到家常小菜(给指定node设置一个run list,里面包括指定的recipe)。recipe就是一系列的资源,比如在node上需要安装jvm,那么安装jvm的包就是一个recipe。
在Workstation上主要通过knife这个命令行工具来创建和管理这些资源。
1 |
|
knife是由ruby写的一个gem。它的API很有表现力。
1 |
|
在cehf-repo下需要建立一个隐藏的文件夹.chef,该文件夹中包含三个重要的文件:USER.pem, ORGANIZATION-validator.pem, knife.rb。USER.pem是一个私钥,用于workstation与chef server通讯。ORGANIZATION-validator.pem是另一个私钥,用于bootstrap一个新node时该node第一次与服务器通讯。knife.rb则是knife的配置的文件,比如客户端key文件路径,chef server的api地址,cookbook的路径等。
Chef Server
Chef Server用来存储workstaton上传的各种资源,包括cookbooks,roles,environments,nodes等。我们可以使用公有的Server,如opscode,也可以通过开源软件架设自己的私服。Chef server提供了一系列的api,用于与workstation和nodes传输资源和数据。opscode上的server需要注册,注册以后需要建立一个organisation, 并从server上下载生成的USER.pem私钥和ORGANISATION-validitor.pem私钥。Chef server也提供了一个search的API,可以通过workstation根据attributes检索注册在服务器上的node。
Chef Server本来是使用ruby写的,后来为了保持高并发和稳定性,能够同时服务一定数量级的node,Chef Server内核采用了支持高并发的Erlang程序,而前端则仍然使用ruby on rails。
Nodes
在bootstrap一个node时候,首先需要在该node上安装chef-client包,并将workstation上的ORGANIZATION-validator.pem文件拷贝到node节点上,供node与chef server建立连接。chef server通过验证后会发给node一个新的私钥,以后node就可以通过这个新的私钥与chef server交互。在node的etc\chef
的目录下会生成四个文件:client.pem, client.rb, first-boot.json, validation.pem。vlidation.pem就是从workstation拷贝过来的秘钥,client.pem则是服务器为该node新生成的秘钥,client.rb则定义了服务器的API地址,秘钥文件路径等信息,first-boot.json则存放了bootstrap该node节点时的配置信息,如run list信息,role信息等。
chef-client是一个可定期的后台运行的命令行程序。chef-client会收集当前node的各种信息,如操作信息型号版本等,和chef server建立连接,获取chef server上对该节点的配置信息,并安装指定的recipe,运行指定的服务。
通过Chef,可以一键更新所有的服务器,在指定的服务器上安装指定的软件。如果有新同事入职,可以很轻松的setup一台开发机;如果服务器节点需要扩展,也只需要几个命令就可搞定。运筹帷幄,一切皆在掌控之中。
云时代基础设置自动化管理利器: Chef的更多相关文章
- 云时代IDC自动化运维的几大神器
云时代IDC自动化运维的几大神器 2016年09月18日 10:27:41 天府云创 阅读数:1715 版权声明:本文为EnweiTech原创文章,未经博主允许不得转载. https://blog ...
- 干货 | 运维福音——Terraform自动化管理京东云
干货 | 运维福音--Terraform自动化管理京东云 原创: 张宏伟 京东云开发者社区 昨天 Terraform是一个高度可扩展的IT基础架构自动化编排工具,主张基础设施即代码,可通过代码集中管 ...
- Apsara Clouder云计算专项技能认证:云服务器基础运维与管理
一.三个理由拥抱云服务器 1.课程目标 如何拥有一台属于自己的ECS 出现一些问题的时候,对这台云服务器进行很好的管理 如何保证一台云服务出现问题的时候提前进行防范 2.云服务的定义 云服务器(Ela ...
- ZeroMQ:云时代极速消息通信库
ZeroMQ:云时代极速消息通信库(大规模|可扩展|低成本|高效率解决之道,大规模分布式|多线程应用程序|消息传递架构构建利器) [美]Pieter Hintjens(皮特.亨特金斯)著 卢涛 李 ...
- ibm云时代的转型
好几个月了,有两个说法很流行. 第一个说法,是老有人嚷嚷思科快被SDN整趴下了:第二个说法,是老有人嚷嚷IBM在云计算时代完全落后了,要倒下了. 刚开始我还跟有些人辩论: 1.裁员是西方企业常用的战略 ...
- Hexo一键部署到阿里云OSS并设置浏览器缓存
自建博客地址:https://bytelife.net,欢迎访问! 本文为博客自动同步文章,为了更好的阅读体验,建议您移步至我的博客 本文作者: Jeffrey 本文链接: https://bytel ...
- 基于云原生DevOps服务自动化部署前端项目学习总结
本文主要以部署前端Vue项目为例,讲述了如何基于云原生DevOps服务自动化部署前端项目~从开发完成到线上环境,我们只需提交代码即可~ 一.引言 作为一名开发人员,日常工作中我们除了需要负责代码的开发 ...
- 如何通过云效Flow完成自动化构建—构建集群
如何通过云效Flow完成自动化构建-构建集群,云效流水线Flow是持续交付的载体,通过构建自动化.集成自动化.验证自动化.部署自动化,完成从开发到上线过程的持续交付.通过持续向团队提供及时反馈,让交付 ...
- [转]Web3.0时代,企业知识管理新趋势
[转自http://www.amt.com.cn/html/ManageFront/AMTPoint0/2014/0716/1370.html] Web3.0时代,企业知识管理新趋势 2014-07- ...
随机推荐
- C语言提供了几个标准库函数 itoa() atoi()
C语言提供了几个标准库函数C语言提供了几个标准库函数,可以将任意类型(整型.长整型.浮点型等)的数字转换为字符串.以下是用itoa()函数将整数转换为字符串的一个例子: # include <s ...
- WebService 基础使用&cxf第三方Service使用
1.通过Jax-ws自己发布一个webservice 解析:用webservice发布HelloWorld JAX-WS本质就是通过Socket来实现的.2.WSDL文档描述如何直接变成java代码 ...
- AndroidStudio调试APP
AndroidStudio调试APP 电脑用数据线连上手机 开启手机的开发者模式 注:通常连续狂点手机的版本号即可显示出开发者选项,然后进入菜单,勾选开发者选项.USB调试. 给程序加断点 单击调试按 ...
- Delphi编译的程序,查看控件名称方法
使用SpyLite24这个软件可以查看程序所使用的控件名称
- DataTable 怎样设置列宽? DataTable中已经有数据了怎样在现实的时候设置它的列宽?
首先要理解 DataTable是一个虚拟表,里面存有数据列,既然是虚拟的就不能够为它去设置宽度,如果设置的话可以对其绑定的控件进行设置.例如:绑定的控件对象为DataGridView那么可以这样 da ...
- NSDictionary to jsonString
NSDictionary to jsonString [self DataTOjsonString:dic] -(NSString*)DataTOjsonString:(id)object { NSS ...
- 20145225《Java程序设计》 第8周学习总结
20145225<Java程序设计> 第八周学习总结 教材学习内容总结 第十五章 通用API 15.1日志 日志API:使用日志的起点是Logger类,要取得Logger类,必须使用Log ...
- BufferedOutputStream的学习
今天写了一下一段代码,结果打开文件却发现要写入文件的内容不仅没写入,原来的内容也消失了,而控制台却显示原文件的内容都被读取出来了,代码如下: FileInputStream fileInputStre ...
- 查看mssql的锁
USE [master]GO /****** Object: StoredProcedure [dbo].[sp_who_lock] Script Date: 10/02/2014 06:18:19 ...
- LLVM 初探<一>
一.安装LLVM LLVM是一个低级虚拟机,全称为Low Level Virtual Machine.LLVM也是一个新型的编译器框架,相关的介绍Wikipedia. 现在LLVM的版本已经有很多,根 ...