Packer是一款輕量級的鏡像定義工具,能夠運行在主流作業系統(如Windows、Linux和MacOS)上。本文示範了如何為CentOS 6.9製作本地鏡像並上傳至阿里雲平台。您可根據需要自訂Packer模板為其他動作系統製作鏡像。
環境配置
本文樣本步驟使用了如下版本軟體。操作時,請以您的實際軟體版本為準。
- 伺服器作業系統:Ubuntu 16.04
- 待製作鏡像的作業系統:CentOS 6.9
前提條件
- 已建立AccessKey。詳細步驟,請參見建立AccessKey。
说明 由於AccessKey許可權過大,為防止資料泄露,建議您先建立RAM使用者,再使用RAM使用者建立AccessKey。
- 已開通OSS服務。詳細步驟,請參見開通OSS服務。
使用樣本
- 運行
egrep "(svm|vmx)" /proc/cpuinfo
命令,查看您的原始伺服器或虛擬機器是否支援KVM。返回如下資訊時,表示支援KVM。pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb intel_pt tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid mpx rdseed adx smap clflushopt xsaveopt xsavec xgetbv1 xsaves dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov
- 若您的原始伺服器或者虛擬機器支援KVM,依次運行以下命令安裝KVM。
sudo apt-get install qemu-kvm qemu virt-manager virt-viewer libvirt-bin bridge-utils #安裝KVM及相關控制項
sudo virt-manager #開啟virt-manager
如果可以通過GUI建立虛擬機器,表示您已經成功安裝KVM。
- 安裝Packer。
詳細步驟,請參見安裝Packer。
- 依次運行以下命令定義Packer模板。
说明 以下樣本命令基於CentOS 6.9系統。如果您需要為其他動作系統製作鏡像,請根據需要自訂Packer模板設定檔centos.json,詳情請參見自訂Packer模板。
cd /usr/local #切換所在目錄
wget https://raw.githubusercontent.com/alibaba/packer-provider/master/examples/alicloud/local/centos.json #下載阿里雲官方發行的centos.json設定檔
wget https://raw.githubusercontent.com/alibaba/packer-provider/master/examples/alicloud/local/http/centos-6.9/ks.cfg #下載阿里雲官方發行的ks.cfg設定檔
mkdir -p http/centos-6.9 #建立目錄
mv ks.cfg http/centos-6.9/ #移動檔案ks.cfg到目錄http/centos-6.9中
- 依次運行以下命令建立並匯入本地鏡像。
export ALICLOUD_ACCESS_KEY=<您的AccessKeyID> #匯入您的AccessKeyID
export ALICLOUD_SECRET_KEY=<您的AccessKeySecret> #匯入您的AccessKeySecret
packer build centos.json #建立本地鏡像並匯入到阿里雲平台
啟動並執行樣本結果如下:qemu output will be in this color. ==> qemu: Downloading or copying ISO qemu: Downloading or copying: http://mirrors.aliyun.com/centos/6.9/isos/x86_64/CentOS-6.9-x86_64-minimal.iso ................................................ ==> qemu: Running post-processor: alicloud-import qemu (alicloud-import): Deleting import source https://oss-cn-beijing.aliyuncs.com/packer/centos_x86_64 Build 'qemu' finished. ==> Builds finished. The artifacts of successful builds are: --> qemu: Alicloud images were created: cn-beijing: XXXXXXXX
- 等待一段時間後,在對應地區的ECS控制台鏡像詳情頁查看上傳結果,如樣本中的華北二。
自訂 Packer 模板
基於CentOS 6.9系統建立本地鏡像的樣本,請參見使用樣本。如果您需要為其他動作系統建立本地鏡像,可參見CentOS 6.9的JSON檔案(如下所示),自訂Packer模板。
{"variables": {
"box_basename": "centos-6.9",
"build_timestamp": "{{isotime \"20060102150405\"}}",
"cpus": "1",
"disk_size": "4096",
"git_revision": "__unknown_git_revision__",
"headless": "",
"http_proxy": "{{env `http_proxy`}}",
"https_proxy": "{{env `https_proxy`}}",
"iso_checksum_type": "md5",
"iso_checksum": "af4axxxxxxxxxxxxxxxxx192a2",
"iso_name": "CentOS-6.9-x86_64-minimal.iso",
"ks_path": "centos-6.9/ks.cfg",
"memory": "512",
"metadata": "floppy/dummy_metadata.json",
"mirror": "http://mirrors.aliyun.com/centos",
"mirror_directory": "6.9/isos/x86_64",
"name": "centos-6.9",
"no_proxy": "{{env `no_proxy`}}",
"template": "centos-6.9-x86_64",
"version": "2.1.TIMESTAMP"
},
"builders":[
{
"boot_command": [
"<tab> text ks=http://{{ .HTTPIP }}:{{ .HTTPPort }}/{{user `ks_path`}}<enter><wait>"
],
"boot_wait": "10s",
"disk_size": "{{user `disk_size`}}",
"headless": "{{ user `headless` }}",
"http_directory": "http",
"iso_checksum": "{{user `iso_checksum`}}",
"iso_checksum_type": "{{user `iso_checksum_type`}}",
"iso_url": "{{user `mirror`}}/{{user `mirror_directory`}}/{{user `iso_name`}}",
"output_directory": "packer-{{user `template`}}-qemu",
"shutdown_command": "echo 'vagrant'|sudo -S /sbin/halt -h -p",
"ssh_password": "vagrant",
"ssh_port": 22,
"ssh_username": "root",
"ssh_wait_timeout": "10000s",
"type": "qemu",
"vm_name": "{{ user `template` }}.raw",
"net_device": "virtio-net",
"disk_interface": "virtio",
"format": "raw"
}
],
"provisioners": [{
"type": "shell",
"inline": [
"sleep 30",
"yum install cloud-util cloud-init -y"
]
}],
"post-processors":[
{
"type":"alicloud-import",
"oss_bucket_name": "packer",
"image_name": "packer_import",
"image_os_type": "linux",
"image_platform": "CentOS",
"image_architecture": "x86_64",
"image_system_size": "40",
"region":"cn-beijing"
}
]
}
使用樣本中使用的產生器為QEMU Builder,該產生器用於建立虛擬機器鏡像。Packer產生器的必需參數說明,如下表所示。其餘選擇性參數,請參見PackerQEMU Builder頁面。
必需參數 | 類型 | 描述 |
---|---|---|
iso_checksum | string | 作業系統的ISO檔案的校正和。Packer在啟動掛載了ISO的虛擬機器之前檢查該參數。至少指定iso_checksum或者iso_checksum_url參數;當您指定了參數iso_checksum時,參數iso_checksum_url的值被自動忽略。 |
iso_checksum_type | string | 已指定的作業系統的ISO檔案的校正和類型。取值範圍:
|
iso_checksum_url | string | 一個包含了作業系統ISO檔案校正和的檢驗和檔案的連結(URL),樣式為GNU或者 BSD。您需要至少指定iso_checksum或者iso_checksum_url參數;當您指定了參數iso_checksum時,參數iso_checksum_url的值被自動忽略。 |
iso_url | string | 一個指向ISO並包含安裝鏡像的URL。這個URL可以是一個HTTP連結,也可以是一個檔案路徑:
|
headless | boolean | Packer預設通過啟動圖形化虛擬機器介面構建QEMU虛擬機器。當您將headless置為True時,將啟動一個沒有控制台的虛擬機器。 |
使用樣本中使用的配置器中包含了Post-Processor模組,該模組實現自動化上傳本地鏡像到ECS雲平台。Post-Processor模組的必需參數如下所示。其餘選擇性參數,請參見PackerAlicloud Post-Processor頁面。
必需參數 | 類型 | 描述 |
---|---|---|
access_key | string | 您的AccessKeyID。 |
secret_key | string | 您的AccessKeySecret。 |
region | string | 本地鏡像上傳的阿里雲地區ID,如本樣本中的cn-beijing 。更多地區資訊,請參見地區和可用性區域。
|
image_name | string | 您的本地鏡像的名稱。
|
oss_bucket_name | string | 您的OSS Bucket名稱。若您指定了一個不存在的Bucket名稱,Packer上傳鏡像時自動建立一個同名Bucket。 |
image_os_type | string | 鏡像類型,取值範圍:
|
image_platform | string | 鏡像發行版本。例如,本樣本中的CentOS。 |
image_architecture | string | 鏡像發行版本的架構平台,取值範圍:
|
format | string | 鏡像的格式,取值範圍:
|
下一步
您可以使用上傳至阿里雲平台的自訂鏡像建立ECS執行個體,請參見使用自訂鏡像建立執行個體。
參考連結
- 瞭解Packer使用詳情,請參見Packer 官方文檔 。
- 擷取Packer的更多資訊,可訪問GitHub Packer倉庫packer。
- 擷取opstools的更多資訊,可訪問GitHub Alibaba倉庫opstools。
- 擷取packer-provider的更多資訊,可訪問GitHub Alibaba&Packer倉庫packer-provider。
- 瞭解設定檔ks.cfg的更多資訊,請參見Anaconda Kickstart。