Поделиться через


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

Экземпляры контейнеров Azure предоставляют простой способ запуска контейнеров Linux или Windows в Azure без необходимости управлять виртуальными машинами или использовать более сложную службу более высокого уровня.

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

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

Рекомендации по развертыванию в производственной среде

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

Обзор архитектуры надежности

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

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

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

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

На изображении показаны два контейнера в разделе группы контейнеров. Две пунктирные линии соединяют контейнеры с двумя разделами образов в реестре.

Экземпляры контейнеров предоставляют следующие функции для управления группами контейнеров:

  • NGroups (предварительная версия) предоставляет набор возможностей для управления несколькими связанными группами контейнеров. При создании NGroup определяется количество создаваемых групп контейнеров. Экземпляры контейнеров предоставляют такие возможности, как автоматическое развертывание обновлений и распространение групп контейнеров в зонах доступности.

  • Резервные пулы создают пул предварительно подготовленных групп контейнеров, которые можно использовать в ответ на входящий трафик. Резервные пулы предназначены для оптимизации создания групп контейнеров и не предназначены для повышения устойчивости.

Временные сбои

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

Все облачные приложения должны следовать рекомендациям по обработке временных ошибок Azure при обмене данными с любыми размещенными в облаке API, базами данных и другими компонентами. Дополнительные сведения см. в Рекомендациях по обработке временных сбоев.

Пакеты SDK, предоставляемые корпорацией Майкрософт, обычно обрабатывают временные ошибки. Так как вы размещаете собственные приложения в экземплярах контейнеров, выполните действия, чтобы снизить вероятность временных сбоев:

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

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

Дополнительные сведения о других ошибках, которые могут возникать во время выполнения и о том, как реагировать на них, см. в разделе "Проблемы во время выполнения группы контейнеров".

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

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

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

  • Созданные вручную группы контейнеров: Отдельная группа контейнеров — это зональный ресурс, который означает, что его можно развернуть в одной выбранной зоне доступности. Все контейнеры в группе развертываются в одинаковой зоне доступности. Если в этой зоне доступности произошел сбой, группа контейнеров и все её контейнеры могут испытывать простой.

    На следующей схеме показана группа контейнеров, которая была развернута вручную в зоне доступности 1:

    Схема, показывающая группу контейнеров с двумя контейнерами, развернутыми в одной зоне доступности.

    На изображении показаны три зоны доступности: зона доступности 1, зона доступности 2 и зона доступности 3. Группа контейнеров в зоне доступности 1 включает два контейнера.

    Замечание

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

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

  • NGroups: При развертывании NGroup можно указать одну или несколько зон для его развертывания. Если вы развертываете NGroup в двух или более зонах, это группу, устойчивая к сбоям по зонам, и сбой одной зоны доступности вызывает проблемы только для тех групп контейнеров, которые находятся в затронутой зоне.

    На следующей схеме показана группа NGroup, развернутая в трех зонах доступности:

    Схема, которая показывает NGroup с тремя группами контейнеров, развернутыми в трех зонах доступности.

    На изображении показаны три зоны доступности. Каждая зона доступности включает группу контейнеров и два контейнера. Прямоугольник с меткой NGroupdesiredCount=3, зоны=1,2,3 охватывают все три зоны доступности.

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

  • Резервные пулы: При развертывании резервного пула можно также указать одну или несколько зон. Платформа может запрашивать контейнеры в выбранной зоне.

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

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

    Это важно

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

Поддержка регионов

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

Требования

  • Зональные развертывания доступны для групп контейнеров Linux и Windows Server 2019.

  • Чтобы выбрать зону доступности, необходимо использовать номер SKU уровня "Стандартный". Зональные группы контейнеров недоступны с конфиденциальным SKU.

Соображения

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

Себестоимость

Дополнительные затраты на настройку зон доступности для группы контейнеров не требуются.

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

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

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

    • Созданные вручную группы контейнеров: Невозможно включить зоны доступности в существующей незональной группе контейнеров. Необходимо удалить группу контейнеров и создать зональную группу контейнеров.

    • NGroups: Вы не можете включить зоны доступности в существующей незональной NGroup. Вы должны удалить NGroup и создать зонально-избыточную NGroup.

    • Резервные пулы: Вы не можете включить зоны доступности в существующем незональном резервном пуле. Необходимо удалить группу контейнеров и создать резервный пул, использующий несколько зон доступности.

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

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

    • NGroups: Вы можете добавить зоны в NGroup, но вы не можете удалить зоны.

    • Резервные пулы: Вы можете добавлять зоны в резервный пул, но не удаляйте зоны.

Распределение групп контейнеров

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

  • Созданные вручную группы контейнеров: Вы несете ответственность за распространение созданных вручную групп контейнеров в нескольких зонах доступности.

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

  • Резервные пулы: Резервный пул может создавать контейнеры в любой из зон доступности, настроенных в пуле. Однако контейнеры могут не создаваться в нескольких зонах. Резервные пулы не следует использовать для рабочих нагрузок, требующих устойчивости к сбоям зоны.

Планирование ресурсов и управление ими

Чтобы подготовиться к сбою зоны доступности, рассмотрите избыточное предоставление количества развернутых групп контейнеров. Такой подход позволяет решению терпеть некоторые потери емкости и продолжать функционировать без снижения производительности. Дополнительные сведения см. в статье Управление емкостью с помощью оверпровиженинга.

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

  • Созданные вручную группы контейнеров: Вы несете ответственность за планирование емкости созданных вручную групп контейнеров, включая планирование количества групп контейнеров для развертывания в каждой зоне.

  • NGroup: Рассмотрите избыточное резервирование емкости NGroup, чтобы выдержать потерю зоны.

  • Резервные пулы: Резервные пулы не предназначены для обеспечения устойчивости к сбоям зоны. Рекомендуется использовать несколько резервных пулов в разных зонах или использовать NGroups.

Нормальная работа

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

  • Маршрутизация трафика между зонами: Вы несете ответственность за маршрутизацию трафика в контейнеры. Например, шлюз приложений Azure можно использовать в качестве шлюза и подсистемы балансировки нагрузки для групп контейнеров.

    Если вы используете NGroups или резервные пулы, вы несете ответственность за балансировку нагрузки по каждому контейнеру. Кроме того, необходимо настроить систему маршрутизации трафика для обнаружения работоспособности каждой группы контейнеров и перенаправления трафика в альтернативную группу при необходимости.

  • Репликация данных между зонами: Контейнеры и группы контейнеров являются без состояния. Вы можете подключить собственную общую папку или подключиться к базам данных или другим службам хранилища из приложений. Вы несете ответственность за обеспечение зональной устойчивости этих файловых ресурсов и служб хранения. Ознакомьтесь с руководствами по надежности для каждой службы, чтобы понять, как обеспечить устойчивость каждой зоны компонентов.

Опыт понижения зоны

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

  • Обнаружение и ответ: Ответственность за обнаружение сбоев зоны и связанный ответ зависит от того, как вы развертываете группы контейнеров.

    • Созданные вручную группы контейнеров: Вы должны обнаружить потерю зоны доступности и инициировать переключение на вторичную группу контейнеров, созданную в другой зоне доступности.

    • NGroups: Платформа Container Instances отвечает за выявление сбоя в зоне доступности и принятие мер реагирования.

      Однако вы несете ответственность за то, что трафик направляется в контейнеры в здоровой зоне.

    • Пулы резервного ожидания: Платформа Container Instances не гарантирует бесперебойное реагирование на сбои зоны для пулов резервного ожидания. Резервные пулы не следует использовать для рабочих нагрузок, требующих устойчивости к сбоям зоны.

  • Уведомление: Экземпляры контейнеров не информируют вас о сбоях в работе зоны. Однако вы можете использовать Работоспособность служб Azure для отслеживания общего состояния службы "Экземпляры контейнеров", включая все сбои зоны.

    Настройте оповещения для получения уведомлений о проблемах уровня зоны. Дополнительные сведения см. в статье "Создание оповещений о работоспособности службы" на портале Azure.

  • Активные запросы: Если зона выходит из строя, все контейнеры, работающие в этой зоне, вероятно, остановятся, включая любую активную работу, которую они обрабатывают.

  • Ожидаемая потеря данных: Так как контейнеры и группы контейнеров являются не сохраняющими состояние, от сбоя зоны не ожидается потеря данных. Однако вы несете ответственность за обеспечение устойчивости каждого компонента в вашей рабочей среде к отказам на уровне зон, включая службы хранения и базы данных.

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

    • Созданные вручную группы контейнеров: Для зональных групп контейнеров, когда зона недоступна, группа контейнеров и ее контейнеры недоступны до восстановления зоны доступности.

    • NGroups: Если одна зона отключена, приложение остается доступным, так как остальные группы контейнеров в NGroups продолжают работать в других зонах. Не ожидается простоя.

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

  • Перенаправка трафика: Поскольку вы отвечаете за маршрутизацию трафика к вашим контейнерам, вы также несете ответственность за перенаправку трафика, если группа контейнеров выходит из строя из-за прерывания работы зоны доступности.

Восстановление зоны

После восстановления зоны платформа Azure автоматически перезапускает группы контейнеров, остановившиеся. Вмешательство пользователя не требуется.

Тестирование зон на сбои

Нет возможности смоделировать сбой зоны доступности, в которой находится контейнерная группа. Однако вы можете вручную настроить вышестоящий шлюз или подсистемы балансировки нагрузки для перенаправления трафика в другую группу контейнеров в другой зоне доступности.

Поддержка нескольких регионов

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

Альтернативные подходы с несколькими регионами

При необходимости можно развернуть отдельные группы контейнеров в нескольких регионах. Вы несете ответственность за развертывание и настройку групп контейнеров в каждом регионе. Кроме того, необходимо настроить балансировку нагрузки с помощью службы, например Диспетчер трафика Azure или Azure Front Door. Вы несете ответственность за синхронизацию данных, отработку отказа и восстановление после сбоя.

Соглашение об уровне обслуживания

Соглашение об уровне обслуживания (SLA) для служб Azure описывает ожидаемую доступность каждой службы и условия, которые должно соответствовать вашему решению для достижения этого ожидания доступности. Для получения дополнительной информации см. Соглашения об уровне обслуживания для онлайн-сервисов.