Použití Packeru k vytvoření imagí virtuálních počítačů s Linuxem v Azure
Platí pro: ✔️ Flexibilní škálovací sady virtuálních počítačů s Linuxem ✔️
Každý virtuální počítač v Azure se vytvoří z image, která definuje distribuci Linuxu a verzi operačního systému. Image můžou zahrnovat předinstalované aplikace a konfigurace. Azure Marketplace poskytuje řadu imagí třetích stran pro nejběžnější distribuce a aplikační prostředí nebo si můžete vytvořit vlastní image přizpůsobené vašim potřebám. Tento článek podrobně popisuje, jak pomocí opensourcového nástroje Packer definovat a vytvářet vlastní image v Azure.
Poznámka:
Azure teď má službu Azure Image Builder pro definování a vytváření vlastních imagí. Azure Image Builder je založený na Packeru, takže s ním můžete dokonce použít stávající skripty zřizovacího prostředí Packeru. Pokud chcete začít pracovat s Azure Image Builderem, přečtěte si téma Vytvoření virtuálního počítače s Linuxem pomocí Azure Image Builderu.
Vytvoření skupiny prostředků Azure
Během procesu sestavení vytvoří Packer dočasné prostředky Azure při sestavování zdrojového virtuálního počítače. Pokud chcete zachytit zdrojový virtuální počítač pro použití jako image, musíte definovat skupinu prostředků. Výstup procesu sestavení Packeru je uložen v této skupině prostředků.
Vytvořte skupinu prostředků pomocí příkazu az group create. Následující příklad vytvoří skupinu prostředků myResourceGroup v umístění eastus:
az group create -n myResourceGroup -l eastus
Vytvoření přihlašovacích údajů Azure
Packer se ověřuje v Azure pomocí instančního objektu. Instanční objekt Azure je identita zabezpečení, kterou můžete používat s aplikacemi, službami a automatizačními nástroji, jako je Packer. Řídíte a definujete oprávnění k operacím, které může instanční objekt provádět v Azure.
Vytvořte instanční objekt pomocí příkazu az ad sp create-for-rbac a vypíšete přihlašovací údaje, které Packer potřebuje:
az ad sp create-for-rbac --role Contributor --scopes /subscriptions/<subscription_id> --query "{ client_id: appId, client_secret: password, tenant_id: tenant }"
Příklad výstupu z předchozích příkazů je následující:
{
"client_id": "f5b6a5cf-fbdf-4a9f-b3b8-3c2cd00225a4",
"client_secret": "0e760437-bf34-4aad-9f8d-870be799c55d",
"tenant_id": "72f988bf-86f1-41af-91ab-2d7cd011db47"
}
Pokud se chcete ověřit v Azure, musíte také získat ID předplatného Azure pomocí příkazu az account show:
az account show --query "{ subscription_id: id }"
Výstup z těchto dvou příkazů použijete v dalším kroku.
Definování šablony Packeru
Pokud chcete vytvořit image, vytvoříte šablonu jako soubor JSON. V šabloně definujete tvůrce a zřizovací nástroje, které provádějí skutečný proces sestavení. Packer má zřizovací nástroj pro Azure , který umožňuje definovat prostředky Azure, jako jsou přihlašovací údaje instančního objektu vytvořené v předchozím kroku.
Vytvořte soubor s názvem ubuntu.json a vložte následující obsah. Zadejte vlastní hodnoty pro následující parametry:
Parametr | Kde získat |
---|---|
client_id | První řádek výstupu příkazu az ad sp create – appId |
client_secret | Druhý řádek výstupu příkazu az ad sp create – heslo |
tenant_id | Třetí řádek výstupu příkazu az ad sp create – tenant |
subscription_id | Výstup z az account show příkazu |
managed_image_resource_group_name | Název skupiny prostředků, kterou jste vytvořili v prvním kroku |
managed_image_name | Název vytvořené image spravovaného disku |
{
"builders": [{
"type": "azure-arm",
"client_id": "f5b6a5cf-fbdf-4a9f-b3b8-3c2cd00225a4",
"client_secret": "0e760437-bf34-4aad-9f8d-870be799c55d",
"tenant_id": "72f988bf-86f1-41af-91ab-2d7cd011db47",
"subscription_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx",
"managed_image_resource_group_name": "myResourceGroup",
"managed_image_name": "myPackerImage",
"os_type": "Linux",
"image_publisher": "canonical",
"image_offer": "0001-com-ubuntu-server-jammy",
"image_sku": "22_04-lts",
"azure_tags": {
"dept": "Engineering",
"task": "Image deployment"
},
"location": "East US",
"vm_size": "Standard_DS2_v2"
}],
"provisioners": [{
"execute_command": "chmod +x {{ .Path }}; {{ .Vars }} sudo -E sh '{{ .Path }}'",
"inline": [
"apt-get update",
"apt-get upgrade -y",
"apt-get -y install nginx",
"/usr/sbin/waagent -force -deprovision+user && export HISTSIZE=0 && sync"
],
"inline_shebang": "/bin/sh -x",
"type": "shell"
}]
}
Poznámka:
Odpovídajícím způsobem image_publisher
nahraďte , image_offer
image_sku
hodnoty a inline
příkazy.
Můžete také vytvořit soubor s názvem ubuntu.pkr.hcl a vložit následující obsah s vlastními hodnotami, které se používají pro výše uvedenou tabulku parametrů.
source "azure-arm" "autogenerated_1" {
azure_tags = {
dept = "Engineering"
task = "Image deployment"
}
client_id = "f5b6a5cf-fbdf-4a9f-b3b8-3c2cd00225a4"
client_secret = "0e760437-bf34-4aad-9f8d-870be799c55d"
image_offer = "0001-com-ubuntu-server-jammy"
image_publisher = "canonical"
image_sku = "22_04-lts"
location = "East US"
managed_image_name = "myPackerImage"
managed_image_resource_group_name = "myResourceGroup"
os_type = "Linux"
subscription_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx"
tenant_id = "72f988bf-86f1-41af-91ab-2d7cd011db47"
vm_size = "Standard_DS2_v2"
}
build {
sources = ["source.azure-arm.autogenerated_1"]
provisioner "shell" {
execute_command = "chmod +x {{ .Path }}; {{ .Vars }} sudo -E sh '{{ .Path }}'"
inline = ["apt-get update", "apt-get upgrade -y", "apt-get -y install nginx", "/usr/sbin/waagent -force -deprovision+user && export HISTSIZE=0 && sync"]
inline_shebang = "/bin/sh -x"
}
}
Tato šablona sestaví image Ubuntu 22.04 LTS, nainstaluje NGINX a pak zruší zřízení virtuálního počítače.
Poznámka:
Pokud tuto šablonu rozbalíte, abyste zřídili přihlašovací údaje uživatele, upravte příkaz zřizovacího modulu, který zruší zřízení agenta Azure tak, aby -deprovision
deprovision+user
místo toho četl.
Příznak +user
odebere všechny uživatelské účty ze zdrojového virtuálního počítače.
Image Build Packeru
Pokud na místním počítači ještě nemáte nainstalovaný Packer, postupujte podle pokynů k instalaci Packeru.
Vytvořte image zadáním souboru šablony Packeru následujícím způsobem:
sudo ./packer build ubuntu.json
Image můžete také sestavit zadáním souboru ubuntu.pkr.hcl následujícím způsobem:
sudo packer build ubuntu.pkr.hcl
Příklad výstupu z předchozích příkazů je následující:
azure-arm output will be in this color.
==> azure-arm: Running builder ...
azure-arm: Creating Azure Resource Manager (ARM) client ...
==> azure-arm: Creating resource group ...
==> azure-arm: -> ResourceGroupName : ‘packer-Resource-Group-swtxmqm7ly’
==> azure-arm: -> Location : ‘East US’
==> azure-arm: -> Tags :
==> azure-arm: ->> dept : Engineering
==> azure-arm: ->> task : Image deployment
==> azure-arm: Validating deployment template ...
==> azure-arm: -> ResourceGroupName : ‘packer-Resource-Group-swtxmqm7ly’
==> azure-arm: -> DeploymentName : ‘pkrdpswtxmqm7ly’
==> azure-arm: Deploying deployment template ...
==> azure-arm: -> ResourceGroupName : ‘packer-Resource-Group-swtxmqm7ly’
==> azure-arm: -> DeploymentName : ‘pkrdpswtxmqm7ly’
==> azure-arm: Getting the VM’s IP address ...
==> azure-arm: -> ResourceGroupName : ‘packer-Resource-Group-swtxmqm7ly’
==> azure-arm: -> PublicIPAddressName : ‘packerPublicIP’
==> azure-arm: -> NicName : ‘packerNic’
==> azure-arm: -> Network Connection : ‘PublicEndpoint’
==> azure-arm: -> IP Address : ‘40.76.218.147’
==> azure-arm: Waiting for SSH to become available...
==> azure-arm: Connected to SSH!
==> azure-arm: Provisioning with shell script: /var/folders/h1/ymh5bdx15wgdn5hvgj1wc0zh0000gn/T/packer-shell868574263
azure-arm: WARNING! The waagent service will be stopped.
azure-arm: WARNING! Cached DHCP leases will be deleted.
azure-arm: WARNING! root password will be disabled. You will not be able to login as root.
azure-arm: WARNING! /etc/resolvconf/resolv.conf.d/tail and /etc/resolvconf/resolv.conf.d/original will be deleted.
azure-arm: WARNING! packer account and entire home directory will be deleted.
==> azure-arm: Querying the machine’s properties ...
==> azure-arm: -> ResourceGroupName : ‘packer-Resource-Group-swtxmqm7ly’
==> azure-arm: -> ComputeName : ‘pkrvmswtxmqm7ly’
==> azure-arm: -> Managed OS Disk : ‘/subscriptions/guid/resourceGroups/packer-Resource-Group-swtxmqm7ly/providers/Microsoft.Compute/disks/osdisk’
==> azure-arm: Powering off machine ...
==> azure-arm: -> ResourceGroupName : ‘packer-Resource-Group-swtxmqm7ly’
==> azure-arm: -> ComputeName : ‘pkrvmswtxmqm7ly’
==> azure-arm: Capturing image ...
==> azure-arm: -> Compute ResourceGroupName : ‘packer-Resource-Group-swtxmqm7ly’
==> azure-arm: -> Compute Name : ‘pkrvmswtxmqm7ly’
==> azure-arm: -> Compute Location : ‘East US’
==> azure-arm: -> Image ResourceGroupName : ‘myResourceGroup’
==> azure-arm: -> Image Name : ‘myPackerImage’
==> azure-arm: -> Image Location : ‘eastus’
==> azure-arm: Deleting resource group ...
==> azure-arm: -> ResourceGroupName : ‘packer-Resource-Group-swtxmqm7ly’
==> azure-arm: Deleting the temporary OS disk ...
==> azure-arm: -> OS Disk : skipping, managed disk was used...
Build ‘azure-arm’ finished.
==> Builds finished. The artifacts of successful builds are:
--> azure-arm: Azure.ResourceManagement.VMImage:
ManagedImageResourceGroupName: myResourceGroup
ManagedImageName: myPackerImage
ManagedImageLocation: eastus
Sestavení virtuálního počítače, spuštění zřizovacích prostředků a vyčištění nasazení trvá několik minut.
Vytvoření virtuálního počítače z image Azure
Z image teď můžete vytvořit virtuální počítač pomocí příkazu az vm create. Zadejte image, kterou jste vytvořili s parametrem --image
. Následující příklad vytvoří virtuální počítač myVM z myPackerImage a vygeneruje klíče SSH, pokud ještě neexistují:
az vm create \
--resource-group myResourceGroup \
--name myVM \
--image myPackerImage \
--admin-username azureuser \
--generate-ssh-keys
Pokud chcete vytvořit virtuální počítače v jiné skupině prostředků nebo oblasti než image Packeru, místo názvu image zadejte ID image. ID image můžete získat pomocí příkazu az image show.
Vytvoření virtuálního počítače trvá několik minut. Po vytvoření virtuálního počítače si poznamenejte publicIpAddress
zobrazení v Azure CLI. Tato adresa se používá pro přístup k webu NGINX přes webový prohlížeč.
Pokud chcete umožnit přístup k virtuálnímu počítači webovému provozu, otevřete port 80 z internetu pomocí příkazu az vm open-port:
az vm open-port \
--resource-group myResourceGroup \
--name myVM \
--port 80
Testování virtuálního počítače a NGINX
Nyní můžete otevřít webový prohlížeč a do adresního řádku zadat http://publicIpAddress
. Zadejte vlastní veřejnou IP adresu získanou při vytváření virtuálního počítače. Výchozí stránka NGINX se zobrazí jako v následujícím příkladu:
Další kroky
V Azure Image Builderu můžete také použít existující skripty zřizovacího modulu Packeru.