Partilhar via


NGroups Atualização Contínua

Introdução

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

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

Dentro da Atualização Contínua (RU), existem 2 opções – atualização in-loco e atualização de substituição. Substituir RU é a opção padrão.

Este documento descreve a RU em pormenor. A atualização manual é abordada no link de documentação do NGroups aqui.

Descrição da Funcionalidade

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

Atualização contínua in-loco

Com a RU in-loco, quando atualizamos a referência a cgprofile2 e emitimos um comando UPDATE NGroups, as CGs existentes são atualizadas com cgprofile2. A atualização para CGs existentes acontece em pequenos lotes (e não todos de uma vez). Ele garante que haja um impacto mínimo em sua carga de trabalho, já que apenas uma pequena porcentagem de CGs pode estar indisponível durante a atualização.

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

Como a RU in-loco atualiza CGs existentes, há certas limitações para as propriedades CG que as Instâncias de Contêiner do Azure (ACI) impõem.

Veja as limitações da ACI em relação à atualização de CGs. Além disso, veja aqui as propriedades em CGs que exigem uma exclusão (versus uma atualização).

Substituir Atualização Contínua

Com a substituição RU, quando atualizamos a referência a cgprofile2 e emitimos um comando UPDATE NGroups, novos CGs são criados com cgprofile2. CGs existentes com cgprofile1 são excluídos. Essa criação e exclusão acontecem em pequenos lotes (e não todos de uma vez). Ele garante que haja um impacto mínimo em sua carga de trabalho, já que apenas uma pequena porcentagem de CGs é afetada durante a atualização.

Como o RU in-loco, podemos configurar o tamanho do lote e outras configurações relacionadas ao modo de atualização contínua com a API NGroups.

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

Utilização

Acionando uma atualização contínua

A atualização contínua é acionada quando uma chamada NGroups PUT é feita e o perfil CG na chamada PUT é diferente do perfil CG atualmente referenciado no NGroups.

Em seguida, o NGroups agrupa automaticamente as instâncias em lotes e atualiza um lote de cada vez. O parâmetro maxBatchPercent determina o tamanho do lote.

Atualizando um lote

  • Uma atualização in-loco invoca uma chamada CG PUT para atualizar cada CG do lote.

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

Se um número suficiente de CGs no lote fornecer sinais saudáveis após o período de pausaTimeBetweenBatches, o NGroups iniciará automaticamente o próximo lote para a atualização. Caso contrário, interrompe a distribuição. O parâmetro maxUnhealthyPercent especifica o número total de CGs não íntegros, enquanto 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 como a tag mais recente para imagens de contêiner dentro do perfil CG, o NGroups pegará automaticamente a versão mais recente da imagem durante a RU. Para evitar um comportamento inesperado em seu aplicativo, é recomendável não usar a tag mais recente para imagens. Em vez disso, use versões específicas.

Nota

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

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

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

Para obter o status mais recente de 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 cancelado, o RU não pode ser retomado/reiniciado. É necessário acionar uma nova RU.

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

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

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

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

Se um cliente tiver um NGroups multizonal configurado com três zonas, um lote é confinado a CGs pertencentes a apenas uma zona, no máximo. Um lote nunca consiste em CGs espalhados por várias zonas.

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

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

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