Confiabilidade em instâncias de contêiner do Azure

Importante

Esta funcionalidade está atualmente em pré-visualização. As pré-visualizações são disponibilizadas a si na condição de concordar com os termos suplementares de utilização.

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

Suporte à zona de disponibilidade

As zonas de disponibilidade do Azure são pelo menos três grupos fisicamente separados de datacenters em cada região do Azure. Os datacenters dentro de cada zona são equipados com infraestrutura independente de energia, resfriamento e rede. No caso de uma falha de zona local, as zonas de disponibilidade são projetadas de modo que, se uma zona for afetada, os serviços regionais, a capacidade e a alta disponibilidade sejam suportados pelas 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 é alcançada com redundância e isolamento lógico dos serviços do Azure. Para obter informações mais detalhadas sobre zonas de disponibilidade no Azure, consulte Regiões e zonas de disponibilidade.

Os serviços habilitados para zonas de disponibilidade do Azure são projetados para fornecer o nível certo de confiabilidade e flexibilidade. Eles podem ser configurados de duas maneiras. Eles podem ser redundantes de zona, com replicação automática entre zonas, ou zonais, com instâncias fixadas a uma zona específica. Você também pode combinar essas abordagens. Para obter mais informações sobre arquitetura zonal versus arquitetura com redundância 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 grupos de contêineres zonais , o que significa que a instância é fixada em uma zona de disponibilidade específica e autoselecionada. 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 seu grupo de contêineres, você deve excluir o grupo de contêineres e criar outro grupo de contêineres com a nova zona de disponibilidade.

Pré-requisitos

Importante

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

  • As implantações de grupos de contêineres zonais são suportadas na maioria das regiões onde o ACI está disponível para grupos de contêineres do Linux e do Windows Server 2019. Para obter detalhes, consulte Regiões e disponibilidade de recursos.
  • 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 Java SDK, verifique se a versão 2.9.0 ou posterior está instalada.
  • O suporte à zona de disponibilidade só está disponível na versão 09-01-2021 da API ACI ou posterior.

Importante

No momento, os grupos de contêineres com recursos de GPU não oferecem suporte a zonas de disponibilidade.

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

Para alterar a zona de disponibilidade do seu grupo de contêineres, você deve excluir o grupo de contêineres e criar outro grupo de contêineres com a nova zona de disponibilidade.

Criar um recurso com a zona de disponibilidade ativada

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 Azure Resource Manager (ARM).

Nota

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

Para implantar um contêiner com 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 único 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 o grupo de contêineres implantado com êxito em uma zona de disponibilidade, exiba 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 um mínimo de dois grupos de contêineres em duas zonas de disponibilidade diferentes em uma determinada região. Isso garante que seus recursos de instância de contêiner estejam ativos e em execução sempre que qualquer zona isolada nessa região sofrer interrupções.

Recuperação após desastre

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

Próximos passos