Compartilhar via


Criar um pool do Lote do Azure com Atualização Automática do SO (sistema operacional)

Ao criar um pool do Lote do Azure, você pode provisionar o pool com nós que têm a Atualização Automática do Sistema Operacional habilitada. Este artigo explica como configurar um pool do Lote com a Atualização Automática do Sistema Operacional.

Por que usar a Atualização Automática do Sistema Operacional?

A Atualização Automática do Sistema Operacional é usada para implementar uma estratégia e controle de atualização automática do sistema operacional nos pools do Lote do Azure. Aqui estão alguns motivos para usar a Atualização Automática do Sistema Operacional:

  • Segurança. A Atualização Automática do Sistema Operacional garante a aplicação oportuna de patches para solucionar vulnerabilidades e problemas de segurança na imagem do sistema operacional, a fim de aprimorar a segurança dos recursos de computação. Ela ajuda a evitar que possíveis vulnerabilidades de segurança sejam uma ameaça para aplicativos e dados.
  • Interrupção minimizada da disponibilidade. A Atualização Automática do Sistema Operacional é usada para minimizar a interrupção de disponibilidade dos nós de computação durante as atualizações do sistema operacional. Isso é alcançado por meio do adiamento de atualização com reconhecimento de agendamento de tarefas e suporte para atualizações sem interrupção, garantindo que as cargas de trabalho experimentem o mínimo possível de interrupções.
  • Flexibilidade. A Atualização Automática do Sistema Operacional permite que você configure sua estratégia de atualização automática do sistema operacional, incluindo coordenação de atualização baseada em porcentagem e suporte a reversão. Isso significa que você pode personalizar sua estratégia de atualização para atender aos requisitos específicos de desempenho e disponibilidade.
  • Controle. A Atualização Automática do Sistema Operacional fornece a você 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 adaptar suas configurações de política para atender às necessidades específicas da sua organização.

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

Como funciona a Atualização Automática do Sistema Operacional?

Ao atualizar imagens, as VMs no pool do Lote 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 for definido como 'true' e uma atualização ficar disponível quando um nó em lote estiver executando tarefas ativamente, a atualização será atrasada até que todas as tarefas sejam concluídas no nó.

Observação

Se um pool tiver habilitado osRollingUpgradeDeferral, os nós dele serão exibidos como no estado upgradeos durante o processo de atualização. Observe que o estado upgradeos 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 reinicializando ao atualizar.

Imagens do sistema operacional com suporte

No momento, há suporte apenas para determinadas imagens de plataforma do sistema operacional. Para obter uma lista detalhada das imagens, confira a página de VirtualMachineScaleSet.

Requisitos

  • A propriedade version da imagem precisa ser definida como mais recente.
  • Para a API de Gerenciamento de Lote, 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.
  • Verifique se os recursos externos especificados no modelo de conjunto de dimensionamento estão disponíveis e atualizados. Exemplos incluem o URI SAS para conteúdo de inicialização nas propriedades de extensão da VM, o conteúdo na conta de armazenamento, a referência a segredos no modelo e outros.
  • Se você estiver usando a propriedade virtualMachineConfiguration.windowsConfiguration.enableAutomaticUpdates, ela precisará ser definida como 'false' na definição do pool. A propriedade enableAutomaticUpdates habilita a aplicação de patch 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 sistema operacional habilitadas, um processo adicional de aplicação de patch por meio do Windows Update não é necessário.

Requisitos adicionais para imagens personalizadas

  • Quando uma nova versão da imagem for 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 em que o dimensionamento é implantado, as instâncias do conjunto de dimensionamento não serão atualizadas para a versão mais recente. A replicação de imagem regional permite que você controle 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 para essa imagem da galeria. As versões de imagem excluídas da versão mais recente da imagem da galeria não serão distribuídas por meio da atualização automática da imagem do sistema operacional.

Configurar a Atualização Automática do Sistema Operacional

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 a atualização automática da imagem do sistema operacional, verifique se automaticOSUpgradePolicy.enableAutomaticOSUpgrade está definido como 'true' na definição do pool.

Observação

O modo de política de atualização e a política de atualização automática do sistema operacional são configurações separadas e controlam diferentes aspectos do conjunto de dimensionamento provisionado pelo Lote do Azure. O modo de Política de Atualização determinará o que acontece com instâncias existentes no conjunto de dimensionamento. No entanto, a Política de Atualização Automática do Sistema Operacional enableAutomaticOSUpgrade é específica para a imagem do sistema operacional e controla as alterações feitas pelo editor de imagem e determina o que acontece quando há uma atualização para a imagem.

REST API

O seguinte exemplo descreve como criar um pool com a Atualização automática do sistema operacional por meio da API REST:

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

Corpo da solicitação

{
    "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 snippet de código a seguir mostra um exemplo de como usar a biblioteca de cliente .NET do Lote para criar um pool de Atualização Automática do Sistema Operacional por meio de códigos C#. Para obter mais detalhes sobre o .NET do Lote, confira 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}");
}

Perguntas Frequentes

  • Minhas tarefas serão interrompidas se eu habilitar a Atualização Automática do Sistema Operacional?

    As tarefas não serão interrompidas quando automaticOSUpgradePolicy.osRollingUpgradeDeferral for 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 ele estar executando uma tarefa ou não no momento. Portanto, aconselhamos fortemente habilitar automaticOSUpgradePolicy.osRollingUpgradeDeferral.

Próximas etapas