文章出處

云時代的到來勢不可擋。尤其作為程序員,我們每天或多或少的直接或間接的使用者各種云服務。云平臺有很多種,如云軟件(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一臺開發機;如果服務器節點需要擴展,也只需要幾個命令就可搞定。運籌帷幄,一切皆在掌控之中。


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()