天天看點

實戰Packer建立chef server鏡像

Packer簡介

Packer是一個從單一配置檔案為多平台建立一緻鏡像的輕量級的開源工具。能夠運作在主流的作業系統上,并行高效的建立多平台的虛拟機鏡像,它為代碼即基礎結構提供了堅實的基礎,通過packer較大的降低了了建立使用者自定義鏡像的難度,并且将建立鏡像的過程從人工的随機過程變成可以配置管理代碼,可測試的過程,進而減少了使用者應用上雲的障礙之一。下面就從實戰的角度來建構一個chef server鏡像來學習packer的使用。

Packer的安裝

首先從Packer官網下載下傳對應作業系統的安裝包,本文以Mac OS X x64為例,點選如下圖的

官網連結

下載下傳packer安裝包

實戰Packer建立chef server鏡像

然後打開終端,導航到下載下傳目錄下,執行如下指令,如果得到如下圖的輸出,packer就安裝好了:

#unzip packer_0.12.3_darwin_amd64.zip
#sudo mv packer /usr/local/bin/
#packer
usage: packer [--version] [--help] <command> [<args>]

Available commands are:
    build       build image(s) from template
    fix         fixes templates from old versions of packer
    inspect     see components of a template
    push        push a template and supporting files to a Packer build service
    validate    check that a template is valid
    version     Prints the Packer version           

由于阿裡雲的packer插件送出還在流程中,是以還需要從

阿裡雲的開源站點

下載下傳阿裡雲的

packer插件

,然後執行如下指令,如果輸出如下,插件就安裝好了:

#tar -xvf  packer-builder-alicloud-ecs_darwin-amd64.tgz
#sudo mv bin/packer-builder-alicloud-ecs /usr/local/bin/
# ls /usr/local/bin | grep packer

packer                                  packer-builder-alicloud-ecs           

建立chef server

從阿裡雲的packer插件代碼站點下載下傳樣例檔案

alicloud.json

chef.sh user_data.sh

到同一目錄,打開alicloud.json檔案内容如下:

{
  "variables": {
    "access_key": "{{env `ALICLOUD_ACCESS_KEY`}}",
    "secret_key": "{{env `ALICLOUD_SECRET_KEY`}}"
  },
  "builders": [{
    "type":"alicloud-ecs",
    "access_key":"{{user `access_key`}}",
    "secret_key":"{{user `secret_key`}}",
    "region":"cn-beijing",
    "image_name":"packer_chef2",
    "source_image":"ubuntu_14_0405_64_40G_base_20170222.vhd",
    "ssh_username":"root",
    "instance_type":"ecs.n1.medium",
    "io_optimized":"true",
    "image_force_delete":"true",
    "ssh_password":"Test1234",
    "user_data_file":"examples/alicloud/chef/user_data.sh"
  }],
  "provisioners": [{
    "type": "file",
    "source": "examples/alicloud/chef/chef.sh",
    "destination": "/root/"    
   },{
    "type": "shell",
    "inline": [
    "cd /root/",
    "chmod 755 chef.sh",
    "./chef.sh",
    "chef-server-ctl  reconfigure"
    ]
  }]
}           

将其中的"variable"部分的"access_key"和"secret_key"的值替換為你自已的access key和secret key,或者在終端中執行

#export ALICLOUD_ACCESS_KEY="<你的access_key>"
#export ALICLOUD_SECRET_KEY="<你的secret_key>"           

你可以從阿裡雲控制台擷取通路的AK,打開

控制台

登入後,點選頁面右上角的登入名,出現如下圖菜單,在菜單中選擇accesskeys按鈕

實戰Packer建立chef server鏡像

然後在Access key管理頁面點選右上角的"建立Access Key"按鈕,建立新的Access Key ID和Access Key Secret,将值替換模闆中或者設定如上的環境變量。

然後修改如下兩行的值

"user_data_file":"examples/alicloud/chef/user_data.sh"
"source": "examples/alicloud/chef/chef.sh",           

"user_data_file":"user_data.sh"
"source": "chef.sh",           
雲小站劵

在檔案所在的目錄執行

#packer build alicloud.json

alicloud-ecs output will be in this color.

==> alicloud-ecs: Force delete flag found, skipping prevalidating alicloud image name
    alicloud-ecs: Found image ID: ubuntu_14_0405_64_40G_base_20170222.vhd
==> alicloud-ecs: Not using temporary keypair
==> alicloud-ecs: Start create alicloud vpc
==> alicloud-ecs: Start creating vswitch...
==> alicloud-ecs: Start creating security groups...
==> alicloud-ecs: Start creating alicloud instance
.............           

運作正常結束後,你就可以登入控制台

鏡像清單

檢視到剛才建立的鏡像了。

實戰Packer建立chef server鏡像

然後基于這個自定義的鏡像建立

ECS

執行個體,我的結果如下圖,(注:如果建立的ECS執行個體是經典網絡,需要登入到ECS執行個體上手動執行user_data.sh腳本)

實戰Packer建立chef server鏡像

然後在浏覽器中輸入如下位址:

https://123.56.16.159/

你就可以看到chef的web界面了。(注:注意更改成你自已執行個體的

IP地位址
實戰Packer建立chef server鏡像

展望

誠然,引入新的機制,會引入相應的學習曲線,對于packer來說,編寫可用的鏡像模闆檔案不是一件簡單的事情,但是随着開源的盛行,很多常用的的模闆都能夠從github上找到,例如如下

資源庫

中就包含大量的模闆,,是以也歡迎大家以

阿裡雲官方packer插件資源庫

來貢獻一份力量。