云时代基础设置自动化管理利器: Chef

简介: 云时代的到来势不可挡。尤其作为程序员,我们每天或多或少的直接或间接的使用者各种云服务。云平台有很多种,如云软件(SaaS, Software as a service)、云平台(PaaS, Platform as a service)、云设备(IaaS, Infrastructure as a service)。

img_88f620719ae8fb416570f55171c8e63f.png

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

img_5ac71f37e10846a9e66b8fcc5030d4aa.png

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一台开发机;如果服务器节点需要扩展,也只需要几个命令就可搞定。运筹帷幄,一切皆在掌控之中。

相关文章
|
7月前
|
运维 监控 安全
「译文」软件自动化发布管理的三个步骤
「译文」软件自动化发布管理的三个步骤
|
2月前
|
测试技术 Python
自动化测试项目学习笔记(一):unittest简单运行(初始化,清除,设置测试行为)
本文介绍了Python的unittest框架的基础用法,包括测试初始化(setup)、清除(tearDown)函数的使用,以及assertEqual和assertGreaterEqual等断言方法,并展示了如何创建测试用例,强调了测试函数需以test_开头才能被运行。
64 1
自动化测试项目学习笔记(一):unittest简单运行(初始化,清除,设置测试行为)
|
3月前
|
运维 Linux 网络安全
自动化运维的利器:Ansible、Puppet和Chef详解
自动化运维的利器:Ansible、Puppet和Chef详解
98 5
|
5月前
|
监控 数据挖掘 BI
ERP系统中的工作流管理与自动化
【7月更文挑战第25天】 ERP系统中的工作流管理与自动化
200 2
ERP系统中的工作流管理与自动化
|
4月前
|
Java Spring 开发者
解锁 Spring Boot 自动化配置的黑科技:带你走进一键配置的高效开发新时代,再也不怕繁琐设置!
【8月更文挑战第31天】Spring Boot 的自动化配置机制极大简化了开发流程,使开发者能专注业务逻辑。通过 `@SpringBootApplication` 注解组合,特别是 `@EnableAutoConfiguration`,Spring Boot 可自动激活所需配置。例如,添加 JPA 依赖后,只需在 `application.properties` 配置数据库信息,即可自动完成 JPA 和数据源设置。这一机制基于多种条件注解(如 `@ConditionalOnClass`)实现智能配置。深入理解该机制有助于提升开发效率并更好地解决问题。
72 0
|
5月前
|
机器学习/深度学习 人工智能 运维
智能化运维的崛起:自动化与人工智能在IT管理中的融合
本文深入探讨了智能化运维在现代企业中的重要性,并分析了自动化技术和人工智能(AI)如何共同推动IT运维管理的革新。文章首先概述了传统运维面临的挑战,然后详细介绍了智能化运维的核心概念和实施步骤,最后通过具体案例展示了智能化运维在实际工作中的应用效果和潜在价值。
135 0
|
7月前
|
存储 弹性计算 运维
自动化合同管理与执行
【4月更文挑战第30天】
28 2
|
7月前
|
弹性计算 运维 Shell
自动化客服任务分配与优先级管理
【4月更文挑战第30天】
68 0
|
7月前
|
弹性计算 运维 Shell
自动化软件包安装与管理
【4月更文挑战第30天】
38 0