Udostępnij za pośrednictwem


Tworzenie obrazu systemu Linux i dystrybuowanie go do galerii obliczeń platformy Azure

Dotyczy: ✔️ Maszyny wirtualne z systemem Linux — elastyczne zestawy skalowania ✔️

W tym artykule pokazano, jak za pomocą narzędzia Azure Image Builder i interfejsu wiersza polecenia platformy Azure utworzyć wersję obrazu w galerii usługi Azure Compute ( wcześniej znanej jako Galeria obrazów udostępnionych), a następnie rozpowszechnić obraz globalnie. Można to również zrobić przy użyciu programu Azure PowerShell.

Użyjemy przykładowego szablonu .json do skonfigurowania obrazu. Używany plik .json to: helloImageTemplateforSIG.json.

Aby rozpowszechnić obraz w galerii obliczeniowej platformy Azure, szablon używa funkcji sharedImage jako wartości distribute sekcji szablonu.

Rejestrowanie dostawców

Aby użyć narzędzia Azure Image Builder, musisz zarejestrować tę funkcję.

Sprawdź rejestrację.

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

Jeśli nie zostaną zarejestrowane, uruchom następujące polecenie:

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

Ustawianie zmiennych i uprawnień

Będziemy używać niektórych informacji wielokrotnie, więc utworzymy pewne zmienne do przechowywania tych informacji.

Program Image Builder obsługuje tylko tworzenie obrazów niestandardowych w tej samej grupie zasobów co źródłowy obraz zarządzany. Zaktualizuj nazwę grupy zasobów w tym przykładzie, aby być tą samą grupą zasobów co źródłowy obraz zarządzany.

# 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

Utwórz zmienną dla identyfikatora subskrypcji.

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

Utwórz grupę zasobów.

az group create -n $sigResourceGroup -l $location

Tworzenie tożsamości przypisanej przez użytkownika i ustawianie uprawnień w grupie zasobów

Narzędzie Image Builder używa tożsamości użytkownika udostępnionej do wstrzykiwania obrazu do galerii obliczeń platformy Azure. W tym przykładzie utworzysz definicję roli platformy Azure zawierającą szczegółowe akcje umożliwiające dystrybucję obrazu do galerii. Definicja roli zostanie następnie przypisana do tożsamości użytkownika.

# 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

Aby używać narzędzia Image Builder z galerią obliczeń platformy Azure, musisz mieć istniejącą galerię i definicję obrazu. Narzędzie Image Builder nie utworzy galerii i definicji obrazu.

Jeśli nie masz jeszcze galerii i definicji obrazu do użycia, zacznij od ich utworzenia. Najpierw utwórz galerię.

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

Następnie utwórz definicję obrazu.

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

Pobieranie i konfigurowanie .json

Pobierz szablon .json i skonfiguruj go przy użyciu zmiennych.

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

Tworzenie wersji obrazu

W następnej części zostanie utworzona wersja obrazu w galerii.

Prześlij konfigurację obrazu do usługi Azure Image Builder.

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

Uruchom kompilację obrazu.

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

Tworzenie obrazu i replikowanie go do obu regionów może trochę potrwać. Poczekaj na zakończenie tej części przed przejściem do tworzenia maszyny wirtualnej.

Tworzenie maszyny wirtualnej

Utwórz maszynę wirtualną na podstawie wersji obrazu utworzonej przez program 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

Nawiąż połączenie SSH z maszyną wirtualną.

ssh aibuser@<publicIpAddress>

Powinien zostać wyświetlony obraz dostosowany z komunikatem dnia po nawiązaniu połączenia SSH.

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

Czyszczenie zasobów

Jeśli chcesz teraz spróbować ponownie skompilować wersję obrazu, aby utworzyć nową wersję tego samego obrazu, pomiń następne kroki i przejdź do tematu Używanie narzędzia Azure Image Builder do utworzenia innej wersji obrazu.

Spowoduje to usunięcie utworzonego obrazu wraz ze wszystkimi innymi plikami zasobów. Przed usunięciem zasobów upewnij się, że zostało to ukończone.

Podczas usuwania zasobów galerii należy usunąć wszystkie wersje obrazów, zanim będzie można usunąć definicję obrazu użytą do ich utworzenia. Aby usunąć galerię, musisz najpierw usunąć wszystkie definicje obrazów w galerii.

Usuń szablon konstruktora obrazów.

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

Usuwanie przypisań uprawnień, ról i tożsamości

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

az role definition delete --name "$imageRoleDefName"

az identity delete --ids $imgBuilderId

Pobierz wersję obrazu utworzoną przez konstruktora obrazów. Zawsze zaczyna się od 0., a następnie usuń wersję obrazu

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

Usuń definicję obrazu.

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

Usuń galerię.

az sig delete -r $sigName -g $sigResourceGroup

Usuń grupę zasobów.

az group delete -n $sigResourceGroup -y

Następne kroki

Dowiedz się więcej o galeriach obliczeniowych platformy Azure.