Partilhar via


Criar um pool de lotes do Azure com atualização automática do sistema operacional (SO)

Ao criar um pool de Lotes do Azure, você pode provisionar o pool com nós que têm a Atualização Automática do SO habilitada. Este artigo explica como configurar um pool de lotes com a atualização automática do sistema operacional.

Por que usar o Auto OS Upgrade?

A Atualização Automática do SO é utilizada para implementar uma estratégia e controlo de atualização automática do sistema operativo nos Batch Pools do Azure. Aqui estão algumas razões para usar o Auto OS Upgrade:

  • Segurança. A Atualização Automática do SO garante a correção atempada de vulnerabilidades e problemas de segurança na imagem do sistema operativo, para melhorar a segurança dos recursos de computação. Ajuda a evitar que potenciais vulnerabilidades de segurança representem uma ameaça para aplicações e dados.
  • Interrupção de disponibilidade minimizada. A Atualização Automática do SO é utilizada para minimizar a interrupção da disponibilidade dos nós de computação durante as atualizações do SO. Isso é alcançado por meio do adiamento de atualização com reconhecimento de agendamento de tarefas e suporte para atualizações contínuas, garantindo que as cargas de trabalho sofram interrupções mínimas.
  • Flexibilidade. A Atualização Automática do SO permite-lhe configurar a sua estratégia de atualização automática do sistema operativo, incluindo coordenação de atualização baseada em percentagem e suporte de reversão. Isso significa que você pode personalizar sua estratégia de atualização para atender aos seus requisitos específicos de desempenho e disponibilidade.
  • Controlo. A Atualização Automática do SO fornece controle sobre sua estratégia de atualização do sistema operacional para garantir implantações de atualização seguras e com reconhecimento de carga de trabalho. Você pode personalizar suas configurações de política para atender às necessidades específicas de sua organização.

Em resumo, o uso da Atualização Automática do SO ajuda a melhorar a segurança, minimizar as interrupções de disponibilidade e fornecer maior controle e flexibilidade para suas cargas de trabalho.

Como funciona o Auto OS Upgrade?

Ao atualizar imagens, as VMs no Pool de Lotes do Azure seguirão aproximadamente o mesmo fluxo de trabalho que VirtualMachineScaleSets. Para saber mais sobre as etapas detalhadas envolvidas no processo de atualização automática do sistema operacional para VirtualMachineScaleSets, consulte a página VirtualMachineScaleSet.

No entanto, se automaticOSUpgradePolicy.osRollingUpgradeDeferral estiver definido como 'true' e uma atualização ficar disponível quando um nó em lote estiver executando ativamente tarefas, a atualização será adiada até que todas as tarefas tenham sido concluídas no nó.

Nota

Se um pool tiver habilitado osRollingUpgradeDeferral, seus nós serão exibidos como estado de atualização durante o processo de atualização. Observe que o estado de atualização só será mostrado quando você estiver usando a versão da API de 2024-02-01 ou posterior. Se você estiver usando uma versão antiga da API para chamar GetTVM/ListTVM, o nó estará em um estado de reinicialização durante a atualização.

Imagens de SO suportadas

Atualmente, apenas determinadas imagens da plataforma do SO são suportadas para atualização automática. Para obter uma lista de imagens detalhada, você pode obter na página VirtualMachineScaleSet.

Requisitos

  • A propriedade version da imagem deve ser definida como mais recente.
  • Para a API de Gerenciamento de Lotes, use a API versão 2024-02-01 ou superior. Para a API do Serviço de Lote, use a API versão 2024-02-01.19.0 ou superior.
  • Certifique-se de que os recursos externos especificados no pool estejam disponíveis e atualizados. Os exemplos incluem URI SAS para inicialização de carga útil em propriedades de extensão de VM, carga útil na conta de armazenamento, referência a segredos no modelo e muito mais.
  • Se você estiver usando a propriedade virtualMachineConfiguration.windowsConfiguration.enableAutomaticUpdates, essa propriedade deverá ser definida como 'false' na definição do pool. A propriedade enableAutomaticUpdates permite a aplicação de patches na VM em que "Windows Update" aplica patches do sistema operacional sem substituir o disco do sistema operacional. Com as atualizações automáticas de imagem do SO ativadas, não é necessário um processo de aplicação de patches adicional através do Windows Update.

Requisitos adicionais para imagens personalizadas

  • Quando uma nova versão da imagem é publicada e replicada para a região desse pool, as VMs serão atualizadas para a versão mais recente da imagem da Galeria de Computação do Azure. Se a nova imagem não for replicada para a região onde o pool está implantado, as instâncias de VM não serão atualizadas para a versão mais recente. A replicação de imagem regional permite controlar a distribuição da nova imagem para suas VMs.
  • A nova versão da imagem não deve ser excluída da versão mais recente dessa imagem da galeria. As versões de imagem excluídas da versão mais recente da imagem da galeria não serão implementadas através da atualização automática da imagem do SO.

Configurar a Atualização Automática do SO

Se você pretende implementar atualizações automáticas do sistema operacional em um pool, é essencial configurar o campo UpgradePolicy durante o processo de criação do pool. Para configurar atualizações automáticas de imagem do sistema operacional, verifique se a propriedade automaticOSUpgradePolicy.enableAutomaticOSUpgrade está definida como 'true' na definição do pool.

Nota

O modo de Política de Atualização e a Política de Atualização Automática do SO são configurações separadas e controlam diferentes aspetos da escala provisionada definida pelo Lote do Azure. O modo Política de Atualização determinará o que acontece com as instâncias existentes no conjunto de escala. No entanto, a Política de Atualização Automática do SO enableAutomaticOSUpgrade é específica para a imagem do SO e controla as alterações feitas pelo editor da imagem e determina o que acontece quando há uma atualização na imagem.

Importante

Se você estiver usando a assinatura de usuário, é essencial observar que um recurso de assinatura Microsoft.Compute/RollingUpgradeDeferral é necessário para que sua assinatura seja registrada. Você não pode usar osRollingUpgradeDeferral a menos que esse recurso esteja registrado. Para ativar esta funcionalidade, registe-a manualmente na sua subscrição.

API REST

O exemplo a seguir descreve como criar um pool com a Atualização Automática do SO via API REST:

PUT https://management.azure.com/subscriptions/<subscriptionid>/resourceGroups/<resourcegroupName>/providers/Microsoft.Batch/batchAccounts/<batchaccountname>/pools/<poolname>?api-version=2024-02-01

Corpo do Pedido

{
    "name": "test1",
    "type": "Microsoft.Batch/batchAccounts/pools",
    "parameters": {
        "properties": {
            "vmSize": "Standard_d4s_v3",
            "deploymentConfiguration": {
                "virtualMachineConfiguration": {
                    "imageReference": {
                        "publisher": "MicrosoftWindowsServer",
                        "offer": "WindowsServer",
                        "sku": "2019-datacenter-smalldisk",
                        "version": "latest"
                    },
                    "nodePlacementConfiguration": {
                        "policy": "Zonal"
                    },
                    "nodeAgentSKUId": "batch.node.windows amd64",
                    "windowsConfiguration": {
                        "enableAutomaticUpdates": false
                    }
                }
            },
            "scaleSettings": {
                "fixedScale": {
                    "targetDedicatedNodes": 2,
                    "targetLowPriorityNodes": 0
                }
            },
            "upgradePolicy": {
                "mode": "Automatic",
                "automaticOSUpgradePolicy": {
                    "disableAutomaticRollback": true,
                    "enableAutomaticOSUpgrade": true,
                    "useRollingUpgradePolicy": true,
                    "osRollingUpgradeDeferral": true
                },
                "rollingUpgradePolicy": {
                    "enableCrossZoneUpgrade": true,
                    "maxBatchInstancePercent": 20,
                    "maxUnhealthyInstancePercent": 20,
                    "maxUnhealthyUpgradedInstancePercent": 20,
                    "pauseTimeBetweenBatches": "PT0S",
                    "prioritizeUnhealthyInstances": false,
                    "rollbackFailedInstancesOnPolicyBreach": false
                }
            }
        }
    }
}

SDK (C#)

O trecho de código a seguir mostra um exemplo de como usar a biblioteca de cliente .NET em lote para criar um pool de Atualização Automática do SO por meio de códigos C#. Para obter mais detalhes sobre o Batch .NET, consulte a documentação de referência.

public async Task CreateUpgradePolicyPool()
{
     // Authenticate
     var clientId = Environment.GetEnvironmentVariable("CLIENT_ID");
     var clientSecret = Environment.GetEnvironmentVariable("CLIENT_SECRET");
     var tenantId = Environment.GetEnvironmentVariable("TENANT_ID");
     var subscriptionId = Environment.GetEnvironmentVariable("SUBSCRIPTION_ID");
     ClientSecretCredential credential = new ClientSecretCredential(tenantId, clientId, clientSecret);
     ArmClient client = new ArmClient(credential, subscriptionId);
 
     // Get an existing Batch account
     string resourceGroupName = "testrg";
     string accountName = "testaccount";
     ResourceIdentifier batchAccountResourceId = BatchAccountResource.CreateResourceIdentifier(subscriptionId, resourceGroupName, accountName);
     BatchAccountResource batchAccount = client.GetBatchAccountResource(batchAccountResourceId);
 
     // get the collection of this BatchAccountPoolResource
     BatchAccountPoolCollection collection = batchAccount.GetBatchAccountPools();
 
     // Define the pool
     string poolName = "testpool";
     BatchAccountPoolData data = new BatchAccountPoolData()
     {
         VmSize = "Standard_d4s_v3",
         DeploymentConfiguration = new BatchDeploymentConfiguration()
         {
             VmConfiguration = new BatchVmConfiguration(new BatchImageReference()
             {
                 Publisher = "MicrosoftWindowsServer",
                 Offer = "WindowsServer",
                 Sku = "2019-datacenter-smalldisk",
                 Version = "latest",
             },
             nodeAgentSkuId: "batch.node.windows amd64")
             {
                 NodePlacementPolicy = BatchNodePlacementPolicyType.Zonal,
                 IsAutomaticUpdateEnabled = false
             },
         },
         ScaleSettings = new BatchAccountPoolScaleSettings()
         {
             FixedScale = new BatchAccountFixedScaleSettings()
             {
                 TargetDedicatedNodes = 2,
                 TargetLowPriorityNodes = 0,
             },
         },
         UpgradePolicy = new UpgradePolicy()
         {
             Mode = UpgradeMode.Automatic,
             AutomaticOSUpgradePolicy = new AutomaticOSUpgradePolicy()
             {
                 DisableAutomaticRollback = true,
                 EnableAutomaticOSUpgrade = true,
                 UseRollingUpgradePolicy = true,
                 OSRollingUpgradeDeferral = true
             },
             RollingUpgradePolicy = new RollingUpgradePolicy()
             {
                 EnableCrossZoneUpgrade = true,
                 MaxBatchInstancePercent = 20,
                 MaxUnhealthyInstancePercent = 20,
                 MaxUnhealthyUpgradedInstancePercent = 20,
                 PauseTimeBetweenBatches = "PT0S",
                 PrioritizeUnhealthyInstances = false,
                 RollbackFailedInstancesOnPolicyBreach = false,
             }
         }
     };
 
     ArmOperation<BatchAccountPoolResource> lro = await collection.CreateOrUpdateAsync(WaitUntil.Completed, poolName, data);
     BatchAccountPoolResource result = lro.Value;
 
     // the variable result is a resource, you could call other operations on this instance as well
     // but just for demo, we get its data from this resource instance
     BatchAccountPoolData resourceData = result.Data;
     // for demo we just print out the id
     Console.WriteLine($"Succeeded on id: {resourceData.Id}");
}

FAQs

  • As minhas tarefas serão interrompidas se eu tiver ativado a Atualização Automática do SO?

    As tarefas não serão interrompidas quando automaticOSUpgradePolicy.osRollingUpgradeDeferral estiver definido como 'true'. Nesse caso, a atualização será adiada até que o nó fique ocioso. Caso contrário, o nó será atualizado quando receber uma nova versão do sistema operacional, independentemente de estar executando uma tarefa ou não. Por isso, recomendamos vivamente que ative o automaticOSUpgradePolicy.osRollingUpgradeDeferral.

Próximos passos

  • Saiba como usar uma imagem gerenciada para criar um pool.
  • Saiba como usar a Galeria de Computação do Azure para criar um pool.