Обновление для групп с постепенным выпуском изменений

Введение

По мере изменения требований может потребоваться обновить NGroups и его группы контейнеров (CG).

Существует два режима обновления, доступные для обновления NGroups — вручную (параметр по умолчанию) и Rolling.

В рамках Rolling Update (RU) есть 2 варианта — обновление на месте и обновление замены. Заменить RU — это параметр по умолчанию.

В этом документе подробно описывается Россия. Обновление вручную описывается в документации NGroups здесь.

Описание компонента

Рассмотрим базовый пример обновления ссылки профиля CG с cgprofile1 на cgprofile2.

Локальное пошаговое обновление

При обновлении ссылки на cgprofile2 в режиме на месте RU и введении команды UPDATE NGroups, существующие группы CG обновляются на основе cgprofile2. Обновление существующих CG происходит в небольших партиях (а не сразу). Это гарантирует минимальное влияние на вашу рабочую нагрузку, так как во время обновления может быть недоступна всего небольшая часть CG.

Мы можем настроить размер пакета и другие связанные параметры режима обновления с помощью API NGroups.

Поскольку обновление на месте изменяет существующие CG, существуют определенные ограничения для свойств CG, которые применяются Экземплярами контейнеров Azure (ACI).

Ознакомьтесь с ограничениями ACI на обновление CG. Кроме того, смотрите здесь для свойств CG, которые требуют удаления (в отличие от обновления).

Заменить скользящее обновление

При замене RU, когда мы обновляем ссылку на cgprofile2 и выполняем команду UPDATE NGroups, создаются новые контрольные группы с использованием cgprofile2. Удаляются существующие CG с cgprofile1. Это создание и удаление происходят в небольших пакетах (и не все одновременно). Это обеспечивает минимальное воздействие на вашу рабочую нагрузку, поскольку при обновлении изменения затрагивают лишь небольшую часть CGs.

Как и при использовании in-place обновления, мы можем настроить размер пакета и другие параметры режима последовательного обновления с помощью API NGroups.

Так как замена RU создает новые группы CG, существует меньше ограничений, применяемых ACI. В результате замена ЕЗ является более мощным вариантом и является параметром по умолчанию, когда клиент выбирает ЕЗ.

Использование

Активация последовательного обновления

Последовательное обновление активируется при выполнении вызова PUT NGroups, если профиль CG, указанный в вызове PUT, отличается от профиля CG, на который в настоящее время ссылается NGroups.

Затем NGroups автоматически группирует экземпляры в пакеты и обновляет один пакет одновременно. Параметр maxBatchPercent определяет размер пакета.

Обновление серии

  • Обновление на месте инициирует вызов CG PUT для обновления каждого CG пакета.

  • Обновление замены вызывает вызов CG PUT для создания новых групп CG и удаления существующих CG пакета. Существует соответствие 1:1 между создаваемыми и удаляемыми CG. Однако названия CG отличаются.

Если достаточное количество групп контейнеров в пакете предоставляет здоровые сигналы после периода приостановкиTimeBetweenBatches, NGroups автоматически запускает следующий пакет обновления. В противном случае он останавливает развертывание. Параметр maxUnhealthyPercent указывает общее количество неработоспособных CG, а параметр maxUnhealthyUpdatedPercent указывает общее количество неработоспособных CG после обновления.

Ниже приведен пример для выдачи последовательного запроса на обновление в NGroups:

{ 
    "location": "{{location}}", 
    "properties": { 
        "updateProfile": { 
            "updateMode": "Rolling", 

            "rollingUpdateProfile": { 
                // Maximum percentage of total CGs which can be updated  
                // simultaneously by rolling update in one batch. 
                “maxBatchPercent”: “10”, // optional, defaults to 20% 

                // Maximum percentage of the total CGs across the whole NGroup  
                // that can be unhealthy at a time either by rolling update or health 
                // checks by liveness probes. If there are more unhealthy CGs than this,  
                // the current rolling update is marked as failed. 
                // This check is a prerequisite to start any batch. 
                “maxUnhealthyPercent”: “10”, // optional, defaults to 20% 

                // Maximum percentage of the updated CGs which can be in unhealthy state  
                // after each batch is updated. If there are more unhealthy CGs than this,  
                // the current rolling update is marked as failed. 
                “maxUnhealthyUpdatedPercent”: 10, // optional, defaults to 20% 

                // The wait time between batches after completing one batch of the rolling 
                // update and before starting the next batch. The time duration should  
                // be specified in ISO 8601 format for duration. 
                "pauseTimeBetweenBatches": "PT2M", // optional, defaults to PT1M 

                // A nullable boolean property. Default is null 
                // Sets the mode to either in-place RU (when true) or replace (default) RU. 
                “inPlaceUpdate”: null/false/true 
            } 
        }, 
        "containerGroupProfiles": [
            { 
                "resource": { 
                    "id": "/subscriptions/{{subId}}/resourceGroups/{{rgName}}/providers/Microsoft.ContainerInstance/containerGroupProfiles/cgp1" 
                } 
            } 
        ] 
    } 
} 

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

Замечание

Чтобы использовать замену RU, задайте тег "rollingupdate.replace.enabled: true" для ресурса NGroups. Этот тег является временным, и он не потребуется в будущем.

“tags”: { 
    “rollingupdate.replace.enabled”: true 
} 

Получение состояния выполняющегося последовательного обновления

Чтобы получить последнее состояние последовательного обновления, можно использовать этот REST API:

GET /subscriptions/{subscriptionId}/resourceGroups/{{rgName}}/providers/Microsoft.ContainerInstance/NGroups/{{ngroupsName}}/latestRollingUpdate

Возвращает ответ, содержащий соответствующие сведения о RU.

Отмена последовательного обновления

Чтобы отменить последовательное обновление, используйте следующий API. После отмены ЕЗ невозможно возобновить или перезапустить. Необходимо запустить новый РУ.

POST /subscriptions/{subscriptionId}/resourceGroups/{{rgName}}/providers/Microsoft.ContainerInstance/NGroups/{{ngroupsName}}/cancelRollingUpdate

При вызове этого API не требуется предоставлять текст запроса.

Кроме того, важно знать, что отмена RU не будет автоматически откатывать его в предыдущее состояние, но остается в состоянии, в котором он находился на момент отмены. Например, если во время обратного обновления необходимо обновить ссылку на профиль CG с cgprofile1 на cgprofile2, и операция в какой-то момент отменяется, то некоторые группы CG могут иметь новый профиль cgprofile2, а другие остаются с cgprofile1.

Граница пакета в последовательном обновлении

Группы CG в определенной партии в блоке управления ресурсами не пересекают границу модели неисправностей. Модель сбоя представляет сочетание зоны и домена сбоя (FD). Например, зона 1 /FD 0 является границей модели сбоя, зона 1 / FD 1 является другой границей модели сбоя, а зона 2 /FD 0 еще одна граница модели сбоя.

Если у клиента есть многозональные NGroups, настроенные с тремя зонами, пакет ограничен группами CG, принадлежащими только одной зоне. Пакет никогда не состоит из групп CG, распределенных по нескольким зонам.

Если клиент имеет многозонную и многозонную настройку NGroups, пакет по-прежнему состоит из групп CG, принадлежащих только одному FD в одной зоне.

NGroups поддерживает эту границу модели сбоя в пакете, даже если количество групп CG, выбранных для пакета, гораздо меньше параметра maxBatchPercent. Он показывает, что NGroups предпочитает безопасные обновления вместо более быстрых (и, таким образом, более рискованных) обновлений.

** Единственный раз, когда пересекается граница модели сбоя, это когда УЕ выбирает неработоспособные группы ГГ в первый пакет. В этом пакете RU пытается обновить все нестабильные CG, для улучшения общей доступности NGroups. В результате при обновлении неработоспособных CG, RU может превышать настройку maxBatchPercent.