Confiabilidade nas Instâncias de Contêiner do Azure

Importante

Esse recurso está atualmente na visualização. As versões prévias são disponibilizadas com a condição de que você concorde com os termos de uso complementares.

Este artigo descreve o suporte à confiabilidade nas ACI (Instâncias de Contêiner do Azure) e engloba tanto a resiliência intrarregional com zonas de disponibilidade quanto informações sobre Recuperação de Desastre. Para obter uma visão geral mais detalhada da confiabilidade no Azure, confira Confiabilidade do Azure.

Suporte à zona de disponibilidade

As zonas de disponibilidade do Azure são pelo menos três grupos de datacenters separados fisicamente em cada região do Azure. Os datacenters dentro de cada zona são equipados com energia, resfriamento e infraestrutura de rede independentes. Em caso de falha de uma zona local, as zonas de disponibilidade foram projetadas de modo que, se uma zona é afetada, os serviços regionais, a capacidade e a alta disponibilidade têm suporte nas duas zonas restantes.

As falhas podem variar de falhas de software e hardware a eventos como terremotos, inundações e incêndios. A tolerância a falhas é obtida devido à redundância e ao isolamento lógico dos serviços do Azure. Para obter informações detalhadas sobre as zonas de disponibilidade no Azure, confira Regiões e zonas de disponibilidade.

Os serviços habilitados para zonas de disponibilidade do Azure foram projetados para fornecer o nível ideal de resiliência e flexibilidade. Eles podem ser configurados de duas maneiras. Eles podem ter redundância de zona, com replicação automática entre zonas, ou podem ser zonais, com instâncias fixadas em uma zona específica. Você também pode combinar essas abordagens. Para obter mais informações sobre arquitetura zonal versus redundante de zona, consulte Recomendações para usar zonas e regiões de disponibilidade.

As Instâncias de Contêiner do Azure dão suporte a implantações de grupo de contêineres zonais, o que significa que a instância está fixada em uma zona de disponibilidade específica e selecionada automaticamente. A zona de disponibilidade é especificada no nível do grupo de contêineres. Os contêineres dentro de um grupo de contêineres não podem ter zonas de disponibilidade exclusivas. Para alterar a zona de disponibilidade do grupo de contêineres, exclua o grupo de contêineres e crie outro grupo de contêineres com a nova zona de disponibilidade.

Pré-requisitos

Importante

Este recurso não está disponível no momento para o portal do Azure.

  • As implantações de grupo de contêineres zonais têm suporte na maioria das regiões em que ACI está disponível para grupos de contêineres do Linux e Windows Server 2019. Para obter detalhes, veja Disponibilidade de recursos e regiões.
  • Se estiver usando a CLI do Azure, verifique se a versão 2.30.0 ou posterior está instalada.
  • Se estiver usando o PowerShell, verifique se a versão 2.1.1-preview ou posterior está instalada.
  • Se estiver usando o SDK Java, verifique se a versão 2.9.0 ou posterior está instalada.
  • O suporte à zona de disponibilidade só está disponível na versão da API ACI 09-01-2021 ou posterior.

Importante

Os grupos de contêineres com recursos de GPU não dão suporte a zonas de disponibilidade no momento.

Reimplantação e migração da zona de disponibilidade

Para alterar a zona de disponibilidade do grupo de contêineres, exclua o grupo de contêineres e crie outro grupo de contêineres com a nova zona de disponibilidade.

Criar um recurso com a zona de disponibilidade habilitada

Para criar um recurso de Instância de Contêiner com a zona de disponibilidade habilitada, você precisará implantar um grupo de contêineres usando um modelo do ARM (Azure Resource Manager).

Observação

Os exemplos neste artigo são formatados para o shell do Bash. Se você preferir outro shell, ajuste os caracteres de continuação da linha de acordo.

Para implantar um contêiner com o ARM:

  1. Copie e cole o JSON a seguir em um novo arquivo chamado azuredeploy.json. Este modelo de exemplo implanta um grupo de contêineres com um só contêiner na zona de disponibilidade 1 no Leste dos EUA.

    {
        "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
        "contentVersion": "1.0.0.0",
        "metadata": {
            "_generator": {
                "name": "bicep",
                "version": "0.4.1.14562",
                "templateHash": "12367894147709986470"
            }
        },
        "parameters": {
            "name": {
                "type": "string",
                "defaultValue": "acilinuxpublicipcontainergroup",
                "metadata": {
                    "description": "Name for the container group"
                }
            },
            "image": {
                "type": "string",
                "defaultValue": "mcr.microsoft.com/azuredocs/aci-helloworld",
                "metadata": {
                    "description": "Container image to deploy. Should be of the form repoName/imagename:tag for images stored in public Docker Hub, or a fully qualified URI for other registries. Images from private registries require additional registry credentials."
                }
            },
            "port": {
                "type": "int",
                "defaultValue": 80,
                "metadata": {
                    "description": "Port to open on the container and the public IP address."
                }
            },
            "cpuCores": {
                "type": "int",
                "defaultValue": 1,
                "metadata": {
                    "description": "The number of CPU cores to allocate to the container."
                }
            },
            "memoryInGb": {
                "type": "int",
                "defaultValue": 2,
                "metadata": {
                    "description": "The amount of memory to allocate to the container in gigabytes."
                }
            },
            "restartPolicy": {
                "type": "string",
                "defaultValue": "Always",
                "allowedValues": [
                    "Always",
                    "Never",
                    "OnFailure"
                ],
                "metadata": {
                    "description": "The behavior of Azure runtime if container has stopped."
                }
            },
            "location": {
                "type": "string",
                "defaultValue": "eastus",
                "metadata": {
                    "description": "Location for all resources."
                }
            }
        },
        "functions": [],
        "resources": [
            {
                "type": "Microsoft.ContainerInstance/containerGroups",
                "apiVersion": "2021-09-01",
                "zones": [
                    "1"
                ],
                "name": "[parameters('name')]",
                "location": "[parameters('location')]",
                "properties": {
                    "containers": [
                        {
                            "name": "[parameters('name')]",
                            "properties": {
                                "image": "[parameters('image')]",
                                "ports": [
                                    {
                                        "port": "[parameters('port')]",
                                        "protocol": "TCP"
                                    }
                                ],
                                "resources": {
                                    "requests": {
                                        "cpu": "[parameters('cpuCores')]",
                                        "memoryInGB": "[parameters('memoryInGb')]"
                                    }
                                }
                            }
                        }
                    ],
                    "osType": "Linux",
                    "restartPolicy": "[parameters('restartPolicy')]",
                    "ipAddress": {
                        "type": "Public",
                        "ports": [
                            {
                                "port": "[parameters('port')]",
                                "protocol": "TCP"
                            }
                        ]
                    }
                }
            }
        ],
        "outputs": {
            "containerIPv4Address": {
                "type": "string",
                "value": "[reference(resourceId('Microsoft.ContainerInstance/containerGroups', parameters('name'))).ipAddress.ip]"
            }
        }
    }
    
  2. Crie um grupo de recursos com o comando [az group create][availability-zones-group-create]:

    az group create --name myResourceGroup --location eastus
    
  3. Implante o modelo com o comando az deployment group create:

    az deployment group create \
      --resource-group myResourceGroup \
      --template-file azuredeploy.json
    
  4. Para verificar se o grupo de contêineres foi implantado com êxito em uma zona de disponibilidade, veja os detalhes do grupo de contêineres com o comando az container show:

    az containershow --name acilinuxcontainergroup --resource-group myResourceGroup
    

Suporte a failover zonal

Um grupo de contêineres de instâncias de contêiner é atribuído a uma única zona de disponibilidade. Como resultado, esse grupo de instâncias de contêiner não será afetado por uma interrupção que ocorra em qualquer outra zona de disponibilidade da mesma região

Se, no entanto, ocorrer uma interrupção na zona de disponibilidade do grupo de contêineres, você poderá esperar tempo de inatividade para todas as instâncias de contêiner dentro desse grupo.

Para evitar o tempo de inatividade da instância de contêiner, recomendamos que você crie no mínimo dois grupos de contêineres em duas zonas de disponibilidade diferentes em uma determinada região. Isso garante que os recursos da instância de contêiner estejam em funcionamento sempre que qualquer zona única nessa região apresentar interrupção.

Recuperação de desastre

Quando uma região ou um datacenter inteiro do Azure fica offline, o seu código crítico precisa continuar processando em outra região. Instâncias de Contêiner do Azure implantadas com a configuração zonal são executadas em uma zona específica dentro de uma região específica. Não há redundância interna disponível. Para evitar a perda de execução durante interrupções em toda a região, você pode implantar com redundância as instâncias de contêiner em outras regiões.

Próximas etapas