Azure'da Linux sanal makine görüntüleri oluşturmak için Packer'ı kullanma
Şunlar için geçerlidir: ✔️ Linux VM'leri ✔️ Esnek ölçek kümeleri
Azure'daki her sanal makine (VM), Linux dağıtımını ve işletim sistemi sürümünü tanımlayan bir görüntüden oluşturulur. Görüntüler önceden yüklenmiş uygulamaları ve yapılandırmaları içerebilir. Azure Market, en yaygın dağıtımlar ve uygulama ortamları için birçok birinci ve üçüncü taraf görüntüsü sağlar veya ihtiyaçlarınıza göre kendi özel görüntülerinizi oluşturabilirsiniz. Bu makalede, Azure'da özel görüntüleri tanımlamak ve oluşturmak için açık kaynak aracı Packer'ın nasıl kullanılacağı ayrıntılı olarak anlatlanmaktadır.
Not
Azure'da artık kendi özel görüntülerinizi tanımlamaya ve oluşturmaya yönelik bir Azure Image Builder hizmeti vardır. Azure Image Builder, Packer üzerinde oluşturulmuş olduğundan, mevcut Packer kabuk sağlama betiklerinizi bile kullanabilirsiniz. Azure Image Builder'ı kullanmaya başlamak için bkz . Azure Image Builder ile Linux VM oluşturma.
Azure kaynak grubu oluşturma
Derleme işlemi sırasında Packer, kaynak VM'yi oluştururken geçici Azure kaynakları oluşturur. Bu kaynak VM'yi görüntü olarak kullanmak üzere yakalamak için bir kaynak grubu tanımlamanız gerekir. Packer derleme işleminin çıkışı bu kaynak grubunda depolanır.
az group create ile bir kaynak grubu oluşturun. Aşağıdaki örnek eastus konumunda myResourceGroup adlı bir kaynak grubu oluşturur:
az group create -n myResourceGroup -l eastus
Azure kimlik bilgilerini oluşturma
Packer, hizmet sorumlusu kullanarak Azure'da kimlik doğrulaması yapar. Azure hizmet sorumlusu, Packer gibi uygulamalar, hizmetler ve otomasyon araçlarıyla kullanabileceğiniz bir güvenlik kimliğidir. Hizmet sorumlusunun Azure'da gerçekleştirebileceği işlemlere ilişkin izinleri denetler ve tanımlarsınız.
az ad sp create-for-rbac ile bir hizmet sorumlusu oluşturun ve Packer'ın ihtiyaç duyduğu kimlik bilgilerini çıktı olarak kullanın:
az ad sp create-for-rbac --role Contributor --scopes /subscriptions/<subscription_id> --query "{ client_id: appId, client_secret: password, tenant_id: tenant }"
Yukarıdaki komutlardan alınan çıktıya örnek olarak şunlar verilmiştir:
{
"client_id": "f5b6a5cf-fbdf-4a9f-b3b8-3c2cd00225a4",
"client_secret": "0e760437-bf34-4aad-9f8d-870be799c55d",
"tenant_id": "72f988bf-86f1-41af-91ab-2d7cd011db47"
}
Azure'da kimlik doğrulaması yapmak için az account show ile Azure abonelik kimliğinizi de edinmeniz gerekir:
az account show --query "{ subscription_id: id }"
Sonraki adımda bu iki komutun çıkışını kullanacaksınız.
Paketleyici şablonunu tanımlama
Görüntü oluşturmak için JSON dosyası olarak bir şablon oluşturursunuz. Şablonda, gerçek derleme işlemini gerçekleştiren oluşturucuları ve hazırlayıcıları tanımlarsınız. Packer,önceki adımda oluşturulan hizmet sorumlusu kimlik bilgileri gibi Azure kaynaklarını tanımlamanıza olanak tanıyan bir Azure sağlama aracına sahiptir.
ubuntu.json adlı bir dosya oluşturun ve aşağıdaki içeriği yapıştırın. Aşağıdaki parametreler için kendi değerlerinizi girin:
Parametre | Nereden elde edilir? |
---|---|
client_id | Create komutundan az ad sp ilk çıktı satırı - appId |
client_secret | Create komutundan az ad sp ikinci çıktı satırı - parola |
tenant_id | Create komutundan az ad sp üçüncü çıktı satırı - kiracı |
subscription_id | Komutun çıktısı az account show |
managed_image_resource_group_name | İlk adımda oluşturduğunuz kaynak grubunun adı |
managed_image_name | Oluşturulan yönetilen disk görüntüsünün adı |
{
"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"
}]
}
Not
image_publisher
, , image_offer
image_sku
değerlerini ve inline
komutlarını buna göre değiştirin.
Ayrıca ubuntu.pkr.hcl adlı bir dosya oluşturabilir ve yukarıdaki parametreler tablosu için kullanılan aşağıdaki içeriği kendi değerlerinizle yapıştırabilirsiniz.
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"
}
}
Bu şablon bir Ubuntu 22.04 LTS görüntüsü oluşturur, NGINX yükler ve ardından VM'nin sağlamasını siler.
Not
Kullanıcı kimlik bilgilerini sağlamak için bu şablonu genişletirseniz, Azure aracısının sağlamasını kaldıran sağlama komutunu yerine deprovision+user
okuması -deprovision
için ayarlayın.
bayrağı, +user
kaynak VM'den tüm kullanıcı hesaplarını kaldırır.
Derleme Paketleyicisi görüntüsü
Yerel makinenizde Packer yüklü değilse Packer yükleme yönergelerini izleyin.
Packer şablon dosyanızı aşağıdaki gibi belirterek görüntüyü oluşturun:
sudo ./packer build ubuntu.json
Görüntüyü, ubuntu.pkr.hcl dosyasını aşağıdaki gibi belirterek de oluşturabilirsiniz:
sudo packer build ubuntu.pkr.hcl
Yukarıdaki komutlardan alınan çıktıya örnek olarak şunlar verilmiştir:
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
Packer'ın VM'yi oluşturması, hazırlayıcıları çalıştırması ve dağıtımı temizlemesi birkaç dakika sürer.
Azure Görüntüsü'nden VM oluşturma
Artık az vm create ile Görüntünüzden bir VM oluşturabilirsiniz. parametresiyle --image
oluşturduğunuz Görüntüyü belirtin. Aşağıdaki örnek, myPackerImage'dan myVM adlı bir VM oluşturur ve henüz yoksa SSH anahtarları oluşturur:
az vm create \
--resource-group myResourceGroup \
--name myVM \
--image myPackerImage \
--admin-username azureuser \
--generate-ssh-keys
Packer görüntünüzden farklı bir kaynak grubunda veya bölgede VM oluşturmak istiyorsanız, görüntü adı yerine görüntü kimliğini belirtin. Az image show ile görüntü kimliğini alabilirsiniz.
VM'nin oluşturulması birkaç dakika sürer. VM oluşturulduktan sonra Azure CLI tarafından görüntülenenleri publicIpAddress
not alın. Bu adres, NGINX sitesine bir web tarayıcısı üzerinden erişmek için kullanılır.
Web trafiğinin VM’nize erişmesine izin vermek için, az vm open-port komutuyla İnternet’te 80 numaralı bağlantı noktasını açın:
az vm open-port \
--resource-group myResourceGroup \
--name myVM \
--port 80
VM ve NGINX'i test edin
Artık bir web tarayıcısı açıp adres çubuğuna http://publicIpAddress
ifadesini girebilirsiniz. VM oluşturma işleminden kendi herkese açık IP adresinizi sağlayın. Varsayılan NGINX sayfası aşağıdaki örnekte gösterildiği gibi görüntülenir:
Sonraki adımlar
Azure Görüntü Oluşturucusu ile mevcut Packer sağlama betiklerini de kullanabilirsiniz.