Fiabilité dans Azure Container Instances

Important

Actuellement, cette fonctionnalité est uniquement disponible en tant que version préliminaire. Les préversions sont à votre disposition, à condition que vous acceptiez les conditions d’utilisation supplémentaires.

Cet article décrit la prise en charge de la fiabilité dans Azure Container Instances (ACI) et couvre à la fois la résilience intrarégionale avec les zones de disponibilité et les informations sur la reprise après sinistre. Pour obtenir une vue d’ensemble plus détaillée de la fiabilité dans Azure, consultez Fiabilité Azure.

Prise en charge des zones de disponibilité

Les zones de disponibilité Azure sont au moins trois groupes physiquement distincts de centres de données dans chaque région Azure. Les centres de données de chaque zone sont équipés d’une infrastructure réseau, de refroidissement et d’alimentation indépendante. En cas de défaillance de zone locale, les zones de disponibilité sont conçues de telle sorte que si une zone est affectée, les services, la capacité et la haute disponibilité de la région sont pris en charge par les deux autres zones.

Les défaillances sont aussi bien des défaillances logicielles et matérielles que des événements de type tremblements de terre, inondations et incendies. La tolérance aux défaillances est obtenue par la redondance et l’isolation logique des services Azure. Pour obtenir des informations détaillées sur les zones de disponibilité dans Azure, consultez Régions et zones de disponibilité.

Les services Azure compatibles avec les zones de disponibilité sont conçus pour fournir le niveau approprié de fiabilité et de flexibilité. Ils peuvent être configurés de deux façons. Un service peut être redondant interzone, avec une réplication automatique entre les zones, ou zonal, avec des instances épinglées à une zone spécifique. Vous pouvez également combiner ces approches. Pour plus d’informations sur l’architecture zonale et redondante interzone, consultez Recommandations relatives à l’utilisation de zones de disponibilité et de régions.

Azure Container Instances prend en charge les déploiements de groupes de conteneurs zonaux, ce qui signifie que l’instance est épinglée à une zone de disponibilité spécifique sélectionnée automatiquement. La zone de disponibilité est spécifiée au niveau du groupe de conteneurs. Les conteneurs au sein d’un groupe de conteneurs ne peuvent pas avoir de zones de disponibilité uniques. Pour modifier la zone de disponibilité de votre groupe de conteneurs, vous devez supprimer le groupe de conteneurs et en créer un autre avec la nouvelle zone de disponibilité.

Prérequis

Important

Cette fonctionnalité n’est actuellement pas disponible pour le portail Azure.

  • Les déploiements de groupes de conteneurs zonaux sont pris en charge dans la plupart des régions où ACI est disponible pour les groupes de conteneurs Linux et Windows Server 2019. Pour plus d’informations, consultez Régions et disponibilité des ressources.
  • Si vous utilisez Azure CLI, assurez-vous que la version 2.30.0 ou une version ultérieure est installée.
  • Si vous utilisez PowerShell, assurez-vous que la version 2.1.1-preview ou une version ultérieure est installée.
  • Si vous utilisez le Kit de développement logiciel (SDK) Java, assurez-vous que la version 2.9.0 ou une version ultérieure est installée.
  • La prise en charge des zones de disponibilité n’est disponible uniquement sur l’API ACI version 09-01-2021 ou ultérieure.

Important

Les groupes de conteneurs avec des ressources GPU ne prennent pas en charge les zones de disponibilité pour l’instant.

Redéploiement et migration des zones de disponibilité

Pour modifier la zone de disponibilité de votre groupe de conteneurs, vous devez supprimer le groupe de conteneurs et en créer un autre avec la nouvelle zone de disponibilité.

Créer une ressource avec la zone de disponibilité activée

Pour créer une ressource d’instance de conteneur avec une zone de disponibilité activée, vous devez déployer un groupe de conteneurs en utilisant un modèle Azure Resource Manager (ARM).

Notes

Les exemples présentés dans cet article sont mis en forme pour l’interpréteur de commandes Bash. Si vous préférez un autre interpréteur de commandes, ajustez les caractères de continuation de ligne en conséquence.

Déploiement d’un conteneur avec ARM :

  1. Copiez-collez le code JSON suivant dans un nouveau fichier nommé azuredeploy.json. Cet exemple de modèle déploie un groupe de conteneurs avec un conteneur unique dans la zone de disponibilité 1 au sein de la région USA Est.

    {
        "$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. Créez un groupe de ressources avec la commande [az group create][availability-zones-group-create] :

    az group create --name myResourceGroup --location eastus
    
  3. Déployez le modèle avec la commande az deployment group create :

    az deployment group create \
      --resource-group myResourceGroup \
      --template-file azuredeploy.json
    
  4. Pour vérifier que le groupe de conteneurs a été déployé correctement dans une zone de disponibilité, affichez les détails du groupe de conteneurs à l’aide de la commande az container show :

    az container show --name acilinuxpublicipcontainergroup --resource-group myResourceGroup
    

Prise en charge du basculement zonal

Un groupe de conteneurs d’instances de conteneur est affecté à une seule zone de disponibilité. Par conséquent, ce groupe d’instances de conteneur ne sera pas affecté par une panne qui se produit dans une autre zone de disponibilité de la même région

Toutefois, si une panne se produit dans la zone de disponibilité du groupe de conteneurs, vous pouvez vous attendre à un temps d’arrêt pour toutes les instances de conteneur au sein de ce groupe.

Pour éviter les temps d’arrêt des instances de conteneur, nous vous recommandons de créer au moins deux groupes de conteneurs dans deux zones de disponibilité différentes dans une région donnée. Cela garantit que les ressources de votre instance de conteneur sont opérationnelles chaque fois qu’une seule zone de cette région subit une panne.

Récupération d'urgence

Lorsque des régions ou des centres de données Azure entiers subissent un temps d’arrêt, votre code stratégique doit poursuivre son traitement dans une autre région. Azure Container Instances déployées avec une configuration zonale s’exécutent dans une zone spécifique au sein d’une région spécifique. Aucune redondance intégrée n’est disponible. Pour éviter la perte d’exécution pendant les pannes à l’échelle de la région, vous pouvez déployer de manière redondante les instances de conteneur dans d’autres régions.

Étapes suivantes