Vytvoření image Linuxu a její distribuce do Galerie výpočetních prostředků Azure
Platí pro: ✔️ Flexibilní škálovací sady virtuálních počítačů s Linuxem ✔️
V tomto článku se dozvíte, jak pomocí Azure Image Builderu a Azure CLI vytvořit verzi image v Galerii výpočetních prostředků Azure (dříve označovanou jako Sdílená galerie imagí) a pak ji globálně distribuovat. Můžete to také provést pomocí Azure PowerShellu.
K konfiguraci image použijeme ukázkovou šablonu .json. Soubor .json, který používáme, je tady: helloImageTemplateforSIG.json.
Pokud chcete distribuovat image do galerie služby Azure Compute, šablona jako hodnotu oddílu distribute
šablony používá sharedImage.
Registrace poskytovatelů
Pokud chcete použít Azure Image Builder, musíte tuto funkci zaregistrovat.
Zkontrolujte registraci.
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
Pokud nejsou zaregistrovaní, spusťte následující příkaz:
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
Nastavení proměnných a oprávnění
Budeme opakovaně používat některé části informací, takže vytvoříme proměnné pro uložení těchto informací.
Image Builder podporuje vytváření vlastních imagí pouze ve stejné skupině prostředků jako zdrojová spravovaná image. Aktualizujte název skupiny prostředků v tomto příkladu tak, aby byl stejná jako vaše zdrojová spravovaná image.
# 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
Vytvořte proměnnou pro ID předplatného.
subscriptionID=$(az account show --query id --output tsv)
Vytvořte skupinu prostředků.
az group create -n $sigResourceGroup -l $location
Vytvoření identity přiřazené uživatelem a nastavení oprávnění pro skupinu prostředků
Image Builder používá uživatelskou identitu , která je k vložení image do Galerie výpočetních prostředků Azure. V tomto příkladu vytvoříte definici role Azure s podrobnými akcemi pro distribuci image do galerie. Definice role se pak přiřadí k identitě uživatele.
# 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
Vytvoření definice a galerie obrázků
Pokud chcete použít Image Builder s Galerií výpočetních prostředků Azure, musíte mít existující galerii a definici image. Image Builder za vás nevytvoří galerii a definici obrázku.
Pokud ještě nemáte k dispozici galerii a definici obrázku, začněte jejich vytvořením. Nejprve vytvořte galerii.
az sig create \
-g $sigResourceGroup \
--gallery-name $sigName
Pak vytvořte definici image.
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
Stažení a konfigurace .json
Stáhněte si šablonu .json a nakonfigurujte ji s vašimi proměnnými.
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
Vytvoření verze image
Tato další část vytvoří verzi image v galerii.
Odešlete konfiguraci image do služby Azure Image Builder.
az resource create \
--resource-group $sigResourceGroup \
--properties @helloImageTemplateforSIG.json \
--is-full-object \
--resource-type Microsoft.VirtualMachineImages/imageTemplates \
-n helloImageTemplateforSIG01
Spusťte sestavení image.
az resource invoke-action \
--resource-group $sigResourceGroup \
--resource-type Microsoft.VirtualMachineImages/imageTemplates \
-n helloImageTemplateforSIG01 \
--action Run
Vytvoření image a jeho replikace do obou oblastí může chvíli trvat. Než přejdete na vytvoření virtuálního počítače, počkejte, až se tato část dokončí.
Vytvoření virtuálního počítače
Vytvořte virtuální počítač z verze image, kterou vytvořil Azure Image Builder.
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
SSH do virtuálního počítače.
ssh aibuser@<publicIpAddress>
Měli byste vidět, že obrázek byl přizpůsoben zprávou dne , jakmile se naváže připojení SSH!
*******************************************************
** This VM was built from the: **
** !! AZURE VM IMAGE BUILDER Custom Image !! **
** You have just been Customized :-) **
*******************************************************
Vyčištění prostředků
Pokud teď chcete zkusit znovu použít verzi image a vytvořit novou verzi stejné image, přeskočte další kroky a pokračujte v použití Azure Image Builderu a vytvořte jinou verzi image.
Tím se odstraní vytvořená image spolu se všemi ostatními soubory prostředků. Před odstraněním prostředků se ujistěte, že jste dokončili toto nasazení.
Při odstraňování prostředků galerie potřebujete odstranit všechny verze imagí, abyste mohli odstranit definici image použitou k jejich vytvoření. Pokud chcete odstranit galerii, musíte nejprve odstranit všechny definice obrázků v galerii.
Odstraňte šablonu tvůrce obrázků.
az resource delete \
--resource-group $sigResourceGroup \
--resource-type Microsoft.VirtualMachineImages/imageTemplates \
-n helloImageTemplateforSIG01
Odstranění přiřazení oprávnění, rolí a identity
az role assignment delete \
--assignee $imgBuilderCliId \
--role "$imageRoleDefName" \
--scope /subscriptions/$subscriptionID/resourceGroups/$sigResourceGroup
az role definition delete --name "$imageRoleDefName"
az identity delete --ids $imgBuilderId
Získejte verzi image vytvořenou tvůrcem imagí, to vždy začíná 0.
a pak odstraňte verzi image.
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
Odstraňte definici obrázku.
az sig image-definition delete \
-g $sigResourceGroup \
--gallery-name $sigName \
--gallery-image-definition $imageDefName \
--subscription $subscriptionID
Odstraňte galerii.
az sig delete -r $sigName -g $sigResourceGroup
Odstraňte skupinu prostředků.
az group delete -n $sigResourceGroup -y
Další kroky
Přečtěte si další informace o galeriích Azure Compute.