Delen via


Een installatiekopieën maken voor virtuele Azure Operator Nexus-machine

In dit artikel leert u hoe u een containerinstallatiekopieën maakt die kunnen worden gebruikt om een virtuele machine te maken in Operator Nexus. In het bijzonder leert u hoe u een virtuele schijf toevoegt aan de containerinstallatiekopieën. Zodra de containerinstallatiekopie is gebouwd en naar een Azure-containerregister is gepusht, kan deze worden gebruikt om een virtuele machine te maken in Operator Nexus.

Vereisten

Voordat u begint met het maken van een VM-installatiekopieën (virtuele machine), moet u ervoor zorgen dat u aan de volgende vereisten voldoet:

  • Installeer de nieuwste versie van de benodigde Azure CLI-extensies.

  • Voor dit artikel is versie 2.49.0 of hoger van de Azure CLI vereist. Als u Azure Cloud Shell gebruikt, is de nieuwste versie al geïnstalleerd.

  • Azure Container Registry (ACR): Stel een werkende Azure Container Registry in om uw containerinstallatiekopieën op te slaan en te beheren. ACR biedt een beveiligd en persoonlijk register voor het opslaan van Docker-installatiekopieën die worden gebruikt tijdens het maken van uw VM-installatiekopie. U kunt een ACR maken door de officiële documentatie van Azure Container Registry te volgen.

  • Docker: Installeer Docker op uw lokale computer. Docker is een platform waarmee u toepassingen kunt bouwen, verpakken en distribueren als lichtgewicht containers. U gebruikt Docker om uw VM-installatiekopieën te bouwen en te verpakken. U kunt Docker downloaden van de officiële website van Docker.

Notitie

U kunt de az login opdracht gebruiken om te verifiëren met Azure en het script voert automatisch de ACR-aanmelding uit met behulp van de opgegeven ACR-naam en abonnements-id. Als u de Azure CLI niet op uw computer hebt geïnstalleerd, kunt u in plaats daarvan uw gebruikersnaam en wachtwoord opgeven voor ACR-aanmelding.

Zorg ervoor dat u een operationele Azure Container Registry (ACR) en Docker op uw computer hebt geïnstalleerd voordat u doorgaat met het maken van een VM-installatiekopie. Maak uzelf vertrouwd met het gebruik en de functionaliteit van ACR en Docker, omdat ze essentieel zijn voor het beheren van uw containerinstallatiekopieën en het bouwen van de VM-installatiekopieën.

Vereisten voor installatiekopieën van virtuele machines

  • Zorg ervoor dat uw VF-installatiekopie (Virtual Network Function) de qcow2-indeling heeft die kan worden opgestart met cloud-init.

  • U moet het opstartlaadprogramma, de kernel en het init-systeem in uw installatiekopie configureren om een seriële console op basis van tekst in te schakelen. Deze configuratie is vereist om consoleondersteuning in te schakelen voor uw virtuele machine (VM). Zorg ervoor dat de seriële poortinstellingen op uw systeem en terminal overeenkomen om de juiste communicatie tot stand te brengen.

  • U moet ervoor zorgen dat uw VM-installatiekopieën cloud-init versie 2 ondersteunen, waardoor geavanceerde configuratieopties worden ingeschakeld tijdens het initialisatieproces van de VM.

  • U moet ervoor zorgen dat uw VM-installatiekopieën cloud-init met de nocloud gegevensbron bevatten. nocloud gegevensbron maakt initiële configuratie en aanpassing mogelijk tijdens het inrichten van vm's.

  • Schijven moeten in de /disk map in de container worden geplaatst.

  • Raw- en qcow2-indelingen worden ondersteund. Qcow2 wordt aanbevolen om de grootte van de containerinstallatiekopieën te verminderen.

  • Containerschijven moeten zijn gebaseerd op de scratch installatiekopieën, een lege basisinstallatiekopieën die geen andere bestanden of mappen dan de installatiekopieën zelf bevatten. Als scratch u de basisinstallatiekopieën gebruikt, zorgt u ervoor dat de containerinstallatiekopieën zo klein mogelijk zijn en alleen de benodigde bestanden voor de VNF bevatten.

Stappen voor het maken van een installatiekopieën voor de virtuele Operator Nexus-machine

U kunt een installatiekopieën voor uw VNF maken met behulp van het opgegeven script. Er wordt een Dockerfile gegenereerd waarmee het VNF-schijfinstallatiekopieënbestand wordt gekopieerd naar de map van /disk de container.

Notitie

Het volgende script wordt als voorbeeld gegeven. Als u wilt, kunt u de containerinstallatiekopieën handmatig maken en pushen in plaats van het script te volgen.

De volgende omgevingsvariabelen worden gebruikt om het script te configureren voor het maken van een VM-installatiekopieën (virtuele machine) voor uw VNF. Wijzig en exporteer deze variabelen met uw eigen waarden voordat u het script uitvoert:


# Azure subscription ID (provide if not using username-password)
export SUBSCRIPTION="your_subscription_id"

# (Mandatory) Azure Container Registry name
export ACR_NAME="your_acr_name"

# (Mandatory) Name of the container image
export CONTAINER_IMAGE_NAME="your_container_image_name"

# (Mandatory) Tag for the container image
export CONTAINER_IMAGE_TAG="your_container_image_tag"

# (Mandatory) VNF image (URL, local file, or full local path)
export VNF_IMAGE="your_vnf_image"

# (Optional) ACR URL (leave empty to derive from ACR_NAME)
export ACR_URL=""

# (Optional) ACR login username (provide if not using subscription)
export USERNAME=""

# (Optional) ACR login password (provide if not using subscription)
export PASSWORD=""

Als u een VM-installatiekopieën wilt maken voor de functie virtual network (VNF), slaat u het opgegeven script op als create-container-disk.sh, stelt u de vereiste omgevingsvariabelen in en voert u het script uit.

#!/bin/bash

# Define the required environment variables
required_vars=(
    "ACR_NAME"                  # Azure Container Registry name
    "CONTAINER_IMAGE_NAME"      # Name of the container image
    "CONTAINER_IMAGE_TAG"       # Tag for the container image
    "VNF_IMAGE"                 # VNF image (URL or file path)
)

# Verify if required environment variables are set
for var in "${required_vars[@]}"; do
    if [ -z "${!var}" ]; then
        echo "Error: $var environment variable is not set."
        exit 1
    fi
done

# Check if either SUBSCRIPTION or USERNAME with PASSWORD is provided
if [ -z "$SUBSCRIPTION" ] && [ -z "$USERNAME" ] && [ -z "$PASSWORD" ]; then
    echo "Error: Either provide SUBSCRIPTION or USERNAME with PASSWORD."
    exit 1
fi

# Set default value for DOCKERFILE_NAME if not set
if [ -z "$DOCKERFILE_NAME" ]; then
    DOCKERFILE_NAME="nexus-vm-img-dockerfile"
fi

# Check if ACR_URL is already set by the user
if [ -z "$ACR_URL" ]; then
    # Derive the ACR URL from the ACR_NAME
    ACR_URL="$ACR_NAME.azurecr.io"
fi

# Initialize variables for downloaded/copied files
downloaded_files=()

# Function to clean up downloaded files
cleanup() {
    for file in "${downloaded_files[@]}"; do
        if [ -f "$file" ]; then
            rm "$file"
        fi
    done
}

# Register the cleanup function to be called on exit
trap cleanup EXIT

# Check if the VNF image is a URL or a local file
if [[ "$VNF_IMAGE" == http* ]]; then
    # Use curl to download the file
    filename=$(basename "$VNF_IMAGE")
    # Download the VNF image file and save the output to a file
    curl -f -Lo "$filename" "$VNF_IMAGE"
    if [ $? -ne 0 ]; then
        echo "Error: Failed to download file."
        exit 1
    fi
    # Add the downloaded file to the list for cleanup
    downloaded_files+=("$filename")
elif [[ "$VNF_IMAGE" == /* ]]; then
    # Use the provided full local path
    filename=$(basename "$VNF_IMAGE")
    # Copy the VNF image file to the current directory for cleanup
    cp "$VNF_IMAGE" "./$filename"
    # Add the copied file to the list for cleanup
    downloaded_files+=("$filename")
else
    # Assume it's a local file in the current directory
    filename="$VNF_IMAGE"
fi

# Check if the file exists
if [ ! -f "$filename" ]; then
    echo "Error: File $filename does not exist."
    exit 1
fi

# Create a Dockerfile that copies the VNF image file into the container's /disk directory
# The containerDisk needs to be readable for the user with the UID 107 (qemu).
cat <<EOF > "$DOCKERFILE_NAME"
FROM scratch
ADD --chown=107:107 "$filename" /disk/
EOF

# Build the Docker image and tag it to the Azure Container Registry
docker build -f "$DOCKERFILE_NAME" -t "$CONTAINER_IMAGE_NAME:$CONTAINER_IMAGE_TAG" .

# Log in to Azure Container Registry
if [ -n "$USERNAME" ] && [ -n "$PASSWORD" ]; then
    docker login "$ACR_NAME.azurecr.io" -u "$USERNAME" -p "$PASSWORD"
else
    az acr login --name "$ACR_NAME" --subscription "$SUBSCRIPTION"
fi

docker tag "$CONTAINER_IMAGE_NAME:$CONTAINER_IMAGE_TAG" "$ACR_URL/$CONTAINER_IMAGE_NAME:$CONTAINER_IMAGE_TAG"
docker push "$ACR_URL/$CONTAINER_IMAGE_NAME:$CONTAINER_IMAGE_TAG"

# Remove the downloaded/copied files
cleanup

rm "$DOCKERFILE_NAME"

echo "VNF image $ACR_URL/$CONTAINER_IMAGE_NAME:$CONTAINER_IMAGE_TAG created successfully!"

Nadat u het script hebt uitgevoerd, hebt u een VM-installatiekopieën die zijn afgestemd op de functie van uw virtuele netwerk (VNF). U kunt deze installatiekopieën gebruiken om uw VNF te implementeren.

Notitie

Om ervoor te zorgen dat de VNF-installatiekopie correct kan worden opgehaald, moet u ervoor zorgen dat de ACR-URL zich in de lijst met uitgaand verkeer bevindt van het cloudservicesnetwerk dat u gaat gebruiken met de virtuele machine van Operator Nexus.

Voorbeeld van gebruik

  1. Stel de vereiste omgevingsvariabelen in.

    export SUBSCRIPTION=""00000000-0000-0000-0000-000000000000""
    export ACR_NAME="myvnfacr"
    export CONTAINER_IMAGE_NAME="ubuntu"
    export CONTAINER_IMAGE_TAG="20.04"
    export VNF_IMAGE="https://cloud-images.ubuntu.com/releases/focal/release/ubuntu-20.04-server-cloudimg-amd64.img"
    
  2. Sla het opgegeven script op als create-container-disk.sh en maak het uitvoerbaar.

    chmod +x create-container-disk.sh
    
  3. Voer het script uit.

    $ ./create-container-disk.sh
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
    100  622M  100  622M    0     0  24.7M      0  0:00:25  0:00:25 --:--:-- 26.5M
    [+] Building 36.6s (5/5) FINISHED
     => [internal] load .dockerignore                                                              0.1s
     => => transferring context: 2B                                                                0.0s
     => [internal] load build definition from nexus-vm-img-dockerfile                              0.1s
     => => transferring dockerfile: 137B                                                           0.0s
     => [internal] load build context                                                              36.4s
     => => transferring context: 652.33MB                                                          36.3s
     => CACHED [1/1] ADD --chown=107:107 ubuntu-20.04-server-cloudimg-amd64.img /disk/             0.0s
     => exporting to image                                                                         0.0s
     => => exporting layers                                                                        0.0s
     => => writing image sha256:5b5f531c132cdbba202136b5ec41c9bfe9d91beeb5acee617c1ef902df4ca772   0.0s
     => => naming to docker.io/library/ubuntu:20.04                                                0.0s
    Login Succeeded
    The push refers to repository [myvnfacr.azurecr.io/ubuntu]
    b86efae7de58: Layer already exists
    20.04: digest: sha256:d514547ee28d9ed252167d0943d4e711547fda95161a3728c44a275f5d9669a8 size: 529
    VNF image myvnfacr.azurecr.io/ubuntu:20.04 created successfully!
    

Volgende stappen

Raadpleeg de quickstartgids voor het implementeren van een VNF met behulp van de installatiekopieën die u hebt gemaakt.