Confiabilidad en Azure Container Instances

Importante

Esta funcionalidad actualmente está en su versión preliminar. Las versiones preliminares están a su disposición con la condición de que acepte los términos de uso adicionales.

En este artículo se describe la compatibilidad con la confiabilidad en Azure Container Instances (ACI) y cubre la resistencia intrarregional con zonas de disponibilidad e información sobre la recuperación ante desastres. Para obtener información general más detallada sobre la confiabilidad de Azure, consulte Confiabilidad de Azure.

Compatibilidad de zonas de disponibilidad

Las zonas de disponibilidad de Azure son al menos tres grupos de centros de datos físicamente independientes dentro de cada región de Azure. Los centros de datos de cada zona están equipados con infraestructura de alimentación, refrigeración y red independientes. En el caso de un error en la zona local, las zonas de disponibilidad están diseñadas de manera que, si se ve afectada una zona, los servicios, la capacidad y la alta disponibilidad regionales serán proporcionadas por las dos zonas restantes.

Estos errores pueden abarcar desde errores de software y hardware hasta eventos como terremotos, inundaciones e incendios. La tolerancia a los errores se logra con la redundancia y el aislamiento lógico de los servicios de Azure. Para más información sobre las zonas de disponibilidad en Azure, consulte Regiones y zonas de disponibilidad.

Los servicios habilitados para zonas de disponibilidad de Azure están diseñados para proporcionar el nivel adecuado de confiabilidad y flexibilidad. Se pueden configurar de dos maneras. Pueden tener redundancia de zona, con una replicación automática entre zonas o ser zonales, con instancias ancladas a una zona específica. También puede combinar ambos enfoques. Para más información sobre la arquitectura zonal frente a la arquitectura con redundancia de zona, consulte Recomendaciones para el uso de zonas de disponibilidad y regiones.

Azure Container Instances admite implementaciones de grupos de contenedores zonales, lo que significa que la instancia está anclada a una zona de disponibilidad específica y seleccionada automáticamente. La zona de disponibilidad se especifica en el nivel de grupo de contenedores. Los contenedores de un grupo de contenedores no pueden tener zonas de disponibilidad únicas. Para cambiar la zona de disponibilidad del grupo de contenedores, debe eliminar el grupo de contenedores y crear otro grupo de contenedores con la nueva zona de disponibilidad.

Prerrequisitos

Importante

Esta característica no está disponible actualmente para Azure Portal.

  • Las implementaciones de grupos de contenedores zonales se admiten en la mayoría de las regiones en las que ACI está disponible para grupos de contenedores de Linux y Windows Server 2019. Para obtener más información, consulte Regiones y disponibilidad de recursos.
  • Si usa CLI de Azure, asegúrese de que esté instalada la versión 2.30.0 o posterior.
  • Si usa PowerShell, asegúrese de que esté instalada la versión 2.1.1-preview o posterior.
  • Si usa el SDK de Java, asegúrese de que esté instalada la versión 2.9.0 o posterior.
  • La compatibilidad con la zona de disponibilidad solo está disponible en la versión de la API de ACI 09-01-2021 o posterior.

Importante

Los grupos de contenedores con recursos de GPU no admiten zonas de disponibilidad en este momento.

Reimplementación y migración de una zona de disponibilidad

Para cambiar la zona de disponibilidad del grupo de contenedores, debe eliminar el grupo de contenedores y crear otro grupo de contenedores con la nueva zona de disponibilidad.

Creación de un recurso con la zona de disponibilidad habilitada

Para crear un recurso de instancia de contenedor con la zona de disponibilidad habilitada, deberá implementar un grupo de contenedores mediante una plantilla de Azure Resource Manager (ARM).

Nota:

Los ejemplos que aparecen en este artículo están formateados para el shell de Bash. Si prefiere otro shell, ajuste los caracteres de continuación de línea en consecuencia.

Para implementar un contenedor con ARM:

  1. Copie y pegue el siguiente JSON en un nuevo archivo denominado azuredeploy.json. Esta plantilla de ejemplo implementa un grupo de contenedores con un único contenedor en la zona de disponibilidad 1 de la región Este de EE. UU.

    {
        "$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. Cree un grupo de recursos con el comando [az group create][availability-zones-group-create]:

    az group create --name myResourceGroup --location eastus
    
  3. Implemente la plantilla con el comando az deployment group create:

    az deployment group create \
      --resource-group myResourceGroup \
      --template-file azuredeploy.json
    
  4. Para comprobar que el grupo de contenedores se implementó correctamente en una zona de disponibilidad, vea los detalles del grupo de contenedores con el comando az container show:

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

Compatibilidad con la conmutación por error zonal

Un grupo de contenedores de instancias de contenedor se asigna a una sola zona de disponibilidad. Como resultado, ese grupo de instancias de contenedor no se verá afectado por una interrupción que se produzca en alguna otra zona de disponibilidad de la misma región

Sin embargo, si se produce una interrupción en la zona de disponibilidad del grupo de contenedores, lo normal es que haya un tiempo de inactividad de todas las instancias de contenedor que formen parte de ese grupo.

Para evitar el tiempo de inactividad de estas instancias, se recomienda crear un mínimo de dos grupos de contenedores en dos zonas de disponibilidad diferentes de una región determinada. Esto garantiza que los recursos de las instancias de contenedor sigan funcionando cada vez que alguna zona de esa región sufra una interrupción.

Recuperación ante desastres

Cuando regiones o centros de datos enteros de Azure sufren algún tiempo de inactividad, el código crítico debe continuar procesándose en una región diferente. Azure Container Instances implementado con la configuración zonal ejecutada en una zona específica dentro de una región específica. No hay redundancia integrada disponible. Para evitar la pérdida de ejecución cuando haya interrupciones que afecten a toda la región, puede implementar redundantemente las instancias de contenedor en otras regiones.

Pasos siguientes