閱讀989 返回首頁    go 技術社區[雲棲]


雲生態下的鏡像管理利器Packer

About Packer

Packer (https://www.packer.io/)是Hashicorp 組織旗下的一款DevOps運維工具,可以看下整個軟件交付周期所處的位置:
image.png

Packer是一款麵向雲生態非常便利的鏡像管理利器,通過一個模板配置可以快速的創建鏡像。
當前支持阿裏雲、AWS、Azure、Vmware、Google Cloud Platform、DigitalOcean 等多個雲廠商平台。通過Packer,可以在創建鏡像過程中,執行相應的腳本文件,或者安裝目標軟件,執行配置係統等操作,可提升係統應用交付效能。

Install Packer

Packer可以安裝在多個係統平台上
image.png
通過https://www.packer.io/downloads.html 可以下載相應的可執行二進製包,配置好相應的PATH則可使用Packer Command,如下:
image.png

Build an Image on alicould

隻需要通過創建一個Packer的模板配置文件(json格式),指定好鏡像所在的region,類型,實例規格,IO類型,則可完成一個係統鏡像的創建,下麵看一下基於Alicloud的一個模板配置:

{
  "variables": {
    "access_key": "${your_access_key}",
    "secret_key": "${your_secret_key}"
  },
  "builders": [{
    "type":"alicloud-ecs",
    "access_key":"${your_access_key}",
    "secret_key":"${your_secret_key}",
    "region":"cn-beijing",
    "image_name":"packer_test_image",
    "source_image":"centos_7_03_64_20G_alibase_20170818.vhd",
    "ssh_username":"root",
    "instance_type":"ecs.n4.small",
    "internet_charge_type":"PayByTraffic",
    "io_optimized":"true"
  }]
}

其中鏡像類型對應的多平台說明文檔可參考:
https://www.packer.io/docs/builders/index.html

Provision

Packer 可以支持Provision實現在創建鏡像過程中,執行相應的腳本文件,或者安裝目標軟件,執行配置係統等,比如下可以預先安裝redis:
image.png

注意事項:上麵配置的sleep 30非常關鍵,因為在創建鏡像的過程中,是構建了完整的VM實例,這中間需要通過SSH上去執行指令的過程中,可能係統尚未完成整改初始化過程,所以需要做一個30秒的時間等待。

Parallel Builds

Packer 同時支持多平台創建一個鏡像,如下在AWS、DigitalOcean 創建鏡像,隻不過這裏需要製定好各自平台的AK、API-Token:
image.png

Execute build image

當我們創建好一個鏡像的時候,比如這裏通過創建一個基於阿裏雲的鏡像模板:

{
  "variables": {
    "access_key": "{your_access_key}",
    "secret_key": "${your_secret_key}"
  },
  "builders": [{
    "type":"alicloud-ecs",
    "access_key":"{your_access_key}",
    "secret_key":"${your_secret_key}",
    "region":"cn-beijing",
    "image_name":"packer_test_image",
    "source_image":"centos_7_03_64_20G_alibase_20170818.vhd",
    "ssh_username":"root",
    "instance_type":"ecs.n4.small",
    "internet_charge_type":"PayByTraffic",
    "io_optimized":"true"
  }],
  "provisioners": [{
    "type": "shell",
    "inline": [
      "sleep 30",
      "echo 'hello world' > /tmp/a.txt"
    ]
  }]
}

我們需要驗證寫的模板語法上是否有錯誤,則通過validate進行判斷:

$ packer validate alicloud.json 

當如上vadidate驗證json語法等問題okay後,則通過packer build 直接構建鏡像:

$ packer build alicloud.json

如果為build的過程的STDOUT:
image.png

如上可以看到該過程完成了資源的創建和釋放的過程,執行後到阿裏雲管控控製台查看ECS自定義鏡像:
image.png

最後更新:2017-09-18 21:33:44

  上一篇:go  iOS 防 DNS 汙染方案調研--- HTTPS(非SNI) 業務場景
  下一篇:go  三十分鍾熟悉es6(es6常用功能總結)