Compartilhar via


Atualização contínua do NGroups

Introdução

À medida que os requisitos mudam, você pode precisar continuar atualizando seus NGroups e seus grupos de contêiner (CGs).

Existem dois modos de atualização disponíveis para atualizar um NGroups – Manual (opção padrão) e Contínua.

Dentro do Atualização Contínua (RU), existem 2 opções – atualização no local e atualização de substituição. A RU de substituição é a opção padrão.

Este documento descreve a RU em detalhes. A atualização manual é abordada na documentação do NGroups.

Descrição do recurso

Considere um exemplo básico de atualização de uma referência de perfil de CG de cgprofile1 para cgprofile2.

Atualização contínua no local

Com RU no local, quando atualizamos a referência para cgprofile2 e emitimos um comando UPDATE NGroups, CGs existentes são atualizados com cgprofile2. A atualização dos CGs existentes acontece em pequenos lotes, não toda de uma vez. Garante que haja um impacto mínimo na sua carga de trabalho, pois apenas uma pequena porcentagem de CGs pode ficar indisponível durante a atualização.

É possível configurar o tamanho do lote e outras configurações relacionadas ao modo de atualização contínua com a API do NGroups.

Como a RU no local atualiza os CGs existentes, há certas limitações nas propriedades do CG aplicadas pelas ACI (Instâncias de Contêiner do Azure).

Veja as limitações do ACI sobre a atualização de CGs. Confira também as propriedades em CGs que devem ser excluídas (em vez de atualizadas).

Atualização contínua de substituição

Com RU de substituição, quando atualizamos a referência para cgprofile2 e emitimos um comando UPDATE NGroups, novos CGs são criados com cgprofile2. Os CGs existentes com cgprofile1 são excluídos. A criação e a exclusão acontecem em pequenos lotes, não de uma só vez. Garante que haja um impacto mínimo na sua carga de trabalho, pois apenas uma pequena porcentagem de CGs é impactada durante a atualização.

Assim como ocorre com a RU no local, é possível configurar o tamanho do lote e outras configurações relacionadas ao modo de atualização contínua com a API do NGroups.

Como a RU de substituição cria CGs, há menos limitações aplicadas pelas ACI. Como resultado, a RU de substituição é uma opção mais poderosa e é a opção padrão quando um cliente seleciona RU.

Uso

Disparar uma atualização contínua

A atualização contínua é disparada quando uma chamada PUT do NGroups é feita e o perfil de CG contido nela é diferente daquele atualmente referenciado no NGroups.

Os NGroups agrupam automaticamente as instâncias em lotes e atualizam um lote por vez. O parâmetro maxBatchPercent determina o tamanho do lote.

Atualizar um lote

  • Uma atualização no local invoca uma chamada PUT de CG para atualizar cada CG do lote.

  • Uma atualização de substituição invoca uma chamada PUT de CG para criar novos CGs e excluir CGs existentes do lote. Existe uma correspondência 1:1 entre os CGs sendo criados e os CGs sendo excluídos. No entanto, os nomes dos CGs serão diferentes.

Se um número suficiente de CGs no lote fornecer sinais de integridade ​​após o período pauseTimeBetweenBatches, o NGroups iniciará automaticamente a atualização do próximo lote. Caso contrário, a atualização é interrompida. O parâmetro maxUnhealthyPercent especifica o número total de CGs não íntegros e o parâmetro maxUnhealthyUpdatedPercent especifica o número total de CGs não íntegros após a atualização.

Aqui está um exemplo para emitir uma solicitação de atualização contínua para NGroups:

{ 
    "location": "{{location}}", 
    "properties": { 
        "updateProfile": { 
            "updateMode": "Rolling", 

            "rollingUpdateProfile": { 
                // Maximum percentage of total CGs which can be updated  
                // simultaneously by rolling update in one batch. 
                “maxBatchPercent”: “10”, // optional, defaults to 20% 

                // Maximum percentage of the total CGs across the whole NGroup  
                // that can be unhealthy at a time either by rolling update or health 
                // checks by liveness probes. If there are more unhealthy CGs than this,  
                // the current rolling update is marked as failed. 
                // This check is a prerequisite to start any batch. 
                “maxUnhealthyPercent”: “10”, // optional, defaults to 20% 

                // Maximum percentage of the updated CGs which can be in unhealthy state  
                // after each batch is updated. If there are more unhealthy CGs than this,  
                // the current rolling update is marked as failed. 
                “maxUnhealthyUpdatedPercent”: 10, // optional, defaults to 20% 

                // The wait time between batches after completing one batch of the rolling 
                // update and before starting the next batch. The time duration should  
                // be specified in ISO 8601 format for duration. 
                "pauseTimeBetweenBatches": "PT2M", // optional, defaults to PT1M 

                // A nullable boolean property. Default is null 
                // Sets the mode to either in-place RU (when true) or replace (default) RU. 
                “inPlaceUpdate”: null/false/true 
            } 
        }, 
        "containerGroupProfiles": [
            { 
                "resource": { 
                    "id": "/subscriptions/{{subId}}/resourceGroups/{{rgName}}/providers/Microsoft.ContainerInstance/containerGroupProfiles/cgp1" 
                } 
            } 
        ] 
    } 
} 

Se a versão da imagem estiver definida para a marca mais recente para imagens de contêiner dentro do perfil CG, os NGroups automaticamente capturam a versão mais recente da imagem durante a RU. Para evitar comportamento inesperado em sua aplicação, é recomendado não usar a marca mais recente para imagens. Em vez disso, use versões específicas.

Observação

Para usar a RU de substituição, defina a tag "rollingupdate.replace.enabled: true" para o recurso NGroups. Esta marca é temporária e não será necessária no futuro.

“tags”: { 
    “rollingupdate.replace.enabled”: true 
} 

Como obter o status de uma atualização contínua em execução

Para obter o status mais recente da sua atualização contínua, você pode usar esta API REST:

GET /subscriptions/{subscriptionId}/resourceGroups/{{rgName}}/providers/Microsoft.ContainerInstance/NGroups/{{ngroupsName}}/latestRollingUpdate

Isso retorna uma resposta contendo informações relevantes sobre a RU.

Cancelando uma Atualização Contínua

Para cancelar uma atualização contínua, use a seguinte API. Uma vez cancelada, a RU não pode ser retomada/reiniciada. Uma nova RU precisa ser disparada.

POST /subscriptions/{subscriptionId}/resourceGroups/{{rgName}}/providers/Microsoft.ContainerInstance/NGroups/{{ngroupsName}}/cancelRollingUpdate

Você não precisa fornecer um corpo de solicitação ao chamar esta API.

Limite de um lote em uma atualização contínua

Os CGs de um lote específico em uma RU não cruzam uma fronteira de modelo de falha. Um modelo de falha representa uma combinação de zona/domínio de falha (FD). Por exemplo, zona 1/FD 0 é um limite de modelo de falha, zona 1/FD 1 é outro limite de modelo de falha e zona 2/FD 0 é um terceiro limite de modelo de falha.

Se um cliente tiver um NGroups multizonal configurado com três zonas, um lote será limitado aos CGs pertencentes a uma única zona, no máximo. Um lote nunca consiste em CGs espalhados por diversas zonas.

Se um cliente tiver uma configuração multizonal e multi-FD do NGroups, um lote ainda consistirá nos CGs pertencentes a um único FD em uma única zona, no máximo.

O NGroups mantém esse limite de modelo de falha para um lote, mesmo quando o número de CGs selecionados para esse lote é muito menor que a configuração maxBatchPercent. Isso exemplifica a preferência do NGroups por atualizações seguras, em vez de atualizações mais rápidas e, portanto mais arriscadas.

A única vez em que um limite de modelo de falha é cruzado é quando a RU seleciona CGs não íntegros para o primeiro lote. Nesse lote, a RU tenta atualizar todos os CGs não íntegros para melhorar a disponibilidade geral do NGroups. Como resultado, ao atualizar CGs não íntegros, a RU pode exceder a configuração maxBatchPercent.