Надежность в Экземпляры контейнеров Azure

Внимание

Эта функция в настоящее время доступна для предварительного ознакомления. Предварительные версии предоставляются только в том случае, если вы принимаете дополнительные условия использования.

В этой статье описывается поддержка надежности в Экземпляры контейнеров Azure (ACI) и рассматриваются как внутрирегиональная устойчивость с зонами доступности, так и сведениями о аварийном восстановлении. Более подробный обзор надежности в Azure см. в статье "Надежность Azure".

Поддержка зоны доступности

Зоны доступности Azure — это по крайней мере три физически отдельные группы центров обработки данных в каждом регионе Azure. Центры обработки данных в каждой зоне оснащены независимой питанием, охлаждения и сетевой инфраструктурой. В случае сбоя локальной зоны зоны зоны создаются таким образом, чтобы при возникновении влияния одной зоны, региональных служб, емкости и высокой доступности поддерживались остальными двумя зонами.

Сбои могут варьироваться от сбоев программного обеспечения и оборудования до таких событий, как землетрясения, наводнения и пожары. Устойчивость к сбоям достигается с избыточностью и логической изоляцией служб Azure. Дополнительные сведения о зонах доступности в Azure см. в разделе "Регионы и зоны доступности".

Службы с поддержкой зон доступности Azure предназначены для обеспечения правильного уровня надежности и гибкости. Их можно настроить двумя способами. Они могут быть избыточными по зонам с автоматическим реплика tion между зонами или зональными экземплярами, закрепленными в определенной зоне. Эти подходы также можно объединить. Дополнительные сведения об зональной архитектуре, избыточной между зонами, см. в Рекомендации использования зональных зон и регионов.

Экземпляры контейнеров Azure поддерживает развертывания зональных групп контейнеров, что означает, что экземпляр закрепляется в определенной локально выбранной зоне доступности. Зона доступности указывается на уровне группы контейнеров. Контейнеры в группе не могут иметь уникальные зоны доступности. Чтобы изменить зону доступности группы контейнеров, необходимо удалить существующую и создать другую группу контейнеров с новой зоной доступности.

Необходимые компоненты

Внимание

Эта функция в настоящее время недоступна для портала Azure.

  • Развертывания зональных групп контейнеров поддерживаются в большинстве регионов, где служба ACI доступна для групп контейнеров Linux и Windows Server 2019. Дополнительные сведения см. в статье Регионы и доступность ресурсов.
  • При использовании Azure CLI убедитесь, что установлена версия 2.30.0 или более поздняя.
  • При использовании PowerShell убедитесь, что установлена версия 2.1.1-preview или более поздняя.
  • При использовании пакета SDK для Java убедитесь, что установлена версия 2.9.0 или более поздняя.
  • Поддержка зоны доступности доступна только в версии 09-01-2021 API ACI или более поздней.

Внимание

В настоящее время группы контейнеров с ресурсами GPU не поддерживают зоны доступности.

Развертывание и миграция зон доступности

Чтобы изменить зону доступности группы контейнеров, необходимо удалить существующую и создать другую группу контейнеров с новой зоной доступности.

Создание ресурса с включенной зоной доступности

Чтобы создать ресурс экземпляра контейнера с включенной зоной доступности, необходимо развернуть группу контейнеров с помощью шаблона Azure Resource Manager (ARM).

Примечание.

Примеры в этой статье отформатированы для выполнения в оболочке Bash. Если вы предпочитаете использовать другую оболочку, измените символы продолжения строки соответствующим образом.

Чтобы развернуть контейнер с помощью ARM, выполните приведенные действия.

  1. Скопируйте следующий json-файл в новый файл с именем azuredeploy.json. Этот пример шаблона развертывает группу контейнеров с одним контейнером в зоне доступности 1 в восточной части США.

    {
        "$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. Создайте группу ресурсов с помощью команды [az group create][availability-zones-group-create]:

    az group create --name myResourceGroup --location eastus
    
  3. Разверните шаблон с помощью команды az deployment group create.

    az deployment group create \
      --resource-group myResourceGroup \
      --template-file azuredeploy.json
    
  4. Чтобы убедиться, что группа контейнеров успешно развернута в зоне доступности, просмотрите сведения о группе контейнеров с помощью команды az container show.

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

Поддержка зональной отработки отказа

Группа контейнеров экземпляров контейнеров назначается одной зоне доступности. В результате эта группа экземпляров контейнеров не будет влиять на сбой, который возникает в любой другой зоне доступности того же региона.

Однако если в зоне доступности группы контейнеров возникает сбой, можно ожидать простоя для всех экземпляров контейнеров в этой группе.

Чтобы избежать простоя экземпляра контейнера, рекомендуется создать не менее двух групп контейнеров в двух разных зонах доступности в определенном регионе. Это гарантирует, что ресурсы экземпляра контейнера выполняются и выполняются всякий раз, когда в этом регионе возникает сбой в любой отдельной зоне.

Аварийное восстановление

Когда весь регион Azure или центр обработки данных испытывает простой, критически важный код должен продолжать обработку в другом регионе. Экземпляры контейнеров Azure развернутые с зональной конфигурацией запуска в определенной зоне в определенном регионе. Встроенная избыточность отсутствует. Чтобы избежать потери выполнения во время расширенных сбоев в регионе, можно избыточно развертывать экземпляры контейнеров в других регионах.

Следующие шаги