Actualización gradual de NGroups
Introducción
A medida que cambian los requisitos, es posible que necesite actualizar los NGroups y sus grupos de contenedores (CG).
Hay dos modos disponibles con los que se puede actualizar un NGroups: Manual (opción predeterminada) y Gradual.
En la Actualización gradual (RU) hay 2 opciones: la actualización local y la actualización de reemplazo. La RU de reemplazo es la opción predeterminada.
En este documento la RU detalladamente. La actualización manual se trata en el vínculo de documentación de NGroups aquí.
Descripción de la característica
Considere un ejemplo básico de actualización de una referencia de perfil de CG de cgprofile1 a cgprofile2.
Actualización gradual local
Con la RU local, al actualizar la referencia a cgprofile2 y emitir un comando UPDATE NGroups, los CG existentes se actualizan con cgprofile2. La actualización de los CG existentes se produce en lotes pequeños (y no todos a la vez). Esto garantiza que haya un impacto mínimo en la carga de trabajo, ya que solo un pequeño porcentaje de CG podría no estar disponible durante la actualización.
Podemos configurar el tamaño del lote y otras opciones relacionadas del modo de actualización gradual con la API de NGroups.
Dado que las RU en contexto actualizan los CG existentes, existen ciertas limitaciones en las propiedades de CG que aplica Azure Container Instances (ACI).
Consulte las limitaciones de ACI en torno a la actualización de CG. Consulte también aquí las propiedades en los CG que requieren una eliminación (frente a una actualización).
Actualización gradual de reemplazo
Con la RU de reemplazo, al actualizar la referencia a cgprofile2 y emitir un comando UPDATE NGroups, los CG nuevos se crean con cgprofile2. Se eliminan los CG existentes con cgprofile1. Esta creación y eliminación se producen en lotes pequeños (y no todos a la vez). Esto garantiza que haya un impacto mínimo en la carga de trabajo, ya que solo un pequeño porcentaje de CG se ve afectado durante la actualización.
Como en la RU local, podemos configurar el tamaño del lote y otras opciones relacionadas del modo de actualización gradual con la API de NGroups.
Dado que la RU de reemplazo crea nuevos grupos de seguridad de red, ACI aplica menos limitaciones. Como resultado, la RU de reemplazo es una opción más eficaz y es la opción predeterminada cuando un cliente selecciona la RU.
Uso
Desencadenar una actualización gradual
La actualización gradual se desencadena cuando se realiza una llamada PUT de NGroups y el perfil de CG de la llamada PUT es diferente del perfil de CG al que se hace referencia actualmente en NGroups.
A continuación, NGroups agrupa automáticamente las instancias en lotes y actualiza un lote cada vez. El parámetro maxBatchPercent determina el tamaño del lote.
Actualización de un lote
Una actualización local invoca a una llamada PUT de CG para actualizar cada CG del lote.
Una actualización de reemplazo invoca a una llamada PUT de CG para crear nuevos CG y eliminar los CG existentes del lote. Existe una correspondencia 1:1 entre los CG que se crean y los CG que se eliminan. Sin embargo, los nombres de CG serán diferentes.
Si un número suficiente de CG del lote proporciona señales correctas después del período pauseTimeBetweenBatches, NGroups inicia automáticamente el siguiente lote para la actualización. De lo contrario, detiene la implementación gradual. El parámetro maxUnhealthyPercent especifica el número total de CG incorrectos, mientras que el parámetro maxUnhealthyUpdatedPercent especifica el número total de CG incorrectos después de la actualización.
Este es un ejemplo de emisión de una solicitud de actualización gradual a 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"
}
}
]
}
}
Si la versión de la imagen se establece en la etiqueta más reciente para las imágenes de contenedor dentro del perfil de CG, NGroups recoge automáticamente la versión de imagen más reciente durante la RU. Para evitar un comportamiento inesperado de la aplicación, se recomienda no usar la etiqueta más reciente para las imágenes. Alternativamente, use versiones específicas.
Nota:
Para usar la RU de reemplazo, establezca la etiqueta "rollingupdate.replace.enabled: true" para el recurso NGroups. Esta etiqueta es temporal y no será necesaria en el futuro.
“tags”: {
“rollingupdate.replace.enabled”: true
}
Obtención del estado de una actualización gradual en ejecución
Para obtener el estado más reciente de la actualización gradual, use esta API de REST:
GET /subscriptions/{subscriptionId}/resourceGroups/{{rgName}}/providers/Microsoft.ContainerInstance/NGroups/{{ngroupsName}}/latestRollingUpdate
Esto devuelve una respuesta que contiene información relevante sobre la RU.
Cancelación de una actualización gradual
Para cancelar una actualización gradual, use la siguiente API. Una vez cancelada, la RU no se podrá reanudar ni reiniciar. Es necesario desencadenar una nueva RU.
POST /subscriptions/{subscriptionId}/resourceGroups/{{rgName}}/providers/Microsoft.ContainerInstance/NGroups/{{ngroupsName}}/cancelRollingUpdate
No es necesario proporcionar un cuerpo de la solicitud al llamar a esta API.
Límite de un lote en una actualización gradual
Los grupos de seguridad de un lote específico de una RU no cruzan un límite de modelo de error. Un modelo de error representa una combinación de zona o dominio de error (FD). Por ejemplo, la zona 1 / FD 0 es un límite de modelo de error, la zona 1 / FD 1 es otro límite del modelo de error y la zona 2 / FD 0 es otro límite del modelo de error.
Si un cliente tiene un NGroups multizonal configurado con tres zonas, un lote se limita a los grupos de seguridad de red que pertenecen a una sola zona como máximo. Un lote nunca consta de grupos de disponibilidad distribuidos entre varias zonas.
Si un cliente tiene una configuración de NGroups multizonal y con varios FD, un lote todavía consta de grupos de seguridad de red que pertenecen a solo un FD en una sola zona como máximo.
NGroups mantiene este límite de modelo de error en un lote, incluso cuando el número de grupos de seguridad de red seleccionados para un lote es mucho menor que la configuración maxBatchPercent. Refleja que NGroups prefiere actualizaciones seguras sobre las actualizaciones más rápidas (y, por lo tanto, más arriesgados).
La única vez que se cruza un límite del modelo de error cuando la RU selecciona CG incorrectos para el primer lote. En este lote, la RU intenta actualizar todos los CG incorrectos para mejorar la disponibilidad general de NGroups. Como resultado, al actualizar los CG incorrectos, la RU puede superar la configuración maxBatchPercent.