Sdílet prostřednictvím


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

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.