Aracılığıyla paylaş


Öğretici: Azure CLI kullanarak sanal makine ölçek kümesini değiştirme

Uygulamalarınızın yaşam döngüsü boyunca Sanal Makine Ölçek Kümenizi değiştirmeniz veya güncelleştirmeniz gerekebilir. Bu güncelleştirmeler, ölçek kümesinin yapılandırmasını güncelleştirmeyi veya uygulama yapılandırmasını değiştirmeyi içerebilir. Bu makalede, Azure CLI kullanılarak mevcut bir ölçek kümesinin nasıl değiştirileceği açıklanır.

Aşağıda, bu belge boyunca kullanılacak ortam değişkenlerini bildireceğiz. Her dağıtım için benzersiz olması gereken kaynak adlarına rastgele bir sonek eklenir. REGION, WestUS2 olarak ayarlanır.

Kaynak Grubunu Ayarlama

Devam etmeden önce kaynak grubunun mevcut olduğundan emin olun. Bu adım, kaynak grubu halihazırda mevcut değilse onu oluşturur.

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"
}

Sanal Makine Ölçek Kümesi Oluşturma

Sonraki güncelleştirme ve sorgu komutlarının üzerinde çalışabilecek geçerli bir kaynağa sahip olduğundan emin olmak için bir Sanal Makine Ölçek Kümesi oluşturun. Bu adımda, geçerli bir görüntü (Ubuntu2204) kullanarak temel bir ölçek kümesi dağıtacak ve örneğe özgü güncelleştirmelerin mevcut bir örnek kimliğini hedeflemesi için örnek sayısını 5 olarak ayarlayacağız.

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"
}

Ölçek kümesi modelini güncelleştirme

Ölçek kümesinin, ölçek kümesinin istenen durumunu tümüyle yansıtan bir "ölçek kümesi modeli" vardır. Ölçek kümesinin modelini sorgulamak için az vmss show komutunu kullanabilirsiniz:

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

Çıkışın tam sunumu, komuta sağladığınız seçeneklere bağlıdır. Aşağıdaki örnekte Azure CLI'dan yoğunlaştırılmış örnek çıktısı gösterilmektedir:

{
  "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"
    }
  }
}

Ölçek kümenizin çeşitli özelliklerini güncelleştirmek için az vmss update komutunu kullanabilirsiniz. Örneğin, lisans türünüzü veya bir VM'nin örnek koruma ilkesini güncelleştirme. İzin verilen lisans türü değerinin Windows_Server yerine RHEL_BYOS olduğunu unutmayın.

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

Ayrıca, daha önce ölçek kümesini komutuyla az vmss create dağıttıysanız, ölçek kümesini güncelleştirmek için komutunu yeniden çalıştırabilirsiniz az vmss create . Değiştirmek istediğiniz özellikler dışında, az vmss create komutundaki tüm özelliklerin öncekiyle aynı olduğundan emin olun. Örneğin, aşağıda örnek sayısını beşe çıkarıyoruz.

Önemli

Kasım 2023'den itibaren, düzenleme modu belirtilmezse PowerShell ve Azure CLI kullanılarak oluşturulan VM ölçek kümeleri varsayılan olarak Esnek Düzenleme Modu olarak ayarlanır. Bu değişiklik ve gerçekleştirmeniz gereken eylemler hakkında daha fazla bilgi için VMSS PowerShell/CLI Müşterileri için Kritik Değişiklik - Microsoft Community Hub'a gidin.

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

Ölçek kümesindeki tek tek VM örneklerini güncelleştirme

Ölçek kümesinin model görünümüne sahip olmasına benzer şekilde, ölçek kümesindeki her VM örneğinin kendi model görünümü vardır. Ölçek kümesindeki belirli bir VM örneğinin model görünümünü sorgulamak için az vm show komutunu kullanabilirsiniz.

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

Çıkışın tam sunumu, komuta sağladığınız seçeneklere bağlıdır. Aşağıdaki örnekte Azure CLI'dan yoğunlaştırılmış örnek çıktısı gösterilmektedir:

{
  "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"
  }
}

Bu özellikler, ölçek kümesinin bir bütün olarak yapılandırılmasını değil, ölçek kümesi içindeki bir VM örneğinin yapılandırmasını açıklar.

Tek başına VM'lerde yaptığınız gibi ölçek kümesindeki tek tek VM örneklerine yönelik güncelleştirmeler gerçekleştirebilirsiniz. Örneğin, 1. örneğe yeni bir veri diski ekleme:

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

az vm show komutunu yeniden çalıştırdığınızda artık VM örneğinde yeni diskin eklendiğini göreceğiz.

{
  "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
      }
    ]
  }
}

Ölçek kümenize örnek ekleme

Ölçek kümenize yeni bir VM eklemek ancak ölçek kümesi modelinde listelenenlerden farklı yapılandırma seçenekleri kullanmak isteyebileceğiniz zamanlar olabilir. VM'ler oluşturma sırasında az vm create komutu kullanılarak ve örneğin eklenmesini istediğiniz ölçek kümesi adı belirtilerek ölçek kümesine eklenebilir.

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": ""
}

Daha sonra ölçek kümemizi denetlersek yeni örneğin eklendiğini görürüz.

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

VM'leri up-toen son ölçek kümesi modeliyle güncel hale getirme

Uyarı

Şu anda Esnek orkestrasyon modu kullanılarak Sanal Makine Ölçek Kümelerinde, yükseltme modları desteklenmemektedir.

Ölçek kümeleri, VM'lerin en son ölçek kümesi modeliyle up-totarihe nasıl getirildiğini belirleyen bir "yükseltme ilkesine" sahiptir. Yükseltme ilkesi için üç mod şunlardır:

  • Otomatik - Bu modda ölçek kümesi, indirilmekte olan VM'lerin sırası hakkında hiçbir garanti vermemektedir. Ölçek kümesi tüm VM'leri aynı anda düşürebilir.
  • Aşamalı - Bu modda ölçek kümesi, toplu işlemler arasında isteğe bağlı bir duraklatma süresiyle güncellemeyi aşamalı olarak devreye alır.
  • El ile - Bu modda, ölçek kümesi modelini güncelleştirdiğinizde, el ile güncelleştirme tetiklenene kadar mevcut VM'lere hiçbir şey olmaz.

Ölçek kümeniz el ile yükseltmeler olarak ayarlandıysa az vmss update kullanarak el ile yükseltme tetikleyebilirsiniz.

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

Uyarı

Service Fabric kümeleri yalnızca Otomatik modu kullanabilir, ancak güncelleştirme farklı işlenir. Daha fazla bilgi için bkz . Service Fabric uygulama yükseltmeleri.

Ölçek kümesini yeniden oluşturma

Sanal Makine Ölçek Kümeleri, ölçek kümesindeki her vm için benzersiz bir ad oluşturur. Adlandırma kuralı düzenleme moduna göre farklılık gösterir:

  • Esnek düzenleme Modu: {scale-set-name}_{8-char-guid}
  • Tekdüzen orkestrasyon modu: {scale-set-name}_{instance-id}

Belirli bir örneği yeniden oluşturmanız gereken durumlarda az vmss reimage komutunu kullanın ve örnek kimliğini belirtin. Bir diğer seçenek de az vm reeploy kullanarak vm'yi doğrudan yeniden görselleştirmektir. Bu komut, örnek kimliğini belirtmek zorunda kalmadan bir VM'yi yeniden oluşturmak istiyorsanız kullanışlıdır.

# 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

Ölçek kümeniz için işletim sistemi görüntüsünü güncelleştirme

Ubuntu'nun eski bir sürümünü çalıştıran bir ölçek kümeniz olabilir. Ubuntu'nun en son sürümü gibi daha yeni bir sürümüne güncelleştirmek istiyorsunuz. Görüntü başvuru sürümü özelliği listenin bir parçası olmadığından az vmss update kullanarak bu özellikleri doğrudan değiştirebilirsiniz.

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

Alternatif olarak, ölçek kümenizin kullandığı görüntüyü değiştirmek isteyebilirsiniz. Örneğin, ölçek kümeniz tarafından kullanılan özel bir görüntüyü güncelleştirmek veya değiştirmek isteyebilirsiniz. Görüntü başvuru kimliği özelliğini güncelleştirerek ölçek kümenizin kullandığı görüntüyü değiştirebilirsiniz. Görüntü başvuru kimliği özelliği listenin bir parçası olmadığından az vmss update kullanarak bu özelliği doğrudan değiştirebilirsiniz.

Azure platform görüntülerini kullanıyorsanız imageReference kısmını değiştirerek görüntüyü güncelleyebilirsiniz (daha fazla bilgi için REST API belgelerine bakın).

Uyarı

Platform görüntüleriyle, görüntü referans sürümü için "en son" belirtmek yaygındır. VM'leri oluşturduğunuzda, ölçeği genişlettiğinizde ve yeniden imaj oluşturduğunuzda, en son kullanılabilir sürümle oluşturulurlar. Ancak, yeni görüntü sürümleri yayımlandıkçe işletim sistemi görüntüsünün zaman içinde otomatik olarak güncelleştirildiği anlamına gelmez . Ayrı bir özellik otomatik işletim sistemi yükseltmeleri sağlar. Daha fazla bilgi için Otomatik İşletim Sistemi Yükseltmeleri belgelerine bakın.

Özel görüntüler kullanıyorsanız imageReference Kimliğini güncelleyerek görüntüyü güncelleyebilirsiniz (daha fazla bilgi için REST API belgelerine bakın).

Ölçek kümeniz için yük dengeleyiciyi güncelleştirme

Azure Load Balancer ile bir ölçek kümeniz olduğunu ve Azure Load Balancer'ı Azure Uygulama Gateway ile değiştirmek istediğinizi varsayalım. Ölçek kümesinin yük dengeleyici ve Application Gateway özellikleri listenin bir parçasıdır, bu nedenle komutları kullanarak özellikleri doğrudan değiştirmek yerine liste öğelerini kaldırabilir veya ekleyebilirsiniz.

# 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}"}'

Uyarı

Bu komutlar, ölçek kümesinde yalnızca bir IP yapılandırması ve yük dengeleyici olduğunu varsayar. Birden çok tane varsa, 0 dışında bir liste dizini kullanmanız gerekebilir.

Sonraki Adımlar

Bu öğreticide ölçek kümenizin çeşitli yönlerini ve tek tek örnekleri değiştirmeyi öğrendiniz.

  • Ölçek kümesi modelini güncelleştirme
  • Ölçek kümesindeki tek bir VM örneğini güncelleştirme
  • Ölçek kümenize örnek ekleme
  • VM'leri up-toen son ölçek kümesi modeliyle güncel hale getirme
  • Ölçek kümesini yeniden oluşturma
  • Ölçek kümeniz için işletim sistemi görüntüsünü güncelleştirme
  • Ölçek kümeniz için yük dengeleyiciyi güncelleştirme