云时代的到来势不可挡。尤其作为程序员,我们每天或多或少的直接或间接的使用者各种云服务。云平台有很多种,如云软件(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的几个特点。

  1. Chef是为了解决基础设施难题。

  2. Chef通过建模将基础设施及应用程序交付抽象为代码。

  3. Chef具有强大的能力及灵活性.

  4. 由于配置即代码,基础设施即代码,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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ knife help list
Available help topics are:
bootstrap
chef-shell
client
configure
cookbook
cookbook-site
data-bag
environment
exec
index
knife
node
role
search
shef
ssh
status
tag

knife是由ruby写的一个gem。它的API很有表现力。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# 创建一个recipe
$ knife cookbook create myRecipe
** Creating cookbook myRecipe
** Creating README for cookbook: myRecipe
** Creating CHANGELOG for cookbook: myRecipe
** Creating metadata for cookbook: myRecipe #从cookbook server上下载recipe
$ knife cookbook site install apache2 #将本地的recipe上传到服务器上
$ knife cookbook upload myRecipe #查看服务上当前注册的所有的node
$ knife node list
bowenhuang-starter #查看bowenhuang-starter node的详细信息
$ knife node show bowenhuang-starter
Node Name: bowenhuang-starter
Environment: _default
FQDN: bowenhuang-starter
IP: 10.0.2.15
Run List: recipe[apt], recipe[apache2]
Roles:
Recipes: apt, apache2
Platform: ubuntu 12.04
Tags: #将指定IP或主机名的机器注册到服务器上
$ knife bootstrap IP \
--ssh-user USERNAME \
--ssh-password PASSWORD \
--ssh-port PORT \
--sudo

在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的更多相关文章

  1. 云时代IDC自动化运维的几大神器

    云时代IDC自动化运维的几大神器 2016年09月18日 10:27:41 天府云创 阅读数:1715   版权声明:本文为EnweiTech原创文章,未经博主允许不得转载. https://blog ...

  2. 干货 | 运维福音——Terraform自动化管理京东云

    干货 | 运维福音--Terraform自动化管理京东云 原创: 张宏伟 京东云开发者社区  昨天 Terraform是一个高度可扩展的IT基础架构自动化编排工具,主张基础设施即代码,可通过代码集中管 ...

  3. Apsara Clouder云计算专项技能认证:云服务器基础运维与管理

    一.三个理由拥抱云服务器 1.课程目标 如何拥有一台属于自己的ECS 出现一些问题的时候,对这台云服务器进行很好的管理 如何保证一台云服务出现问题的时候提前进行防范 2.云服务的定义 云服务器(Ela ...

  4. ZeroMQ:云时代极速消息通信库

    ZeroMQ:云时代极速消息通信库(大规模|可扩展|低成本|高效率解决之道,大规模分布式|多线程应用程序|消息传递架构构建利器) [美]Pieter Hintjens(皮特.亨特金斯)著   卢涛 李 ...

  5. ibm云时代的转型

    好几个月了,有两个说法很流行. 第一个说法,是老有人嚷嚷思科快被SDN整趴下了:第二个说法,是老有人嚷嚷IBM在云计算时代完全落后了,要倒下了. 刚开始我还跟有些人辩论: 1.裁员是西方企业常用的战略 ...

  6. Hexo一键部署到阿里云OSS并设置浏览器缓存

    自建博客地址:https://bytelife.net,欢迎访问! 本文为博客自动同步文章,为了更好的阅读体验,建议您移步至我的博客 本文作者: Jeffrey 本文链接: https://bytel ...

  7. 基于云原生DevOps服务自动化部署前端项目学习总结

    本文主要以部署前端Vue项目为例,讲述了如何基于云原生DevOps服务自动化部署前端项目~从开发完成到线上环境,我们只需提交代码即可~ 一.引言 作为一名开发人员,日常工作中我们除了需要负责代码的开发 ...

  8. 如何通过云效Flow完成自动化构建—构建集群

    如何通过云效Flow完成自动化构建-构建集群,云效流水线Flow是持续交付的载体,通过构建自动化.集成自动化.验证自动化.部署自动化,完成从开发到上线过程的持续交付.通过持续向团队提供及时反馈,让交付 ...

  9. [转]Web3.0时代,企业知识管理新趋势

    [转自http://www.amt.com.cn/html/ManageFront/AMTPoint0/2014/0716/1370.html] Web3.0时代,企业知识管理新趋势 2014-07- ...

随机推荐

  1. 英语语法 It all started the summer before second grade when our moving van pulled into her neighborhood

    It all started the summer before second grade when our moving van pulled into herneighborhood It all ...

  2. jqeury 合并单元格

    function mergeCells() { var tbodyTlth = $("#datatable_ajax1 tbody").find("tr").l ...

  3. 驱动开发学习笔记. 0.01 配置arm-linux-gcc 交叉编译器

    驱动开发读书笔记. 0.01 配置arm-linux-gcc 交叉编译器 什么是gcc: 就像windows上的VS 工具,用来编译代码,具体请自己搜索相关资料 怎么用PC机的gcc 和 arm-li ...

  4. (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境

    . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...

  5. RTX2010服务器端的主要通信端口有哪些?

    RTX服务端程序在安装之后,如果安装服务端电脑的操作系统有防火墙(如Windows XP.Windows2003等)或者安装了防火墙(如瑞星.Norton等),那么需要在防火墙上打开RTX所需要使用的 ...

  6. 第七章 springboot + retrofit

    retrofit:一套RESTful架构的Android(Java)客户端实现. 好处: 基于注解 提供JSON to POJO,POJO to JSON,网络请求(POST,GET,PUT,DELE ...

  7. Python网络爬虫Scrapy框架研究

    看到一个爬虫比较完整的教程.保留一下. https://github.com/yidao620c/core-scrapy

  8. PHP通过反射方法调用执行类中的私有方法

    PHP 5 具有完整的反射 API,添加了对类.接口.函数.方法和扩展进行反向工程的能力. 下面我们演示一下如何通过反射,来调用执行一个类中的私有方法: <?php //MyClass这个类中包 ...

  9. [转]linux14.04下caffe的安装步骤

     linux14.04下caffe的安装步骤   原文地址:http://blog.csdn.net/xiaoyang19910623/article/details/52997481?locatio ...

  10. DIV重叠 如何优先显示(div浮在重叠的div上面)

    如果有2个div有重叠,默认是根据html解析顺序,最后加载的优先级最高(浮在最上面). 问题: 如果想把前面加载的div显示在最上面?关键字:z-index 举例: --原来的页面:first di ...