Tutorial: Mengubah Virtual Machine Scale Set menggunakan Azure CLI

Sepanjang siklus hidup aplikasi, Anda mungkin perlu memodifikasi atau memperbarui Set Skala Komputer Virtual Anda. Pembaruan ini dapat mencakup cara memperbarui konfigurasi set skala, atau mengubah konfigurasi aplikasi. Artikel ini menjelaskan cara mengubah set skala yang ada menggunakan Azure CLI.

Di bawah ini, kami mendeklarasikan variabel lingkungan yang akan digunakan di seluruh dokumen ini. Akhiran acak ditambahkan ke nama sumber daya yang perlu unik untuk setiap penyebaran. REGION diatur ke WestUS2.

Siapkan Grup Sumber Daya

Sebelum melanjutkan, pastikan grup sumber daya ada. Langkah ini membuat grup sumber daya jika belum ada.

export RANDOM_SUFFIX=$(openssl rand -hex 3)
export MY_RESOURCE_GROUP_NAME="myResourceGroup$RANDOM_SUFFIX"
export REGION="WestUS2"
az group create --name $MY_RESOURCE_GROUP_NAME --location $REGION
{
  "id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxx",
  "location": "WestUS2",
  "managedBy": null,
  "name": "myResourceGroupxxx",
  "properties": {
    "provisioningState": "Succeeded"
  },
  "tags": null,
  "type": "Microsoft.Resources/resourceGroups"
}

Membuat Set Skala Komputer Virtual

Untuk memastikan bahwa perintah pembaruan dan kueri berikutnya memiliki sumber daya yang valid untuk digunakan, buat Set Skala Mesin Virtual. Dalam langkah ini, kami menyebarkan set skala dasar menggunakan gambar yang valid (Ubuntu2204) dan mengatur jumlah instans ke 5 sehingga pembaruan khusus instans dapat menargetkan ID instans yang ada.

export SCALE_SET_NAME="myScaleSet$RANDOM_SUFFIX"
az vmss create \
  --resource-group $MY_RESOURCE_GROUP_NAME \
  --name $SCALE_SET_NAME \
  --image Ubuntu2204 \
  --upgrade-policy-mode manual \
  --instance-count 5 \
  --admin-username azureuser \
  --generate-ssh-keys
{
  "id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSetxxx",
  "location": "WestUS2",
  "name": "myScaleSetxxx",
  "provisioningState": "Succeeded"
}

Memperbarui set model skala

Set skala memiliki "model set skala" yang mencerminkan keadaan yang diinginkan dari set skala secara keseluruhan. Untuk melakukan kueri model untuk set skala, Anda bisa menggunakan az vmss show:

az vmss show --resource-group $MY_RESOURCE_GROUP_NAME --name $SCALE_SET_NAME

Presentasi output yang tepat tergantung pada opsi yang Anda berikan ke perintah. Contoh berikut menunjukkan output sampel yang dipadatkan dari Azure CLI:

{
  "id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSetxxx",
  "location": "WestUS2",
  "name": "myScaleSetxxx",
  "orchestrationMode": "Flexible",
  "platformFaultDomainCount": 1,
  "resourceGroup": "myResourceGroupxxx",
  "sku": {
    "capacity": 5,
    "name": "Standard_DS1_v2",
    "tier": "Standard"
  },
  "timeCreated": "2022-11-29T22:16:43.250912+00:00",
  "type": "Microsoft.Compute/virtualMachineScaleSets",
  "networkProfile": {
    "networkApiVersion": "2020-11-01",
    "networkInterfaceConfigurations": [
      {
        "deleteOption": "Delete",
        "disableTcpStateTracking": false,
        "dnsSettings": {
          "dnsServers": []
        },
        "enableIpForwarding": false,
        "ipConfigurations": [
          {
            "applicationGatewayBackendAddressPools": [],
            "applicationSecurityGroups": [],
            "loadBalancerBackendAddressPools": [
              {
                "id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.Network/loadBalancers/myScaleSetLB/backendAddressPools/myScaleSetLBBEPool",
                "resourceGroup": "myResourceGroupxxx"
              }
            ],
            "name": "mysca2215IPConfig",
            "privateIpAddressVersion": "IPv4",
            "subnet": {
              "id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.Network/virtualNetworks/myScaleSetVNET/subnets/myScaleSetSubnet",
              "resourceGroup": "myResourceGroupxxx"
            }
          }
        ],
        "name": "mysca2215Nic",
        "networkSecurityGroup": {
          "id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.Network/networkSecurityGroups/myScaleSetNSG",
          "resourceGroup": "myResourceGroupxxx"
        },
        "primary": true
      }
    ]
  },
  "osProfile": {
    "allowExtensionOperations": true,
    "computerNamePrefix": "myScaleS",
    "linuxConfiguration": {
      "disablePasswordAuthentication": true,
      "enableVmAgentPlatformUpdates": false,
      "patchSettings": {
        "assessmentMode": "ImageDefault",
        "patchMode": "ImageDefault"
      },
      "provisionVmAgent": true
    }
  },
  "storageProfile": {
    "imageReference": {
      "offer": "UbuntuServer",
      "publisher": "Canonical",
      "sku": "22_04-lts",
      "version": "latest"
    },
    "osDisk": {
      "caching": "ReadWrite",
      "createOption": "FromImage",
      "deleteOption": "Delete",
      "diskSizeGb": 30,
      "managedDisk": {
        "storageAccountType": "Premium_LRS"
      },
      "osType": "Linux"
    }
  }
}

Anda dapat menggunakan az vmss update untuk memperbarui berbagai properti dari set skala Anda. Misalnya, memperbarui jenis lisensi Anda atau kebijakan perlindungan instans VM. Perhatikan bahwa nilai jenis lisensi yang diizinkan RHEL_BYOS daripada Windows_Server.

az vmss update --name $SCALE_SET_NAME --resource-group $MY_RESOURCE_GROUP_NAME --license-type RHEL_BYOS
export INSTANCE_ID=$(az vmss list-instances \
  --resource-group $MY_RESOURCE_GROUP_NAME \
  --name $SCALE_SET_NAME \
  --query "[0].instanceId" \
  -o tsv)

az vmss update \
  --name $SCALE_SET_NAME \
  --resource-group $MY_RESOURCE_GROUP_NAME \
  --instance-id "$INSTANCE_ID" \
  --protect-from-scale-set-actions False \
  --protect-from-scale-in

Selain itu, jika sebelumnya Anda menyebarkan set skala dengan az vmss create perintah , Anda dapat menjalankan az vmss create perintah lagi untuk memperbarui set skala. Pastikan bahwa semua properti dalam perintah az vmss create sama seperti sebelumnya, kecuali properti yang ingin Anda ubah. Misalnya, di bawah ini kami meningkatkan jumlah instans menjadi lima.

Penting

Mulai November 2023, set skala VM yang dibuat menggunakan PowerShell dan Azure CLI akan default ke Mode Orkestrasi Fleksibel jika tidak ada mode orkestrasi yang ditentukan. Untuk informasi selengkapnya tentang perubahan ini dan tindakan apa yang harus Anda ambil, buka Perubahan Krusial untuk Pelanggan VMSS PowerShell/CLI - Microsoft Community Hub

az vmss create \
  --resource-group $MY_RESOURCE_GROUP_NAME \
  --name $SCALE_SET_NAME \
  --orchestration-mode flexible \
  --image RHELRaw8LVMGen2 \
  --admin-username azureuser \
  --generate-ssh-keys \
  --instance-count 5 \
  --os-disk-size-gb 64

Memperbarui instans VM individual dalam set skala

Mirip dengan bagaimana set skala memiliki tampilan model, setiap instans VM dalam set skala memiliki tampilan modelnya sendiri. Untuk mengkueri tampilan model untuk instans VM tertentu dalam set skala, Anda dapat menggunakan az vm show.

export INSTANCE_NAME=$(az vmss list-instances \
  --resource-group $MY_RESOURCE_GROUP_NAME \
  --name $SCALE_SET_NAME \
  --query "[0].name" \
  -o tsv)

az vm show --resource-group $MY_RESOURCE_GROUP_NAME --name $INSTANCE_NAME

Presentasi output yang tepat tergantung pada opsi yang Anda berikan ke perintah. Contoh berikut menunjukkan output sampel yang dipadatkan dari Azure CLI:

{
  "hardwareProfile": {
    "vmSize": "Standard_DS1_v2"
  },
  "id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.Compute/virtualMachines/myScaleSet_Instance1",
  "location": "WestUS2",
  "name": "myScaleSet_Instance1",
  "networkProfile": {
    "networkInterfaces": [
      {
        "deleteOption": "Delete",
        "id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.Network/networkInterfaces/mysca2215Nic-5cf164f7",
        "primary": true,
        "resourceGroup": "myResourceGroupxxx"
      }
    ]
  },
  "osProfile": {
    "allowExtensionOperations": true,
    "computerName": "myScaleset_Computer1",
    "linuxConfiguration": {
      "disablePasswordAuthentication": true,
      "enableVmAgentPlatformUpdates": false,
      "patchSettings": {
        "assessmentMode": "ImageDefault",
        "patchMode": "ImageDefault"
      },
      "provisionVmAgent": true
    }
  },
  "provisioningState": "Succeeded",
  "resourceGroup": "myResourceGroupxxx",
  "storageProfile": {
    "dataDisks": [],
    "imageReference": {
      "exactVersion": "22.04.202204200",
      "offer": "0001-com-ubuntu-server-jammy",
      "publisher": "Canonical",
      "sku": "22_04-lts",
      "version": "latest"
    },
    "osDisk": {
      "caching": "ReadWrite",
      "createOption": "FromImage",
      "deleteOption": "Delete",
      "diskSizeGb": 30,
      "managedDisk": {
        "id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.Compute/disks/myScaleSet_Instance1_disk1_xxx",
        "resourceGroup": "myResourceGroupxxx",
        "storageAccountType": "Premium_LRS"
      },
      "name": "myScaleSet_Instance1_disk1_xxx",
      "osType": "Linux"
    }
  },
  "timeCreated": "2022-11-29T22:16:44.500895+00:00",
  "type": "Microsoft.Compute/virtualMachines",
  "virtualMachineScaleSet": {
    "id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSetxxx",
    "resourceGroup": "myResourceGroupxxx"
  }
}

Properti ini menjelaskan konfigurasi instans VM dalam set skala, bukan konfigurasi set skala secara keseluruhan.

Anda dapat melakukan pembaruan pada instans VM individual dalam set skala seperti VM mandiri. Misalnya, melampirkan disk data baru ke instans 1:

az vm disk attach --resource-group $MY_RESOURCE_GROUP_NAME --vm-name $INSTANCE_NAME --name disk_name1 --new

Menjalankan az vm show lagi, kita sekarang akan melihat bahwa instans VM memiliki disk baru yang terpasang.

{
  "storageProfile": {
    "dataDisks": [
      {
        "caching": "None",
        "createOption": "Empty",
        "deleteOption": "Detach",
        "diskSizeGb": 1023,
        "lun": 0,
        "managedDisk": {
          "id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.Compute/disks/disk_name1",
          "resourceGroup": "myResourceGroupxxx",
          "storageAccountType": "Premium_LRS"
        },
        "name": "disk_name1",
        "toBeDetached": false
      }
    ]
  }
}

Tambahkan Instans ke set skala Anda

Ada kalanya Anda mungkin ingin menambahkan VM baru ke set skala Anda tetapi menginginkan opsi konfigurasi yang berbeda dari yang tercantum dalam model set skala. VM dapat ditambahkan ke set skala dengan menggunakan perintah az vm create selama pembuatan dan menentukan nama set skala yang Anda inginkan instansnya ditambahkan.

export NEW_INSTANCE_NAME="myNewInstance$RANDOM_SUFFIX"
az vm create --name $NEW_INSTANCE_NAME --resource-group $MY_RESOURCE_GROUP_NAME --vmss $SCALE_SET_NAME --image RHELRaw8LVMGen2
{
  "fqdns": "",
  "id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.Compute/virtualMachines/myNewInstancexxx",
  "location": "WestUS2",
  "macAddress": "60-45-BD-D7-13-DD",
  "powerState": "VM running",
  "privateIpAddress": "10.0.0.6",
  "publicIpAddress": "20.172.144.96",
  "resourceGroup": "myResourceGroupxxx",
  "zones": ""
}

Jika kita kemudian memeriksa skala kita, kita akan melihat bahwa instans baru telah ditambahkan.

az vm list --resource-group $MY_RESOURCE_GROUP_NAME --output table
Name                  ResourceGroup      Location
--------------------  ---------------    ----------
myNewInstancexxx      myResourceGroupxxx WestUS2
myScaleSet_Instance1  myResourceGroupxxx WestUS2
myScaleSet_Instance1  myResourceGroupxxx WestUS2

Perbarui VM up-toke model set skala yang terbaru

Nota

Saat ini, mode peningkatan tidak didukung pada Virtual Machine Scale Sets yang menggunakan mode orkestrasi Fleksibel.

Set skala memiliki "kebijakan peningkatan" yang menentukan bagaimana VM dibawa up-to-date dengan model set skala terbaru. Tiga mode untuk kebijakan peningkatan adalah:

  • Otomatis - Dalam mode ini, set skala tidak memberikan jaminan tentang urutan VM yang diturunkan. Set skala dapat menurunkan semua VM secara bersamaan.
  • Rolling - Dalam mode ini, set skala meluncurkan pembaruan dalam batch dengan waktu jeda opsional antar batch.
  • Manual - Dalam mode ini, ketika Anda memperbarui model set skala, tidak ada yang terjadi pada VM yang ada sampai pembaruan manual dipicu.

Jika set skala Anda diatur ke peningkatan manual, Anda dapat memicu peningkatan manual menggunakan az vmss update.

az vmss update --resource-group $MY_RESOURCE_GROUP_NAME --name $SCALE_SET_NAME

Nota

Kluster Service Fabric hanya dapat menggunakan mode Otomatis , tetapi pembaruan ditangani secara berbeda. Untuk informasi selengkapnya, lihat pemutakhiran aplikasi Service Fabric.

Gambar ulang set skala

Virtual Machine Scale Sets akan menghasilkan nama unik untuk setiap VM dalam set skala. Konvensi penamaan berbeda dengan mode orkestrasi:

  • Mode orkestrasi fleksibel: {scale-set-name}_{8-char-guid}
  • Mode orkestrasi seragam: {scale-set-name}_{instance-id}

Dalam kasus di mana Anda perlu mencitrakan ulang instans tertentu, gunakan reimage az vmss dan tentukan id instans. Opsi lain adalah menggunakan penyebaran ulang az vm untuk menggambar ulang VM secara langsung. Perintah ini berguna jika Anda ingin mencitrakan ulang VM tanpa harus menentukan ID instans.

# Get the VM name first
VM_NAME=$(az vmss list-instances \
  --resource-group $MY_RESOURCE_GROUP_NAME \
  --name $SCALE_SET_NAME \
  --query "[0].name" \
  -o tsv)

# Reimage the VM directly
az vm redeploy \
  --resource-group $MY_RESOURCE_GROUP_NAME \
  --name $VM_NAME

Perbarui gambar OS untuk set skala Anda

Anda mungkin memiliki set skala yang menjalankan Ubuntu versi lama. Anda ingin memperbarui ke versi Ubuntu yang lebih baru, seperti versi terbaru. Properti versi referensi gambar bukan bagian dari daftar, sehingga Anda dapat langsung mengubah properti ini menggunakan az vmss update.

az vmss update --resource-group $MY_RESOURCE_GROUP_NAME --name $SCALE_SET_NAME --set virtualMachineProfile.storageProfile.imageReference.version=latest

Atau, Anda mungkin ingin mengubah citra yang digunakan set skala Anda. Misalnya, Anda mungkin ingin memperbarui atau mengubah gambar kustom yang digunakan oleh set skala Anda. Anda dapat mengubah gambar yang digunakan skala set Anda dengan memperbarui properti ID referensi gambar. Properti ID referensi gambar bukan bagian dari daftar, sehingga Anda dapat langsung memodifikasi properti ini menggunakan pembaruan az vmss.

Jika Anda menggunakan gambar platform Azure, Anda dapat memperbarui gambar dengan memodifikasi imageReference. Untuk informasi lebih lanjut, silakan lihat dokumentasi REST API.

Nota

Dengan gambar platform, umum untuk menentukan "terbaru" sebagai versi referensi gambar. Saat Anda membuat, menskalakan, dan mencitrakan ulang, VM dibuat dengan versi terbaru yang tersedia. Namun, itu tidak berarti bahwa citra OS secara otomatis diperbarui seiring waktu seiring versi citra baru dirilis. Sebuah fitur terpisah menyediakan peningkatan OS otomatis. Untuk informasi selengkapnya, lihat Dokumentasi Pemutakhiran OS Otomatis.

Jika Anda menggunakan gambar kustom, Anda dapat memperbarui gambar dengan memperbarui ID imageReference (untuk informasi lebih lanjut, lihat dokumentasi REST API).

Perbarui penyeimbang beban untuk set skala Anda

Katakanlah Anda memiliki pengaturan skala dengan Azure Load Balancer, dan Anda ingin mengganti Azure Load Balancer dengan Azure Application Gateway. Properti load balancer dan Application Gateway untuk "scale set" adalah bagian dari daftar, sehingga Anda dapat menggunakan perintah untuk menghapus atau menambahkan elemen daftar daripada memodifikasi properti secara langsung.

# Remove the load balancer backend pool from the scale set model
az vmss update --resource-group $MY_RESOURCE_GROUP_NAME --name $SCALE_SET_NAME --remove virtualMachineProfile.networkProfile.networkInterfaceConfigurations[0].ipConfigurations[0].loadBalancerBackendAddressPools 0

# Remove the load balancer backend pool from the scale set model; only necessary if you have NAT pools configured on the scale set
az vmss update --resource-group $MY_RESOURCE_GROUP_NAME --name $SCALE_SET_NAME --remove virtualMachineProfile.networkProfile.networkInterfaceConfigurations[0].ipConfigurations[0].loadBalancerInboundNatPools 0

# Add the application gateway backend pool to the scale set model
az vmss update --resource-group $MY_RESOURCE_GROUP_NAME --name $SCALE_SET_NAME --add virtualMachineProfile.networkProfile.networkInterfaceConfigurations[0].ipConfigurations[0].ApplicationGatewayBackendAddressPools '{"id": "/subscriptions/xxxxx/resourceGroups/'$MY_RESOURCE_GROUP_NAME'/providers/Microsoft.Network/applicationGateways/{applicationGatewayName}/backendAddressPools/{applicationGatewayBackendPoolName}"}'

Nota

Perintah ini mengasumsikan hanya ada satu konfigurasi IP dan load balancer dalam satu set skala. Jika ada beberapa, Anda mungkin perlu menggunakan indeks daftar selain 0.

Langkah selanjutnya

Dalam tutorial ini, Anda mempelajari cara memodifikasi berbagai aspek set skala dan instans individual Anda.

  • Memperbarui model kumpulan skala
  • Memperbarui mesin virtual (VM) individual dalam set penskalaan
  • Tambahkan instans ke set skala Anda
  • Perbarui VM up-todengan model skala terbaru
  • Memulihkan ulang sekumpulan skala
  • Perbarui gambar OS untuk set skala Anda
  • Perbarui penyeimbang beban untuk set skala Anda