Chef Server & Knife 實作
#DevOps 系列課程 (六) - 自動部署2
Ming-der Wang
ming@log4analytics.com
TurboTeam 集先鋒科技
回顧 chef solo
chef solo 跟 chef server 比較
- chef solo 沒有 authentication 管理
- chef solo 沒有 cookbooks 集中管理
- chef solo 沒有 API 提供互動
Recall cookbooks 放在哪裡?
用 Git 來管理 chef-repo
chef 有哪些重要元件?
用 Git 來管理
Chef Server 安裝
Download Page
但基本上, 我們不再手動安裝任何東西, 改用自動部署
但我們用 chef-solo 來安裝 chef server
VM 至少要 1.5GB RAM
安裝 Chef DK
- chef DK -> https://downloads.chef.io/chef-dk/
- 還需安裝 knife solo
chef gem install knife-solo
或
gem install knife-solo
Windows 或 Mac 環境需安裝
- git
- Oracle VM VirtualBox
- WINGM64 bash 環境
安裝一些基本工具
- 安裝 vagrant (click URL) https://www.vagrantup.com/downloads.html
安裝 docker toolbox (click image)
實作一:安裝 Chef server
(用 chef solo 安裝 chef server)
hands-on
$ git clone https://github.com/mingderwang/TaipeiDevOpsMeetup-chef.git
$ cd TaipeiDevOpsMeetup-chef
$ git checkout v2.0.1-log4-chef-server
$ git checkout -b chef-server
Berksfile
$ cat Berksfile
source "https://api.berkshelf.com"
cookbook 'chef-server', '= 2.1.6'
$ berks install
node
$ cat nodes/hogege.json
{
"run_list": [
"recipe[chef-server]",
"recipe[log4-chef-server]"
]
}
prepare and cook it
$ cd TaipeiDevOpsMeetup-chef/chef-repo
$ knife solo prepare username@nodenameorip
$ knife solo cook username@nodenameorip
troubleshooting
$ cat .chef/knife.rb
cookbook_path ["cookbooks", "site-cookbooks"]
node_path "nodes"
role_path "roles"
environment_path "environments"
data_bag_path "data_bags"
#encrypted_data_bag_secret "data_bag_key"
knife[:berkshelf_path] = "cookbooks"
Chef::Config[:ssl_verify_mode] = :verify_peer if defined? ::Chef
安裝成功
實作二:
knife 連上 chef server
$ knife node list <- 確定連線
$ knife ssh check
$ knife status
參考 https://www.linode.com/docs/applications/chef/beginners-guide-chef
check your ~/.chef
.chef
├── cache
├── client.pem
├── knife.rb
├── mwang.pem
└── syntax_check_cache
check your ~/.chef/knife.rb
log_level :info
log_location STDOUT
node_name 'mwang'
client_key '/Users/mingderwang/.chef/mwang.pem'
validation_client_name 'chef-validator'
validation_key '/Users/mingderwang/.chef/client.pem'
chef_server_url 'https://chef-server.log4analytics.com:443'
syntax_check_cache_path '/Users/mingderwang/.chef/syntax_check_cache'
cookbook_path [
"/Users/mingderwang/src/chef-repo3/cookbooks"
]
client.pem
mwang.pem
create a new users
連上自己的或我的 chef-server
- 要先在 https://chef-server.log4analytics.com 開帳號
- $ cd /tmp
接下來大家實作看看
30 mins
- $ git clone https://github.com/mingderwang/sample_chef_workstation_config.git
- $ wget https://gist.githubusercontent.com/mingderwang/bf28f74b768927dfd72ebac855ca0bc9/raw/3be6e0ec516cd70fc4fe665fe45d8d7d36691a3c/demo123456.pem
實作三:
knife bootstrap a node
$ knife bootstrap 104.236.11.146 -N do1 -x mwang --sudo
knife bootstrap 目的是幫你 node 安裝 chef-client,
跟 chef solo 的 prepare 功能類似
// 這裡 mwang user 必須有 sudo 能力.
大家挑自己 node 的名字, 不要跟別人重複 (例如 mingdo1)
create your repo-chef
$ chef generate repo chef-repo
$ cd chef-repo
$ git init
$ git add -A
$ git commit -m 'init from chef-repo create'
// git push to your git server.
// to share with your IT admins.
chef-repo內容跟 chef solo 類似
- vi chef-repo/nodes/do1.json
- $ knife node from file do1.json
{ "name": "do1",
"chef_type": "node",
"json_class": "Chef::Node",
"chef_environment": "_default",
"run_list": [
"recipe[ntp]"
]
}
do1.json 範例
大家挑自己 node 的名字, 不要跟別人重複 (例如 mingdo1.json)
在 do1 node 上執行 chef-client
- ssh do1
- $ sudo chef-client
接下來大家實作看看
30 mins
大家挑自己 node 的名字, 不要跟別人重複 (例如 mingdo1)
註解: cookbook 更新 server, 指令為
$ knife cookbook upload log4-chef-server
Q & A
ming@log4analytics.com
DevOpsTaiwan.slack.com
(進入 slack 方法 -> devopstaiwan.com)
#DevOps 系列課程 (六) - Taipei DevOps Meetup
By Ming-der Wang
#DevOps 系列課程 (六) - Taipei DevOps Meetup
- 1,632