Modifikasi set skala virtual machine

Sepanjang siklus hidup aplikasi, Anda mungkin perlu memodifikasi atau memperbarui set skala mesin virtual Anda. Pembaruan ini dapat mencakup cara memperbarui konfigurasi set skala, atau mengubah konfigurasi aplikasi. Artikel ini menjelaskan cara memodifikasi set skala yang sudah ada dengan API REST, Azure PowerShell, atau Azure CLI.

Konsep dasar

Model set skala

Set skala memiliki "model set skala" yang menangkap keadaan set skala yang diinginkan yang ditetapkan secara keseluruhan. Untuk mengkueri model untuk set skala, Anda bisa menggunakan

  • REST API dengan compute/virtualmachinescalesets/get sebagai berikut:

    GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet?api-version={apiVersion}
    
  • Azure PowerShell dengan Get-AzVmss:

    Get-AzVmss -ResourceGroupName "myResourceGroup" -VMScaleSetName "myScaleSet"
    
  • Azure CLI dengan az vmss show:

    az vmss show --resource-group myResourceGroup --name myScaleSet
    
  • Anda juga dapat menggunakan resources.azure.com atau SDK Azure spesifik bahasa.

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

az vmss show --resource-group myResourceGroup --name myScaleSet
{
  "location": "westus",
  "overprovision": true,
  "plan": null,
  "singlePlacementGroup": true,
  "sku": {
    "additionalProperties": {},
    "capacity": 1,
    "name": "Standard_D2_v2",
    "tier": "Standard"
  },
}

Properti ini berlaku untuk set skala secara keseluruhan.

Tampilan instans set skala

Set skala juga memiliki "tampilan instans set skala" yang menangkap status runtime saat ini dari skala yang ditetapkan secara keseluruhan. Untuk mengkueri tampilan instans untuk set skala, Anda bisa menggunakan:

  • REST API dengan compute/virtualmachinescalesets/getinstanceview sebagai berikut:

    GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet/instanceView?api-version={apiVersion}
    
  • Azure PowerShell dengan Get-AzVmss:

    Get-AzVmss -ResourceGroupName "myResourceGroup" -VMScaleSetName "myScaleSet" -InstanceView
    
  • Azure CLI dengan az vmss get-instans-view:

    az vmss get-instance-view --resource-group myResourceGroup --name myScaleSet
    
  • Anda juga dapat menggunakan resources.azure.com atau Azure SDK spesifik bahasa

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

$ az vmss get-instance-view --resource-group myResourceGroup --name myScaleSet
{
  "statuses": [
    {
      "additionalProperties": {},
      "code": "ProvisioningState/succeeded",
      "displayStatus": "Provisioning succeeded",
      "level": "Info",
      "message": null,
      "time": "{time}"
    }
  ],
  "virtualMachine": {
    "additionalProperties": {},
    "statusesSummary": [
      {
        "additionalProperties": {},
        "code": "ProvisioningState/succeeded",
        "count": 1
      }
    ]
  }
}

Properti ini menyediakan ringkasan status runtime VM saat ini dalam set skala, seperti status ekstensi yang diterapkan ke set skala.

Tampilan model VM 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 bisa menggunakan:

  • REST API dengan compute/virtualmachinescalesetvms/get sebagai berikut:

    GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet/virtualmachines/instanceId?api-version={apiVersion}
    
  • Azure PowerShell dengan Get-AzVmssVm:

    Get-AzVmssVm -ResourceGroupName "myResourceGroup" -VMScaleSetName "myScaleSet" -InstanceId instanceId
    
  • Azure CLI dengan az vmss show:

    az vmss show --resource-group myResourceGroup --name myScaleSet --instance-id instanceId
    
  • Anda juga dapat menggunakan resources.azure.com atau Azure SDK.

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

$ az vmss show --resource-group myResourceGroup --name myScaleSet
{
  "location": "westus",
  "name": "{name}",
  "sku": {
    "name": "Standard_D2_v2",
    "tier": "Standard"
  },
}

Properti ini menjelaskan konfigurasi instans VM dalam set skala, bukan konfigurasi set skala secara keseluruhan. Misalnya, model set skala memiliki overprovision sebagai properti, sedangkan model untuk instans VM dalam set skala tidak. Perbedaan ini karena provisi berlebih adalah properti untuk set skala secara keseluruhan, bukan masing-masing instans VM dalam set skala itu (untuk informasi selengkapnya tentang provisi berlebih, lihat Pertimbangan desain untuk set skala).

Tampilan instans VM set skala

Mirip dengan bagaimana set skala memiliki tampilan instans, setiap instans VM dalam set skala memiliki tampilan instansnya sendiri. Untuk mengkueri tampilan instans untuk instans VM tertentu dalam set skala, Anda bisa menggunakan:

  • REST API dengan compute/virtualmachinescalesetvms/getinstanceview sebagai berikut:

    GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet/virtualmachines/instanceId/instanceView?api-version={apiVersion}
    
  • Azure PowerShell dengan Get-AzVmssVm:

    Get-AzVmssVm -ResourceGroupName "myResourceGroup" -VMScaleSetName "myScaleSet" -InstanceId instanceId -InstanceView
    
  • Azure CLI dengan az vmss get-instance-view

    az vmss get-instance-view --resource-group myResourceGroup --name myScaleSet --instance-id instanceId
    
  • Anda juga dapat menggunakan resources.azure.com atau Azure SDK

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

$ az vmss get-instance-view --resource-group myResourceGroup --name myScaleSet --instance-id instanceId
{
  "additionalProperties": {
    "osName": "ubuntu",
    "osVersion": "16.04"
  },
  "disks": [
    {
      "name": "{name}",
      "statuses": [
        {
          "additionalProperties": {},
          "code": "ProvisioningState/succeeded",
          "displayStatus": "Provisioning succeeded",
          "time": "{time}"
        }
      ]
    }
  ],
  "statuses": [
    {
      "additionalProperties": {},
      "code": "ProvisioningState/succeeded",
      "displayStatus": "Provisioning succeeded",
      "time": "{time}"
    },
    {
      "additionalProperties": {},
      "code": "PowerState/running",
      "displayStatus": "VM running"
    }
  ],
  "vmAgent": {
    "statuses": [
      {
        "additionalProperties": {},
        "code": "ProvisioningState/succeeded",
        "displayStatus": "Ready",
        "level": "Info",
        "message": "Guest Agent is running",
        "time": "{time}"
      }
    ],
    "vmAgentVersion": "{version}"
  },
}

Properti ini menjelaskan status runtime instans VM saat ini dalam set skala, yang mencakup ekstensi apa pun yang diterapkan ke set skala.

Cara memperbarui properti set skala global

Untuk memperbarui properti set skala global, Anda harus memperbarui properti dalam model set skala. Anda dapat melakukan pembaruan ini melalui:

  • REST API dengan compute/virtualmachinescalesets/createorupdate sebagai berikut:

    PUT https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet?api-version={apiVersion}
    
  • Anda dapat menerapkan templat Resource Manager dengan properti dari REST API untuk memperbarui properti set skala global.

  • Azure PowerShell dengan Update-AzVmss:

    Update-AzVmss -ResourceGroupName "myResourceGroup" -VMScaleSetName "myScaleSet" -VirtualMachineScaleSet {scaleSetConfigPowershellObject}
    
  • Azure CLI dengan az vmss update:

    • Untuk mengubah properti:

      az vmss update --set {propertyPath}={value}
      
    • Untuk menambah objek ke properti daftar dalam set skala:

      az vmss update --add {propertyPath} {JSONObjectToAdd}
      
    • Untuk menghapus objek dari properti daftar dalam set skala:

      az vmss update --remove {propertyPath} {indexToRemove}
      
    • Jika sebelumnya Anda menggunakan set skala dengan perintah az vmss create, Anda dapat menjalankan perintah az vmss create lagi untuk memperbarui set skala. Pastikan bahwa semua properti dalam perintah az vmss create sama seperti sebelumnya, kecuali properti yang ingin Anda ubah.

  • Anda juga dapat menggunakan resources.azure.com atau Azure SDK.

Setelah model set skala diperbarui, konfigurasi baru berlaku untuk VM baru yang dibuat dalam set skala. Namun, model untuk VM yang ada dalam set skala masih harus diperbarui dengan model set skala keseluruhan terbaru. Dalam model untuk setiap VM adalah properti boolean bernama latestModelApplied yang menunjukkan apakah VM sudah diperbarui atau tidak dengan model set skala keseluruhan terbaru ( true berarti VM sudah diperbarui dengan model terbaru).

Cara membawa VM up-to-date dengan model set skala terbaru

Set skala memiliki "kebijakan pemutakhiran" yang menentukan bagaimana VM diperbarui dengan model set skala terbaru. Tiga mode untuk kebijakan pemutakhiran adalah:

  • Otomatis - Dalam mode ini, set skala tidak menjaminan urutan VM yang dinonaktifkan. Set skala dapat menonaktifkan semua VM secara bersamaan.
  • Bergilir - Dalam mode ini, set skala melakukan pembaruan dalam batch dengan waktu jeda opsional di antara batch.
  • Manual - Dalam mode ini, ketika Anda memperbarui model set skala, tidak ada yang terjadi pada VM yang ada.

Untuk memperbarui VM yang ada, Anda harus melakukan "pemutakhiran manual" dari setiap VM yang ada. Anda dapat melakukan pemutakhiran manual ini dengan:

  • REST API dengan compute/virtualmachinescalesets/updateinstances sebagai berikut:

    POST https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet/manualupgrade?api-version={apiVersion}
    
  • Azure PowerShell dengan Update-AzVmssInstance:

    Update-AzVmssInstance -ResourceGroupName "myResourceGroup" -VMScaleSetName "myScaleSet" -InstanceId instanceId
    
  • Azure CLI dengan az vmss update-instances

    az vmss update-instances --resource-group myResourceGroup --name myScaleSet --instance-ids {instanceIds}
    
  • Anda juga dapat menggunakan Azure SDK spesifik bahasa.

Catatan

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

Ada satu jenis modifikasi properti set skala global yang tidak mengikuti kebijakan pemutakhiran. Perubahan pada OS set skala dan Profil disk Data (seperti nama dan kata sandi admin) hanya dapat diubah di API versi 2017-12-01 atau yang lebih baru. Perubahan ini hanya berlaku untuk VM yang dibuat setelah perubahan model set skala. Untuk memperbarui VM yang sudah ada, Anda harus melakukan "reimage" dari setiap VM yang ada. Anda dapat melakukan pencitraan ulang ini melalui:

  • REST API dengan compute/virtualmachinescalesets/reimage sebagai berikut:

    POST https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet/reimage?api-version={apiVersion}
    
  • Azure PowerShell dengan Set-AzVmssVm:

    Set-AzVmssVM -ResourceGroupName "myResourceGroup" -VMScaleSetName "myScaleSet" -InstanceId instanceId -Reimage
    
  • Azure CLI dengan az vmss reimage:

    az vmss reimage --resource-group myResourceGroup --name myScaleSet --instance-id instanceId
    
  • Anda juga dapat menggunakan Azure SDK spesifik bahasa.

Properti dengan batasan modifikasi

Properti buat-waktu

Beberapa properti hanya dapat diatur ketika Anda membuat set skala. Properti ini meliputi:

  • Zona Ketersediaan
  • Penerbit referensi citra
  • Penawaran referensi citra
  • Tipe akun penyimpanan disk OS terkelola

Properti yang hanya bisa diubah berdasarkan nilai saat ini

Beberapa properti mungkin diubah, dengan pengecualian tergantung pada nilai saat ini. Properti ini meliputi:

  • singlePlacementGroup - Jika singlePlacementGroup benar, itu mungkin dimodifikasi menjadi false. Namun, jika singlePlacementGroup salah, itu tidak mungkin dimodifikasi menjadi true.
  • subnet - Subnet set skala dapat dimodifikasi selama subnet asli dan subnet baru berada dalam jaringan virtual yang sama.
  • imageReferenceSku - SKU referensi citra dapat diperbarui untuk distro Linux yang didukung, citra server/klien Windows, dan citra tanpa informasi rencana.

Properti yang memerlukan dealokasi untuk berubah

Beberapa properti hanya dapat diubah ke nilai tertentu jika VM dalam set skala didealokasikan. Properti ini meliputi:

  • Nama SKU- Jika SKU VM baru tidak didukung pada perangkat keras dari set skala yang ditetapkan saat ini, Anda perlu mendealokasikan VM dalam set skala yang ditetapkan sebelum Anda memodifikasi nama SKU. Untuk informasi selengkapnya, lihat cara mengubah ukuran Azure VM.

Pembaruan spesifik VM

Modifikasi tertentu dapat diterapkan pada VM tertentu alih-alih properti set skala global. Saat ini, satu-satunya pembaruan spesifik VM yang didukung adalah memasang/melepas disk data ke/dari VM dalam set skala. Fitur ini masih dalam tahap pratinjau. Untuk informasi selengkapnya, lihat pratinjau dokumentasi.

Skenario

Pembaruan aplikasi

Jika aplikasi disebar ke set skala yang ditetapkan melalui ekstensi, pembaruan untuk konfigurasi ekstensi menyebabkan aplikasi diperbarui sesuai dengan kebijakan pemutakhiran. Misalnya, jika Anda memiliki versi baru skrip untuk dijalankan dalam Custom Script Extension, Anda dapat memperbarui properti fileUris untuk menunjuk ke skrip baru. Dalam beberapa kasus, Anda mungkin ingin memaksa pembaruan meskipun konfigurasi ekstensi tidak berubah (misalnya, Anda memperbarui skrip tanpa perubahan pada URI skrip). Dalam kasus ini, Anda dapat memodifikasi forceUpdateTag untuk memaksa pembaruan. Platform Azure tidak menginterpretasikan properti ini. Jika Anda mengubah nilai, tidak ada efek pada bagaimana ekstensi berjalan. Perubahan hanya memaksa ekstensi untuk dijalankan ulang. Untuk informasi selengkapnya tentang forceUpdateTag, lihat Dokumentasi REST API untuk ekstensi. Perhatikan bahwa forceUpdateTag dapat digunakan dengan semua ekstensi, bukan hanya ekstensi skrip kustom.

Hal ini juga umum untuk aplikasi yang akan digunakan melalui citra kustom. Skenario ini disertakan dalam bagian berikut.

Pembaruan OS

Jika Anda menggunakan citra platform Azure, Anda dapat memperbarui citra dengan memodifikasi imageReference (informasi selengkapnya, lihat dokumentas REST API).

Catatan

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

Jika Anda menggunakan citra platform Azure, Anda dapat memperbarui citra dengan memodifikasi ID imageReference (informasi selengkapnya, lihat dokumentasi REST API).

Contoh

Perbarui citra OS untuk set skala Anda

Anda mungkin memiliki set skala yang menjalankan versi lama Ubuntu LTS 16.04. Anda ingin memperbarui ke versi Ubuntu LTS 16.04 yang lebih baru, seperti versi 16.04.201801090. Properti versi referensi citra bukan bagian dari daftar, sehingga Anda bisa langsung mengubah properti ini dengan salah satu perintah berikut:

  • Azure PowerShell dengan Update-AzVmss sebagai berikut:

    Update-AzVmss -ResourceGroupName "myResourceGroup" -VMScaleSetName "myScaleSet" -ImageReferenceVersion 16.04.201801090
    
  • Azure CLI dengan az vmss update:

    az vmss update --resource-group myResourceGroup --name myScaleSet --set virtualMachineProfile.storageProfile.imageReference.version=16.04.201801090
    

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 citra yang digunakan set skala Anda dengan memperbarui properti ID referensi citra. Properti ID versi referensi citra bukan bagian dari daftar, sehingga Anda bisa langsung mengubah properti ini dengan salah satu perintah berikut:

  • Azure PowerShell dengan Update-AzVmss sebagai berikut:

    Update-AzVmss `
        -ResourceGroupName "myResourceGroup" `
        -VMScaleSetName "myScaleSet" `
        -ImageReferenceId /subscriptions/{subscriptionID}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/images/myNewImage
    
  • Azure CLI dengan az vmss update:

    az vmss update \
        --resource-group myResourceGroup \
        --name myScaleSet \
        --set virtualMachineProfile.storageProfile.imageReference.id=/subscriptions/{subscriptionID}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/images/myNewImage
    

Perbarui load balancer untuk set skala Anda

Katakanlah Anda memiliki set skala dengan Azure Load Balancer, dan Anda ingin mengganti Azure Load Balancer dengan Azure Application Gateway. Properti load balancer dan Application Gateway untuk set skala adalah bagian dari daftar, sehingga Anda bisa menggunakan perintah untuk menghapus atau menambah elemen daftar alih-alih memodifikasi properti secara langsung:

  • Azure PowerShell:

    # Get the current model of the scale set and store it in a local PowerShell object named $vmss
    $vmss=Get-AzVmss -ResourceGroupName "myResourceGroup" -Name "myScaleSet"
    
    # Create a local PowerShell object for the new desired IP configuration, which includes the reference to the application gateway
    $ipconf = New-AzVmssIPConfig -ApplicationGatewayBackendAddressPoolsId /subscriptions/{subscriptionId}/resourceGroups/myResourceGroup/providers/Microsoft.Network/applicationGateways/{applicationGatewayName}/backendAddressPools/{applicationGatewayBackendAddressPoolName} -SubnetId $vmss.VirtualMachineProfile.NetworkProfile.NetworkInterfaceConfigurations[0].IpConfigurations[0].Subnet.Id -Name $vmss.VirtualMachineProfile.NetworkProfile.NetworkInterfaceConfigurations[0].IpConfigurations[0].Name
    
    # Replace the existing IP configuration in the local PowerShell object (which contains the references to the current Azure Load Balancer) with the new IP configuration
    $vmss.VirtualMachineProfile.NetworkProfile.NetworkInterfaceConfigurations[0].IpConfigurations[0] = $ipconf
    
    # Update the model of the scale set with the new configuration in the local PowerShell object
    Update-AzVmss -ResourceGroupName "myResourceGroup" -Name "myScaleSet" -virtualMachineScaleSet $vmss
    
  • Azure CLI:

    # Remove the load balancer backend pool from the scale set model
    az vmss update --resource-group myResourceGroup --name myScaleSet --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 myResourceGroup --name myScaleSet --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 myResourceGroup --name myScaleSet --add virtualMachineProfile.networkProfile.networkInterfaceConfigurations[0].ipConfigurations[0].ApplicationGatewayBackendAddressPools '{"id": "/subscriptions/{subscriptionId}/resourceGroups/myResourceGroup/providers/Microsoft.Network/applicationGateways/{applicationGatewayName}/backendAddressPools/{applicationGatewayBackendPoolName}"}'
    

Catatan

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

Langkah berikutnya

Anda juga dapat melakukan tugas manajemen umum pada set skala dengan Azure CLI atau Azure PowerShell.