애플리케이션의 수명 주기 내내 Virtual Machine Scale Set을 수정하거나 업데이트해야 할 수 있습니다. 이러한 업데이트에는 확장 집합의 구성을 업데이트하거나 애플리케이션 구성을 변경하는 방법이 포함될 수 있습니다. 이 문서에서는 Azure CLI를 사용하여 기존 확장 집합을 수정하는 방법을 설명합니다.
아래에서는 이 문서 전체에서 사용할 환경 변수를 선언합니다. 각 배포에 대해 고유해야 하는 리소스 이름에 임의 접미사가 추가됩니다.
REGION
로 설정됩니다.
리소스 그룹 설정
계속하기 전에 리소스 그룹이 있는지 확인합니다. 이 단계에서는 리소스 그룹이 아직 없는 경우 만듭니다.
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"
}
Virtual Machine Scale Set 만들기
후속 업데이트 및 쿼리 명령에 사용할 유효한 리소스가 있는지 확인하려면 Virtual Machine Scale Set을 만듭니다. 이 단계에서는 유효한 이미지(Ubuntu2204)를 사용하여 기본 확장 집합을 배포하고 인스턴스별 업데이트가 기존 인스턴스 ID를 대상으로 할 수 있도록 인스턴스 수를 5로 설정합니다.
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"
}
확장 집합 모델 업데이트
확장 집합에는 확장 집합의 원하는 상태를 전체적으로 캡처하는 "확장 집합 모델"이 있습니다. 확장 집합에 대한 모델을 쿼리하려면 az vmss show를 사용할 수 있습니다.
az vmss show --resource-group $MY_RESOURCE_GROUP_NAME --name $SCALE_SET_NAME
출력의 정확한 표시는 명령에 제공하는 옵션에 따라 달라집니다. 다음 예제에서는 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"
}
}
}
az vmss update를 사용하여 확장 집합의 다양한 속성을 업데이트할 수 있습니다. 예를 들어 라이선스 유형 또는 VM의 인스턴스 보호 정책을 업데이트합니다. 허용되는 라이선스 유형 값은 RHEL_BYOS이며, 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
또한 이전에 명령을 사용하여 확장 집합 az vmss create 을 배포한 경우 명령을 다시 실행 az vmss create 하여 확장 집합을 업데이트할 수 있습니다. 수정하려는 속성을 제외하고 명령의 az vmss create 모든 속성이 이전과 동일한지 확인합니다. 예를 들어 아래에서는 인스턴스 수를 5개로 늘입니다.
중요합니다
2023년 11월부터 PowerShell 및 Azure CLI를 사용하여 만들어진 VM Scale Sets는 오케스트레이션 모드가 지정되지 않은 경우 기본적으로 유연한 오케스트레이션 모드로 설정됩니다. 변경 사항과 수행해야 할 작업에 대한 자세한 내용은 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
확장 집합에서 개별 VM 인스턴스 업데이트
확장 집합에 모델 보기가 있는 방식과 마찬가지로 확장 집합의 각 VM 인스턴스에는 고유한 모델 보기가 있습니다. 확장 집합에서 특정 VM 인스턴스에 대한 모델 뷰를 쿼리하려면 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
출력의 정확한 표시는 명령에 제공하는 옵션에 따라 달라집니다. 다음 예제에서는 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"
}
}
이러한 속성은 확장 집합 전체의 구성이 아니라 확장 집합 내에서 VM 인스턴스의 구성을 설명합니다.
독립 실행형 VM과 마찬가지로 확장 집합에서 개별 VM 인스턴스에 대한 업데이트를 수행할 수 있습니다. 예를 들어 인스턴스 1에 새 데이터 디스크를 연결합니다.
az vm disk attach --resource-group $MY_RESOURCE_GROUP_NAME --vm-name $INSTANCE_NAME --name disk_name1 --new
az vm show를 다시 실행하면 이제 VM 인스턴스에 새 디스크가 연결된 것을 볼 수 있습니다.
{
"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
}
]
}
}
확장 집합에 인스턴스 추가
확장 집합에 새 VM을 추가하지만 확장 집합 모델에 나열된 것과 다른 구성 옵션을 원하는 경우가 있습니다. az vm create 명령을 사용하고 인스턴스를 추가할 확장 집합 이름을 지정하여 VM을 만드는 동안 확장 집합에 추가할 수 있습니다.
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": ""
}
그런 다음 확장 집합을 확인하면 새 인스턴스가 추가된 것을 볼 수 있습니다.
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 up-to-date 가져오기
비고
업그레이드 모드는 현재 유연한 오케스트레이션 모드를 사용하여 Virtual Machine Scale Sets에서 지원되지 않습니다.
확장 집합에는 최신 확장 집합 모델을 사용하여 VM을 up-to가져오는 방법을 결정하는 "업그레이드 정책"이 있습니다. 업그레이드 정책의 세 가지 모드는 다음과 같습니다.
- 자동 - 이 모드에서 스케일 집합은 VM을 종료시키는 순서에 대해 보장을 하지 않습니다. 확장 집합은 모든 VM을 동시에 축소할 수 있습니다.
- 롤링 - 이 모드에서 스케일 집합은 일괄 처리 간에 선택적 일시 중지 시간을 두고 업데이트를 진행합니다.
- 수동 - 이 모드에서는 확장 집합 모델을 업데이트할 때 수동 업데이트가 트리거될 때까지 기존 VM에는 아무 작업도 수행되지 않습니다.
확장 집합이 수동 업그레이드로 설정된 경우, az vmss update 명령을 사용하여 수동 업그레이드를 트리거할 수 있습니다.
az vmss update --resource-group $MY_RESOURCE_GROUP_NAME --name $SCALE_SET_NAME
비고
Service Fabric 클러스터는 자동 모드만 사용할 수 있지만 업데이트는 다르게 처리됩니다. 자세한 내용은 Service Fabric 애플리케이션 업그레이드를 참조하세요.
스케일 세트 이미지 복구
Virtual Machine Scale Sets는 확장 집합의 각 VM에 대해 고유한 이름을 생성합니다. 명명 규칙은 오케스트레이션 모드에 따라 다릅니다.
- 유연한 오케스트레이션 모드: {scale-set-name}_{8-char-guid}
- 균일한 조율 모드: {scale-set-name}_{instance-id}
특정 인스턴스를 이미지로 다시 설치해야 하는 경우 az vmss reimage를 사용하고 인스턴스 ID를 지정합니다. 또 다른 옵션은 az vm 다시 배포 를 사용하여 VM을 직접 이미지로 다시 설치하는 것입니다. 이 명령은 인스턴스 ID를 지정하지 않고 VM을 이미지로 다시 설치하려는 경우에 유용합니다.
# 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
규모 세트에 대한 OS 이미지 업데이트
Ubuntu의 이전 버전을 실행하는 규모 설정 집합이 있을 수 있습니다. 최신 버전과 같은 최신 버전의 Ubuntu로 업데이트하려고 합니다. 이미지 참조 버전 속성은 목록의 일부가 아니므로 az vmss 업데이트를 사용하여 이러한 속성을 직접 수정할 수 있습니다.
az vmss update --resource-group $MY_RESOURCE_GROUP_NAME --name $SCALE_SET_NAME --set virtualMachineProfile.storageProfile.imageReference.version=latest
또는 확장 집합에서 사용하는 이미지를 변경할 수 있습니다. 예를 들어 확장 집합에서 사용하는 사용자 지정 이미지를 업데이트하거나 변경할 수 있습니다. 이미지 참조 ID 속성을 업데이트하여 확장 집합에서 사용하는 이미지를 변경할 수 있습니다. 이미지 참조 ID 속성은 목록의 일부가 아니므로 az vmss update를 사용하여 이 속성을 직접 수정할 수 있습니다.
Azure 플랫폼 이미지를 사용하는 경우 imageReference 를 수정하여 이미지를 업데이트할 수 있습니다(자세한 내용은 REST API 설명서 참조).
비고
플랫폼 이미지를 사용하면 이미지 참조 버전에 "최신"을 지정하는 것이 일반적입니다. VM을 만들고, 스케일 아웃하며, 다시 이미징할 때, 가용한 최신 버전으로 VM이 생성됩니다. 그러나 새 이미지 버전이 릴리스될 때 시간이 지남에 따라 OS 이미지가 자동으로 업데이트된다는 의미는 아닙니다 . 별도의 기능은 자동 OS 업그레이드를 제공합니다. 자세한 내용은 자동 OS 업그레이드 설명서를 참조하세요.
사용자 지정 이미지를 사용하는 경우 imageReference ID를 업데이트하여 이미지를 업데이트할 수 있습니다(자세한 내용은 REST API 설명서 참조).
확장 집합의 로드 밸런서를 업데이트하십시오
Azure Load Balancer를 사용하는 확장 집합이 있고 Azure Load Balancer를 Azure Application Gateway로 바꾸려고 하는 경우를 가정해 보겠습니다. 확장 집합에 대한 부하 분산 장치 및 Application Gateway 속성은 목록의 일부이므로 명령을 사용하여 속성을 직접 수정하는 대신 목록 요소를 제거하거나 추가할 수 있습니다.
# 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}"}'
비고
이러한 명령은 확장 집합에 IP 구성 및 부하 분산 장치가 하나만 있다고 가정합니다. 여러 개 있는 경우 0 이외의 목록 인덱스만 사용해야 할 수 있습니다.
다음 단계
이 자습서에서는 확장 집합 및 개별 인스턴스의 다양한 측면을 수정하는 방법을 알아보았습니다.
- 확장 집합 모델 업데이트
- 확장 집합에서 개별 VM 인스턴스를 업데이트하십시오.
- 확장 집합에 인스턴스 추가
- 최신 확장 집합 모델을 사용하여 VM up-to-date 가져오기
- 스케일 세트 이미지 복구
- 규모 세트에 대한 OS 이미지 업데이트
- 확장 집합의 로드 밸런서를 업데이트하십시오