Partilhar via


Confiabilidade em instâncias de contêiner do Azure

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 são grupos fisicamente separados de datacenters dentro de cada região do Azure. Quando uma zona falha, os serviços podem fazer failover para uma das zonas restantes.

Para obter mais informações sobre zonas de disponibilidade no Azure, consulte O que são zonas 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

  • 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 :

    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 container show --name acilinuxpublicipcontainergroup --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