云时代的到来势不可挡。尤其作为程序员,我们每天或多或少的直接或间接的使用者各种云服务。云平台有很多种,如云软件(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. SSH基本框架搭建后的简化

    对于SSh框架的简化,我们可以从下面几个方面来剖析: 1.实体类entity:在这里我们需要将数据库和实体类进行关联,在简化之前,我们需要在entity包里面加入一份.xml配置文件 例如原码---- ...

  2. 安装和部署ZkeaCMS

    ZkeaCMS是基于EasyFrameWork,使用ASP.NET MVC4开发的开源CMS. ZkeaCMS一个内容管理软件(网站).ZkeaCMS不仅只是管理内容,更是重新定义了布局.页面和组件, ...

  3. php 下载图片 文件

    $file = dirname(dirname(__FILE__)) . $_GET['download']; //获取图片的绝对路径 header("Content-type: octet ...

  4. 请不要做浮躁的IT人

    1.不要看到别人的回复第一句话就说:给个代码吧!你应该想想为什么.当你自己想出来再参考别人的提示,你就知道自己和别人思路的差异. 2.初学者请不要看太多太多的书那会误人子弟的,先找本系统的学,很多人用 ...

  5. C++奇数魔方阵

    理解了算法的思想就很简单了, 首先将1放到第一排的中间,然后向左上角走,当行数超过索引,则将该数放到最后一排接下来的一列中去,当列数超过索引,则放到上一排的第一列中去,若都没有超过索引,但是此时的右上 ...

  6. Oracle SQL*plus常用的命令和函数

    常用命令: 连接sqlplus命令行下运行cmd进入,如以sys模式登陆,命令如下:(1).sqlplus "sys/zhb126 as sysdba" (2).sqlplus/n ...

  7. RHEL 集群(RHCS)配置小记 -- 文档记录

    1.RHEL 6 集群配置官方管理手册 https://access.redhat.com/site/documentation/zh-CN/Red_Hat_Enterprise_Linux/6/pd ...

  8. Scrum Meeting (Oct. 27 2014)

    软件工程是一门十分有意思的课程,它不仅锻炼了我们开发软件的能力,更是给了我们结队作业的机会,在团队协作中,我们学会了欣赏别人,学会了品鉴自己,学会了如何集思广益凝聚成一个锐意进取的集体.继单人单词查询 ...

  9. SQL Server 扩展一个支持类似。net 时间格式化的标量函数~

    * FROM sys.objects WHERE name=N'uF_DateFormat' AND [type]='FN') DROP FUNCTION uF_DateFormat GO SET A ...

  10. 在sqlserver存储过程中给in参数传带逗号值的办法,如传'1','2','3'这样的

    最近在一项目修改中,要在存储过程中给in参数传值,语句写的也对,但怎么执行都得不出结果,如果把这语句直接赋值.执行,却能得出结果,很是奇怪,如: 直接执行select schoolname from ...