Implantar um grupo de contêineres de Instâncias de Contêiner do Azure (ACI) em uma zona de disponibilidade

Uma zona de disponibilidade é uma zona separada fisicamente numa região do Azure. Você pode usar zonas de disponibilidade para proteger seus aplicativos em contêineres contra uma falha improvável ou perda de um data center inteiro. Três tipos de serviços do Azure dão suporte a zonas de disponibilidade: serviços zonais, com redundância de zona e sempre disponíveis . Você pode saber mais sobre esses tipos de serviços e como eles promovem resiliência na seção Serviços altamente disponíveis dos serviços do Azure que dão suporte a zonas de disponibilidade.

As Instâncias de Contêiner do Azure (ACI) 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.

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.

Limitações

Importante

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

Requisitos de versão

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

Implantar um grupo de contêineres usando um modelo do Azure Resource Manager (ARM)

Criar o modelo ARM

Comece copiando 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]"
        }
    }
}

Implementar o modelo do Resource Manager

Crie um grupo de recursos com o comando az group create :

az group create --name myResourceGroup --location eastus

Implante o modelo com o comando az deployment group create :

az deployment group create \
  --resource-group myResourceGroup \
  --template-file azuredeploy.json

Obter detalhes do grupo de contêineres

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 acilinuxcontainergroup --resource-group myResourceGroup

Próximos passos

Saiba mais sobre como criar aplicativos tolerantes a falhas usando grupos de contêineres zonais no guia do Centro de Arquitetura do Azure sobre zonas de disponibilidade.