Membuat gambar untuk komputer virtual Nexus Operator Azure
Dalam artikel ini, Anda mempelajari cara membuat gambar kontainer yang dapat digunakan untuk membuat komputer virtual di Operator Nexus. Secara khusus, Anda mempelajari cara menambahkan disk virtual ke gambar kontainer. Setelah gambar kontainer dibangun dan didorong ke registri kontainer Azure, gambar tersebut dapat digunakan untuk membuat komputer virtual di Operator Nexus.
Prasyarat
Sebelum Anda mulai membuat gambar komputer virtual (VM), pastikan Anda memiliki prasyarat berikut:
Artikel ini memerlukan Azure CLI versi 2.49.0 atau yang lebih baru. Jika menggunakan Azure Cloud Shell, versi terbaru sudah terinstal.
Azure Container Registry (ACR): Siapkan Azure Container Registry yang berfungsi untuk menyimpan dan mengelola gambar kontainer Anda. ACR menyediakan registri yang aman dan privat untuk menyimpan gambar Docker yang digunakan dalam proses pembuatan gambar VM Anda. Anda dapat membuat ACR dengan mengikuti dokumentasi resmi di dokumentasi Azure Container Registry .
Docker: Instal Docker di komputer lokal Anda. Docker adalah platform yang memungkinkan Anda membangun, mengemas, dan mendistribusikan aplikasi sebagai kontainer ringan. Anda menggunakan Docker untuk membangun dan mengemas gambar VM Anda. Anda dapat mengunduh Docker dari situs web resmi Docker.
Catatan
Anda dapat menggunakan az login
perintah untuk mengautentikasi dengan Azure, dan skrip akan secara otomatis melakukan login ACR menggunakan nama ACR dan ID langganan yang disediakan. Jika Anda tidak memiliki Azure CLI yang terinstal di komputer, Anda dapat memberikan nama pengguna dan kata sandi Anda untuk masuk ACR sebagai gantinya.
Pastikan Anda memiliki Azure Container Registry (ACR) dan Docker operasional yang diinstal pada komputer Anda sebelum melanjutkan pembuatan gambar VM. Biasakan diri Anda dengan penggunaan dan fungsionalitas ACR dan Docker, karena penting untuk mengelola gambar kontainer Anda dan membangun gambar VM.
Persyaratan gambar komputer virtual
Pastikan gambar Fungsi Jaringan Virtual (VNF) Anda dalam format qcow2 yang dapat boot dengan cloud-init.
Anda perlu mengonfigurasi bootloader, kernel, dan sistem init dalam gambar Anda untuk mengaktifkan konsol serial berbasis teks. Konfigurasi ini diperlukan untuk mengaktifkan dukungan konsol untuk komputer virtual (VM) Anda. Pastikan pengaturan port serial pada sistem dan terminal Anda cocok untuk membangun komunikasi yang tepat.
Anda perlu memastikan gambar VM Anda mendukung cloud-init versi 2, memungkinkan opsi konfigurasi tingkat lanjut selama proses inisialisasi VM.
Anda perlu memastikan bahwa gambar VM Anda menyertakan cloud-init dengan
nocloud
sumber data.nocloud
sumber data memungkinkan konfigurasi dan kustomisasi awal selama provisi VM.Disk harus ditempatkan ke
/disk
direktori di dalam kontainer.Format mentah dan qcow2 didukung. Qcow2 direkomendasikan untuk mengurangi ukuran gambar kontainer.
Disk kontainer harus didasarkan pada
scratch
gambar, yang merupakan gambar dasar kosong yang tidak berisi file atau direktori selain gambar itu sendiri. Menggunakanscratch
sebagai gambar dasar memastikan bahwa gambar kontainer sekurang mungkin dan hanya menyertakan file yang diperlukan untuk VNF.
Langkah-langkah untuk membuat gambar untuk komputer virtual Operator Nexus
Anda dapat membuat gambar untuk VNF Anda dengan menggunakan skrip yang disediakan. Ini menghasilkan Dockerfile yang menyalin file gambar disk VNF ke direktori kontainer /disk
.
Catatan
Skrip berikut disediakan sebagai contoh. Jika mau, Anda dapat membuat dan mendorong gambar kontainer secara manual alih-alih mengikuti skrip.
Variabel lingkungan berikut digunakan untuk mengonfigurasi skrip untuk membuat gambar komputer virtual (VM) untuk VNF Anda. Ubah dan ekspor variabel ini dengan nilai Anda sendiri sebelum menjalankan skrip:
# 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=""
Untuk membuat gambar VM untuk Fungsi Jaringan Virtual (VNF), simpan skrip yang disediakan sebagai create-container-disk.sh
, atur variabel lingkungan yang diperlukan, dan jalankan skrip.
#!/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!"
Setelah menjalankan skrip, Anda akan memiliki gambar VM yang disesuaikan untuk Fungsi Jaringan Virtual (VNF) Anda. Anda dapat menggunakan gambar ini untuk menyebarkan VNF Anda.
Catatan
Untuk memastikan bahwa gambar VNF dapat ditarik dengan benar, pastikan URL ACR berada dalam daftar keluar yang memungkinkan jaringan layanan cloud yang akan Anda gunakan dengan komputer virtual Operator Nexus Anda.
Contoh penggunaan
Atur variabel lingkungan yang diperlukan.
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"
Simpan skrip yang disediakan sebagai
create-container-disk.sh
dan buat eksekusi.chmod +x create-container-disk.sh
Jalankan skrip.
$ ./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!
Langkah berikutnya
Lihat panduan Mulai Cepat untuk menyebarkan VNF menggunakan gambar yang Anda buat.