Learn Chef Rally 學習筆記 part4 —工作站環境設定
本文記錄 Learn Chef Rally 以下章節的學習歷程:
- Track — Infrastructure Automation > Manage a node with Chef server > Set up your workstation
- Track — Infrastructure Automation > Manage a node with Chef server > Get set up with hosted Chef
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]
典型的架構上會分成三個部成:
- 工作站 (workstation) — 就是你用來工作的電腦。你會在這裡編輯你的 Chef cookbooks 及管理你的網路。
- Chef server — 就是 Chef 的 server 端,用來管理底下的 nodes。舉例來說,Chef server 會知道底下每一個 node 的完整網域名稱 (FQDN) 及它們的作業系統平台。
- node — 就是 Chef 的 client 端,會安裝 Chef client,可以是任何實體或虛擬機。
其實 node 就是我們平常在講的 server,也就是實際在工作的機器。但我猜應該是為了避免跟 Chef server 產生混淆所以一律叫做 node。
在這個 module 完成後可以學到以下技能:
- server & node (管理一台 Chef server 及一台 Chef node)
- policy (在工作站撰寫 Chef 程式碼以定義一個 policy)
- 套用 policy 在 node 上
- 除錯 (理解如何診斷及解決
chef-client
執行時產生的錯誤) - 排程 (設定定期執行的
chef-client
) - search (利用 search 在多台 nodes 上執行
chef-client
) - roles (利用 roles 來定義每一種不同 node 的行為及屬性)
但以上這幾點在本文中都還不會學到,哈哈哈。
另外,要順利完成本 module 需要有兩個環境,簡單說就是要開兩台機器起來:
- 一台工作站。如果你不想弄髒你手邊的電腦,就另外開一台 VM 或雲端機器起來當作你的工作站,可以是任何一種作業系統
- 一台 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 的方式有以下幾種:
- 註冊一個託管的 Chef (hosted Chef),chef.i0 會幫你管理 (免費試用)
- 自己灌一台,自己管理
- 使用 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 設定檔
- 登入 https://manage.chef.io/login
- 點擊 Administration 頁籤,再點一下你的 organization
- 點擊 Generate Knife Config,這個動作會下載檔案
再來就是把這個 knife.rb
放到 ~/learn-chef/.chef
底下,如果你是同一台電腦的話就用 cp
指令:
$ cp ~/Downloads/knife.rb ~/learn-chef/.chef
但我是另外開一台機器,所以就用 scp
傳上去。
4. 產生 RSA private key
- 回到剛剛登入的 https://manage.chef.io 頁面
- 點擊上方的 Administration,再點擊左邊的 Users 選單
- 點擊你的 User Name,再點擊左邊選單的 Reset Key
- 對話框按下 Reset Key
- 按 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'
確認連線成功囉,基本的工作站環境設定到這邊就算完成了吧。