Linux görüntüsü oluşturma ve azure işlem galerisine dağıtma

Şunlar için geçerlidir: ✔️ Linux VM'leri ✔️ Esnek ölçek kümeleri

Bu makalede, Azure görüntü oluşturucusunu ve Azure CLI'yı kullanarak Azure İşlem Galerisi'nde (eski adıyla Paylaşılan Görüntü Galerisi) görüntü sürümü oluşturma ve ardından görüntüyü genel olarak dağıtma adımları gösterilmektedir. Bunu Azure PowerShell'i kullanarak da yapabilirsiniz.

Görüntüyü yapılandırmak için örnek bir .json şablonu kullanacağız. Kullanmakta olduğumuz .json dosyası şu şekildedir: helloImageTemplateforSIG.json.

Görüntüyü bir Azure İşlem Galerisi'ne dağıtmak için şablon, şablonun bölümü için distribute sharedImage değerini kullanır.

Sağlayıcıları kaydetme

Azure Image Builder'ı kullanmak için özelliği kaydetmeniz gerekir.

Kaydınızı denetleyin.

az provider show -n Microsoft.VirtualMachineImages | grep registrationState
az provider show -n Microsoft.KeyVault | grep registrationState
az provider show -n Microsoft.Compute | grep registrationState
az provider show -n Microsoft.Storage | grep registrationState
az provider show -n Microsoft.Network | grep registrationState
az provider show -n Microsoft.ContainerInstance | grep registrationState

Kayıtlı demiyorsa, aşağıdakileri çalıştırın:

az provider register -n Microsoft.VirtualMachineImages
az provider register -n Microsoft.Compute
az provider register -n Microsoft.KeyVault
az provider register -n Microsoft.Storage
az provider register -n Microsoft.Network
az provider register -n Microsoft.ContainerInstance

Değişkenleri ve izinleri ayarlama

Bazı bilgileri art arda kullanacağımız için bu bilgileri depolamak için bazı değişkenler oluşturacağız.

Görüntü Oluşturucusu yalnızca kaynak yönetilen görüntüyle aynı Kaynak Grubunda özel görüntüler oluşturmayı destekler. Bu örnekteki kaynak grubu adını, kaynak yönetilen görüntünüzle aynı kaynak grubu olacak şekilde güncelleştirin.

# Resource group name - we are using ibLinuxGalleryRG in this example
sigResourceGroup=ibLinuxGalleryRG
# Datacenter location - we are using West US 2 in this example
location=westus2
# Additional region to replicate the image to - we are using East US in this example
additionalregion=eastus
# name of the Azure Compute Gallery - in this example we are using myGallery
sigName=myIbGallery
# name of the image definition to be created - in this example we are using myImageDef
imageDefName=myIbImageDef
# image distribution metadata reference name
runOutputName=aibLinuxSIG

Abonelik kimliğiniz için bir değişken oluşturun.

subscriptionID=$(az account show --query id --output tsv)

Kaynak grubunu oluşturun.

az group create -n $sigResourceGroup -l $location

Kullanıcı tarafından atanan bir kimlik oluşturma ve kaynak grubunda izinleri ayarlama

Görüntü Oluşturucusu, görüntüyü Azure İşlem Galerisi'ne eklemek için sağlanan kullanıcı kimliğini kullanır. Bu örnekte, görüntüyü galeriye dağıtma işlemini gerçekleştirmek için ayrıntılı eylemleri içeren bir Azure rol tanımı oluşturacaksınız. Rol tanımı daha sonra kullanıcı kimliğine atanır.

# create user assigned identity for image builder to access the storage account where the script is located
identityName=aibBuiUserId$(date +'%s')
az identity create -g $sigResourceGroup -n $identityName

# get identity id
imgBuilderCliId=$(az identity show -g $sigResourceGroup -n $identityName --query clientId -o tsv)

# get the user identity URI, needed for the template
imgBuilderId=/subscriptions/$subscriptionID/resourcegroups/$sigResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/$identityName

# this command will download an Azure role definition template, and update the template with the parameters specified earlier.
curl https://raw.githubusercontent.com/azure/azvmimagebuilder/master/solutions/12_Creating_AIB_Security_Roles/aibRoleImageCreation.json -o aibRoleImageCreation.json

imageRoleDefName="Azure Image Builder Image Def"$(date +'%s')

# update the definition
sed -i -e "s/<subscriptionID>/$subscriptionID/g" aibRoleImageCreation.json
sed -i -e "s/<rgName>/$sigResourceGroup/g" aibRoleImageCreation.json
sed -i -e "s/Azure Image Builder Service Image Creation Role/$imageRoleDefName/g" aibRoleImageCreation.json

# create role definitions
az role definition create --role-definition ./aibRoleImageCreation.json

# grant role definition to the user assigned identity
az role assignment create \
    --assignee $imgBuilderCliId \
    --role "$imageRoleDefName" \
    --scope /subscriptions/$subscriptionID/resourceGroups/$sigResourceGroup

Görüntü Oluşturucusu'nu bir Azure İşlem Galerisi ile kullanmak için mevcut bir galeriye ve görüntü tanımına sahip olmanız gerekir. Görüntü Oluşturucusu galeriyi ve görüntü tanımını sizin için oluşturmaz.

Kullanılacak bir galeriniz ve görüntü tanımınız yoksa, bunları oluşturarak başlayın. İlk olarak bir galeri oluşturun.

az sig create \
    -g $sigResourceGroup \
    --gallery-name $sigName

Ardından bir görüntü tanımı oluşturun.

az sig image-definition create \
   -g $sigResourceGroup \
   --gallery-name $sigName \
   --gallery-image-definition $imageDefName \
   --publisher myIbPublisher \
   --offer myOffer \
   --sku 18.04-LTS \
   --os-type Linux

.json dosyasını indirme ve yapılandırma

.json şablonunu indirin ve değişkenlerinizle yapılandırın.

curl https://raw.githubusercontent.com/azure/azvmimagebuilder/master/quickquickstarts/1_Creating_a_Custom_Linux_Shared_Image_Gallery_Image/helloImageTemplateforSIG.json -o helloImageTemplateforSIG.json
sed -i -e "s/<subscriptionID>/$subscriptionID/g" helloImageTemplateforSIG.json
sed -i -e "s/<rgName>/$sigResourceGroup/g" helloImageTemplateforSIG.json
sed -i -e "s/<imageDefName>/$imageDefName/g" helloImageTemplateforSIG.json
sed -i -e "s/<sharedImageGalName>/$sigName/g" helloImageTemplateforSIG.json
sed -i -e "s/<region1>/$location/g" helloImageTemplateforSIG.json
sed -i -e "s/<region2>/$additionalregion/g" helloImageTemplateforSIG.json
sed -i -e "s/<runOutputName>/$runOutputName/g" helloImageTemplateforSIG.json
sed -i -e "s%<imgBuilderId>%$imgBuilderId%g" helloImageTemplateforSIG.json

Görüntü sürümünü oluşturma

Sonraki bölümde galeride görüntü sürümü oluşturulacaktır.

Görüntü yapılandırmasını Azure Image Builder hizmetine gönderin.

az resource create \
    --resource-group $sigResourceGroup \
    --properties @helloImageTemplateforSIG.json \
    --is-full-object \
    --resource-type Microsoft.VirtualMachineImages/imageTemplates \
    -n helloImageTemplateforSIG01

Görüntü derlemesini başlatın.

az resource invoke-action \
     --resource-group $sigResourceGroup \
     --resource-type  Microsoft.VirtualMachineImages/imageTemplates \
     -n helloImageTemplateforSIG01 \
     --action Run

Görüntüyü oluşturmak ve her iki bölgeye çoğaltmak biraz zaman alabilir. VM oluşturmaya geçmeden önce bu bölümün tamamlanmasını bekleyin.

Sanal makineyi oluşturma

Azure Görüntü Oluşturucusu tarafından oluşturulan görüntü sürümünden bir VM oluşturun.

az vm create \
  --resource-group $sigResourceGroup \
  --name myAibGalleryVM \
  --admin-username aibuser \
  --location $location \
  --image "/subscriptions/$subscriptionID/resourceGroups/$sigResourceGroup/providers/Microsoft.Compute/galleries/$sigName/images/$imageDefName/versions/latest" \
  --generate-ssh-keys

VM ile SSH bağlantısı kurun.

ssh aibuser@<publicIpAddress>

SSH bağlantınız kurulur kurulmaz görüntünün Günün İletisi ile özelleştirildiğini görmeniz gerekir!

*******************************************************
**            This VM was built from the:            **
**      !! AZURE VM IMAGE BUILDER Custom Image !!    **
**         You have just been Customized :-)         **
*******************************************************

Kaynakları temizleme

Aynı görüntünün yeni bir sürümünü oluşturmak için görüntü sürümünü yeniden kullanmayı denemek istiyorsanız, sonraki adımları atlayın ve Azure Görüntü Oluşturucusu'nu kullanarak başka bir görüntü sürümü oluşturun.

Bu işlem, oluşturulan görüntüyü ve diğer tüm kaynak dosyalarını siler. Kaynakları silmeden önce bu dağıtımı tamamladığınızdan emin olun.

Galeri kaynaklarını silerken, bunları oluşturmak için kullanılan görüntü tanımını silebilmeniz için önce tüm görüntü sürümlerini silmeniz gerekir. Bir galeriyi silmek için önce galerideki tüm resim tanımlarını silmiş olmanız gerekir.

Görüntü oluşturucu şablonunu silin.

az resource delete \
    --resource-group $sigResourceGroup \
    --resource-type Microsoft.VirtualMachineImages/imageTemplates \
    -n helloImageTemplateforSIG01

İzin atamalarını, rolleri ve kimliği silme

az role assignment delete \
    --assignee $imgBuilderCliId \
    --role "$imageRoleDefName" \
    --scope /subscriptions/$subscriptionID/resourceGroups/$sigResourceGroup

az role definition delete --name "$imageRoleDefName"

az identity delete --ids $imgBuilderId

Görüntü oluşturucusu tarafından oluşturulan görüntü sürümünü alın, bu her zaman ile 0.başlar ve ardından görüntü sürümünü silin

sigDefImgVersion=$(az sig image-version list \
   -g $sigResourceGroup \
   --gallery-name $sigName \
   --gallery-image-definition $imageDefName \
   --subscription $subscriptionID --query [].'name' -o json | grep 0. | tr -d '"')
az sig image-version delete \
   -g $sigResourceGroup \
   --gallery-image-version $sigDefImgVersion \
   --gallery-name $sigName \
   --gallery-image-definition $imageDefName \
   --subscription $subscriptionID

Görüntü tanımını silin.

az sig image-definition delete \
   -g $sigResourceGroup \
   --gallery-name $sigName \
   --gallery-image-definition $imageDefName \
   --subscription $subscriptionID

Galeriyi silin.

az sig delete -r $sigName -g $sigResourceGroup

Kaynak grubunu silin.

az group delete -n $sigResourceGroup -y

Sonraki adımlar

Azure İşlem Galerileri hakkında daha fazla bilgi edinin.