Learn Chef Rally 學習筆記 part4 —工作站環境設定

本文記錄 Learn Chef Rally 以下章節的學習歷程:

Module — Manage a node with Chef server

這個 module 一開始也要先選擇環境,我選的是 Red Hat Enterprise Linux (RHEL 7 or CentOS 7) -> Hosted Chef。

[Manage a Red Hat Enterprise Linux node using hosted Chef]

典型的架構上會分成三個部成:

  1. 工作站 (workstation) — 就是你用來工作的電腦。你會在這裡編輯你的 Chef cookbooks 及管理你的網路。
  2. Chef server — 就是 Chef 的 server 端,用來管理底下的 nodes。舉例來說,Chef server 會知道底下每一個 node 的完整網域名稱 (FQDN) 及它們的作業系統平台。
  3. node — 就是 Chef 的 client 端,會安裝 Chef client,可以是任何實體或虛擬機。
    其實 node 就是我們平常在講的 server,也就是實際在工作的機器。但我猜應該是為了避免跟 Chef server 產生混淆所以一律叫做 node。

在這個 module 完成後可以學到以下技能:

  1. server & node (管理一台 Chef server 及一台 Chef node)
  2. policy (在工作站撰寫 Chef 程式碼以定義一個 policy)
  3. 套用 policy 在 node 上
  4. 除錯 (理解如何診斷及解決 chef-client 執行時產生的錯誤)
  5. 排程 (設定定期執行的 chef-client)
  6. search (利用 search 在多台 nodes 上執行 chef-client)
  7. roles (利用 roles 來定義每一種不同 node 的行為及屬性)

但以上這幾點在本文中都還不會學到,哈哈哈。

另外,要順利完成本 module 需要有兩個環境,簡單說就是要開兩台機器起來:

  1. 一台工作站。如果你不想弄髒你手邊的電腦,就另外開一台 VM 或雲端機器起來當作你的工作站,可以是任何一種作業系統
  2. 一台 node。必須要是 RHEL 7 或 CentOS 7,因為我在這個 module 一開始選的是 RHEL/CentOS 7。

咦?那 Chef server 去哪了?我猜應該是因為我上個步驟選的是 Hosted Chef,所以這理就不用管 Chef server 了吧。


[Set up your workstation]

1. 安裝 Chef DK

連擊安裝 Chef DK 的連結,找到 Red Hat Enterprise Linux 7 的部分,複製 URL 起來。目前 (2017/07/26) 的版本連結 2.0.28。

連進工作站 (我用的一樣是 CentOS 7),安裝這個 rpm:

$ sudo rpm -ivh https://packages.chef.io/files/stable/chefdk/2.0.28/el/7/chefdk-2.0.28-1.el7.x86_64.rpm 
正在擷取 https://packages.chef.io/files/stable/chefdk/2.0.28/el/7/chefdk-2.0.28-1.el7.x86_64.rpm
警告:/var/tmp/rpm-tmp.DX0229: 表頭 V4 DSA/SHA1 Signature, key ID 83ef826a: NOKEY
正在準備… ################################# [100%]
從 chefdk-2.0.28–1.el7.x86_64 安裝的檔案 /opt/chefdk/LICENSE 與來自套件 chefdk-0.16.28–1.el7.x86_64 的檔案產生衝突
從 chefdk-2.0.28–1.el7.x86_64 安裝的檔案 /opt/chefdk/LICENSES/config_guess-config.guess 與來自套件 chefdk-0.16.28–1.el7.x86_64 的檔案產生衝突
從 chefdk-2.0.28–1.el7.x86_64 安裝的檔案 /opt/chefdk/LICENSES/config_guess-config.sub 與來自套件 chefdk-0.16.28–1.el7.x86_64 的檔案產生衝突
(下略)

結果產生一堆版本衝突,因為我沒有重開一台機器,是上一個 module 用來練習的同一台機器,灌的是 chefdk-0.16.28–1.el7.x86_64。

先把舊版的砍掉:

$ sudo rpm -e chefdk-0.16.28–1.el7.x86_64

沒問題,再重灌一次:

$ sudo rpm -ivh https://packages.chef.io/files/stable/chefdk/2.0.28/el/7/chefdk-2.0.28-1.el7.x86_64.rpm
正在擷取 https://packages.chef.io/files/stable/chefdk/2.0.28/el/7/chefdk-2.0.28-1.el7.x86_64.rpm
警告:/var/tmp/rpm-tmp.rRKTUh: 表頭 V4 DSA/SHA1 Signature, key ID 83ef826a: NOKEY
正在準備… ################################# [100%]
Updating / installing…
1:chefdk-2.0.28–1.el7 ################################# [100%]
Thank you for installing Chef Development Kit!

安裝成功了。

2. 打開命令提示字元

誒,這個好像是寫給 windows 系統看的,跳過。

3. 確認 Chef DK 已安裝

確認一下 command line 可以下 Chef DK 的指令:

$ chef --version
Chef Development Kit Version: 2.0.28
chef-client version: 13.2.20
delivery version: master (17c1b0fed9be4c70f69091a6d21a4cbf0df60a23)
berks version: 6.2.0
kitchen version: 1.16.0
inspec version: 1.31.1

比較一下版本,2.0.28 與 1.0.3,現在最新的版本跟教程的版本差得頗多。最下面的 inspec version: 1.31.1 這行也是教程裡面沒有的。

4. 設定編輯器

嗯,我用的是 vim,結束,跳過。

5. 設定工作目錄

工作目錄放在哪邊其實是看個人喜好或看團隊習慣,每個專案也會各開一個子目錄出來,通常也會用 git 作版控 (可以版控才是精髓啊)。

這個 module 會以 ~/learn-chef 目錄作範例。

$ mkdir ~/learn-chef
$ cd ~/learn-chef

6. 安裝 git

目前 (2017/07/26) yum base repository 的 git 版本是 1.8.3,個人偏好用 2.9 之後的版本,安裝方式可以參考此文章

7. 確認 SSH client 的運作

這也是寫給 windows 系統看的,無此困擾,跳過。


[Get set up with hosted Chef]

一開始有兩個要點:

  • Chef server 是你的 cookbooks 的中央倉儲,同時也提供它底下管理的 nodes 的資訊。
  • knife 指令可以讓你從工作站跟 Chef server 溝通

使用 Chef server 的方式有以下幾種:

  1. 註冊一個託管的 Chef (hosted Chef),chef.i0 會幫你管理 (免費試用)
  2. 自己灌一台,自己管理
  3. 使用 Chef Automate,看起來有點厲害但要 $$ 的,價格請見 https://www.chef.io/pricing/#chef-automate

接下來我們要來註冊 hosted Chef,以及在工作站做一些設定,好讓我們能跟 Chef server 溝通。

1. 註冊 hosted Chef Server

要先到 https://manage.chef.io/signup/ 去註冊一個帳號,然後還一定要新增一個 Organization。

2. 設定 .chef 目錄

這裡說明了一些 knife 相關的事情:

  • knife 需要兩個檔案來跟 Chef server 做認證:RSA private key 以及 knife 設定檔 (knife.rb)
  • 上述兩個檔案都會放在 .chef 這個目錄底下
  • knife 指令被執行時,如果目前的目錄裡沒有 .chef 這個目錄,就會往上一層找,直到找到為止,類似 git 的作法。

那就來開一個 .chef 目錄吧:

$ mkdir ~/learn-chef/.chef

3. 產生 knife 設定檔

  1. 登入 https://manage.chef.io/login
  2. 點擊 Administration 頁籤,再點一下你的 organization
  3. 點擊 Generate Knife Config,這個動作會下載檔案

再來就是把這個 knife.rb 放到 ~/learn-chef/.chef 底下,如果你是同一台電腦的話就用 cp 指令:

$ cp ~/Downloads/knife.rb ~/learn-chef/.chef

但我是另外開一台機器,所以就用 scp 傳上去。

4. 產生 RSA private key

  1. 回到剛剛登入的 https://manage.chef.io 頁面
  2. 點擊上方的 Administration,再點擊左邊的 Users 選單
  3. 點擊你的 User Name,再點擊左邊選單的 Reset Key
  4. 對話框按下 Reset Key
  5. Download 下載檔案,再將此檔案放到 ~/learn-chef/.chef 底下

5. 連線到 Chef sever

先確認你的 /learn-chef/.chef 底下有上述兩支檔案:

$ ls ~/learn-chef/.chef
knife.rb yo.pem

下指令 knife ssl check

$ knife ssl check
Connecting to host api.chef.io:443
Successfully verified certificates from `api.chef.io'

確認連線成功囉,基本的工作站環境設定到這邊就算完成了吧。