使用程式碼管理基礎架構(一)映象利器
首先我們基礎架構的組成主要是計算,儲存和網路,在我們以往的模式中主要使用的是虛擬化技術,無論哪種虛擬化技術在實際生產環境中主要都是通過模板來提高交付效率,模板主要由作業系統和應用組成。
什麼是packer
Packer是一個開源工具,從單一源配置為多個平臺建立相同的機器映像。 Packer是輕量級的,可在每個主要作業系統上執行,並且可以並行建立多個平臺的機器映像。 Packer不會取代像Chef或Puppet這樣的配置管理。 事實上,在建立映象時,Packer可以使用Chef或Puppet等工具在映象上安裝軟體。
映象是單個靜態單元,包含預先配置的作業系統和已安裝的軟體,用於快速建立新的執行機器。 可以針對不同的平臺建立不同格式的映象。包括EC2的AMI,VMware的VMDK / VMX檔案,VirtualBox的OVF匯出等。
Packer的適用場景
l 持續交付
Packer是一個輕量級的命令列工具,使其成為pipeline環節中的一個完美工具,當我們使用chef或puppet在不用的平臺進行軟體的安裝部署時,Packer可以為我們生成一個全新的映象。在pipeline環節中如果最新的映象經過測試和驗證可以滿足業務系統的需求,為後續業務系統的上線提供了一個穩定和可靠的基礎架構環境。
l 開發和生產環境平級
Packer 讓開發,測試和生產環境儘量保持一致,可以在同一時間在不同的平臺部署相同的映象,如果你使用AWS和VMware平臺,Packer可以讓你在同一時間在兩個平臺部署相同的映象模板,結合上面的案例可以讓你的基礎架構更靈活,實現從開發到生產的基礎架構保持一致。
l Demo演示
Packer非常適合Demo應用的交付,隨著應用的不斷升級,使用者通過自動化的安裝部署軟體十分輕鬆的在同一時間將應用Demo部署到不同的平臺。
如果沒有Packer我們如何做:
Packer如何做:軟體安裝
https://www.packer.io/downloads.html
製作映象
Packer支援的平臺
Alicloud ECS
Amazon EC2
Azure
CloudStack
DigitalOcean
Docker
File
Google Cloud
Hetzner Cloud
Hyper-V
LXC
LXD
NAVER Cloud
Null
1&1
OpenStack
Oracle
Parallels
ProfitBricks
QEMU
Scaleway
Triton
VirtualBox
VMware
Custom
使用案例
下面通過在阿里雲上建立一個包含Redis資料庫的映象的簡單例項來學習如何使用Packer。
建立quick-start.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_test2",
"source_image":"centos_7_04_64_20G_alibase_201701015.vhd",
"ssh_username":"root",
"instance_type":"ecs.n1.tiny",
"io_optimized":"true",
"image_force_delete":"true"
}],
"provisioners": [{
"type": "shell",
"inline": [
"sleep 30",
"yum install redis.x86_64 -y"
]
}]
}
建立映象
packer build quick-start.json
Packer支援的Provisioners
Ansible Local
Ansible Remote
Breakpoint
Chef Client
Chef Solo
Converge
File
PowerShell
Puppet Masterless
Puppet Server
Salt Masterless
Shell
Shell (Local)
Windows Shell
Windows Restart
Custom
Packer的價值
也許你會說我在不同的平臺安裝好雲主機再部署好應用不就行了,何必要如此麻煩?如果你需要在多個平臺更新映象如何操作呢,是否需要一步一步的登入不同平臺,生成雲主機,更新應用,再生成映象,最後通過映象部署新的雲主機呢?Packer要做的事情就是將不同平臺的映象轉換為程式碼化管理,這樣使映象的修改和調整變的更為靈活。