Compartir a través de


Confiabilidad en Azure Container Instances

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 son grupos físicamente separados de centros de datos dentro de cada región de Azure. Cuando se produce un error en una zona, los servicios pueden conmutar por error a una de las zonas restantes.

Para más información sobre las zonas de disponibilidad en Azure, consulte ¿Qué son las zonas de disponibilidad?.

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.

Requisitos previos

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

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