Uso de la extensión Estado de la aplicación con conjuntos de escalado de máquinas virtuales
Supervisar el estado de la aplicación es una señal importante para administrar y actualizar la implementación. Azure Virtual Machine Scale Sets proporciona compatibilidad para actualizaciones graduales incluyendo las actualizaciones automáticas de imagen de sistema operativo y la aplicación de revisiones automáticas a los invitados de una máquina virtual, que se basan en la supervisión del estado de las instancias individuales para actualizar la implementación. También puede usar la extensión del estado de la aplicación para supervisar el estado de la aplicación de cada instancia de su conjunto de escalado y realizar reparaciones de instancias mediante reparaciones de instancias automáticas.
En este artículo se describe cómo usar los dos tipos de la extensión Estado de la aplicación, Binary Health States o Rich Health States, para supervisar el estado de las aplicaciones implementadas en Virtual Machine Scale Sets.
Prerequisites
En este artículo se da por hecho que está familiarizado con:
- Extensiones de máquina virtual de Azure
- Modificación de conjuntos de escalado de máquinas virtuales
Precaución
La extensión Estado de la aplicación espera recibir una respuesta de sondeo coherente en el puerto tcp
configurado o la ruta de acceso http/https
de la solicitud para etiquetar una máquina virtual como Correcta. Si no se ejecuta ninguna aplicación en la máquina virtual o no puede configurar una respuesta de sondeo, la máquina virtual se mostrará como Incorrecto (Binary Health States) o Desconocido (Rich Health States). Consulte ejemplos de estado de la aplicación para obtener ejemplos de respuestas de sondeo de estado que se emiten a un punto de conexión local.
Nota:
Solo se puede usar un origen de supervisión de estado para un conjunto de escalado de máquinas virtuales, ya sea una extensión de estado de la aplicación o un sondeo de estado. Si tiene ambas opciones habilitadas, deberá quitar una antes de usar servicios de orquestación, como reparaciones de instancias o actualizaciones automáticas del sistema operativo.
Cuándo se debe usar la extensión Estado de la aplicación
La extensión Estado de la aplicación se implementa dentro de una instancia de Virtual Machine Scale Sets e informa sobre el estado de la aplicación desde dentro de la instancia de conjunto de escalado. La extensión, de la que se hace un sondeo en un punto de conexión de la aplicación local, actualizará el estado de mantenimiento en función de las respuestas TCP/HTTP(S) recibidas de la aplicación. Azure usa este estado de mantenimiento para iniciar reparaciones en instancias incorrectas y determinar si una instancia es apta para las operaciones de actualización.
La extensión informa sobre el estado desde dentro de una máquina virtual y se puede usar en situaciones donde no se puede usar un sondeo externo, como los sondeos de estado de Azure Load Balancer.
Binary Health States frente a Rich Health States
Las extensiones Estado de la aplicación tienen dos opciones disponibles: Binary Health States y Rich Health States. En la tabla siguiente se resaltan algunas diferencias clave entre ambas opciones. Consulte el final de esta sección para obtener recomendaciones generales.
Características | Binary Health States | Rich Health States |
---|---|---|
Estados de mantenimiento disponibles | Dos estados disponibles: Correcto, Incorrecto | Cuatro estados disponibles: Correcto, Incorrecto, Inicializando, Desconocido1 |
Envío de señales de mantenimiento | Las señales de mantenimiento se envían a través de códigos de respuesta HTTP/HTTPS o conexiones TCP. | Las señales de mantenimiento en el protocolo HTTP/HTTPS se envían a través del código de respuesta de sondeo y el cuerpo de la respuesta. Las señales de mantenimiento a través del protocolo TCP permanecen sin cambios con respecto a Binary Health States. |
Identificación de instancias Incorrectas | El estado de las instancias será Incorrecto de forma automática si no se recibe una señal Correcta de la aplicación. Una instancia Incorrecto puede indicar un problema con la configuración de la extensión (por ejemplo, un punto de conexión inaccesible) o un problema con la aplicación (por ejemplo, código de estado distinto de 200). | El estado de las instancias solo será Incorrecto si la aplicación emite una respuesta de sondeo Incorrecta. Los usuarios son responsables de implementar la lógica personalizada para identificar y marcar instancias con aplicaciones Incorrectas2. El estado de las instancias con una configuración de extensión incorrecta (por ejemplo, un punto de conexión inaccesible) o respuestas de sondeo de estado no válidas será Desconocido2. |
Estado Inicializando de las instancias recién creadas | El estado Inicializando no está disponible. Las instancias recién creadas pueden tardar algún tiempo en establecerse en un estado estable. | El estado Inicializando permite que las instancias recién creadas se establezcan en un estado de mantenimiento estable antes de hacer que la instancia sea apta para las actualizaciones graduales o las operaciones de reparaciones de instancias. |
Protocolo HTTP/HTTPS | Compatible | Compatible |
Protocolo TCP | Compatible | Compatibilidad limitada: el estado Desconocido no está disponible en el protocolo TCP. Consulte la tabla de protocolos de Rich Health States para conocer los comportamientos del estado de mantenimiento en TCP. |
1 El estado Desconocido no está disponible en el protocolo TCP. 2 Solo es aplicable para el protocolo HTTP/HTTPS. El protocolo TCP seguirá el mismo proceso de identificación de las instancias Incorrectas que en Binary Health States.
En general, debe usar Binary Health States si:
- No está interesado en configurar la lógica personalizada para identificar y marcar una instancia incorrecta
- No necesita un período de gracia de inicialización para las instancias recién creadas
Debe usar Rich Health States si:
- Envía señales de mantenimiento a través del protocolo HTTP/HTTPS y puede enviar información sobre el estado a través del cuerpo de la respuesta de sondeo
- Le gustaría usar la lógica personalizada para identificar y marcar instancias incorrectas
- Le gustaría establecer un período de gracia de inicialización para las instancias recién creadas, de modo que se establezcan en un estado de mantenimiento estable antes de hacer que la instancia sea apta para la actualización gradual o las reparaciones de instancias
Binary Health States
Los informes de Binary Health States contienen dos estados de mantenimiento, Correcto e Incorrecto. En las tablas siguientes se proporciona una breve descripción de cómo se configuran los estados de mantenimiento.
Protocolo HTTP/HTTPS
Protocolo | Estado de mantenimiento | Descripción |
---|---|---|
HTTP/HTTPS | Healthy | Para enviar una señal Correcto, se espera que la aplicación devuelva un código de respuesta 200. |
HTTP/HTTPS | Unhealthy (Incorrecto) | La instancia se marcará como Incorrecto si no se recibe un código de respuesta 200 de la aplicación. |
Protocolo TCP
Protocolo | Estado de mantenimiento | Descripción |
---|---|---|
TCP | Healthy | Para enviar una señal Correcta, se debe realizar un protocolo de enlace correcto con el punto de conexión de la aplicación proporcionado. |
TCP | Unhealthy (Incorrecto) | La instancia se marcará como Incorrecta si se produjo un protocolo de enlace con errores o incompleto con el punto de conexión de la aplicación proporcionado. |
Entre algunos de los escenarios que pueden dar lugar a un estado Incorrecto se incluyen los siguientes:
- Cuando el punto de conexión de la aplicación devuelve un código de estado distinto de 200
- Cuando no hay ningún punto de conexión de aplicación configurado dentro de las instancias de máquina virtual para proporcionar el estado de mantenimiento de la aplicación
- Cuando el punto de conexión de la aplicación no está configurado correctamente
- Cuando no se puede tener acceso al punto de conexión de la aplicación
Rich Health States
Los informes de Rich Health States contienen cuatro estados de mantenimiento, Inicializando, Correcto, Incorrecto y Desconocido. En las tablas siguientes se proporciona una breve descripción de cómo se configura cada estado de mantenimiento.
Protocolo HTTP/HTTPS
Protocolo | Estado de mantenimiento | Descripción |
---|---|---|
HTTP/HTTPS | Healthy | Para enviar una señal Correcta, se espera que la aplicación devuelva una respuesta de sondeo con: código de respuesta de sondeo: estado 2xx, cuerpo de respuesta del sondeo: {"ApplicationHealthState": "Healthy"} |
HTTP/HTTPS | Unhealthy (Incorrecto) | Para enviar una señal Incorrecta, se espera que la aplicación devuelva una respuesta de sondeo con: código de respuesta de sondeo: estado 2xx, cuerpo de respuesta del sondeo: {"ApplicationHealthState": "Unhealthy"} |
HTTP/HTTPS | Inicializando | La instancia entra automáticamente en un estado Inicializando a la hora de inicio de la extensión. Para obtener más información, consulte Estado Inicializando. |
HTTP/HTTPS | Desconocido | Un estado Desconocido puede producirse en los escenarios siguientes: cuando la aplicación devuelve un código de estado distinto de 2xx, cuando la solicitud de sondeo agota el tiempo de espera, cuando el punto de conexión de la aplicación es inaccesible o está incorrectamente configurado, cuando se proporciona un valor que falta o no es válido para ApplicationHealthState en el cuerpo de la respuesta o cuando expira el período de gracia. Para obtener más información, consulte Estado Desconocido. |
Protocolo TCP
Protocolo | Estado de mantenimiento | Descripción |
---|---|---|
TCP | Healthy | Para enviar una señal Correcta, se debe realizar un protocolo de enlace correcto con el punto de conexión de la aplicación proporcionado. |
TCP | Unhealthy (Incorrecto) | La instancia se marcará como Incorrecta si se produjo un protocolo de enlace con errores o incompleto con el punto de conexión de la aplicación proporcionado. |
TCP | Inicializando | La instancia entra automáticamente en un estado Inicializando a la hora de inicio de la extensión. Para obtener más información, consulte Estado Inicializando. |
Estado Inicializando
Este estado solo se aplica a Rich Health States. El estado Inicializando solo se produce una vez a la hora de inicio de la extensión y se puede configurar mediante los valores gracePeriod
y numberOfProbes
de la extensión.
Durante el inicio de la extensión, el estado de la aplicación permanecerá en el estado Inicializando hasta que se produzca uno de estos dos escenarios:
- El mismo estado de mantenimiento (Correcto o Incorrecto) se notifica un número consecutivo de veces, tal como se configura a través de numberOfProbes
gracePeriod
expira
Si el mismo estado de mantenimiento (Correcto o Incorrecto) se notifica de forma consecutiva, el estado de la aplicación cambiará de Inicializando al estado de mantenimiento notificado (Correcto o Incorrecto).
Ejemplo
Si numberOfProbes
= 3, significa lo siguiente:
- Para pasar del estado Inicializando a Correcto: la extensión Estado de la aplicación debe recibir tres señales Correctas consecutivas a través del protocolo HTTP/HTTPS o TCP
- Para pasar del estado Inicializando a Incorrecto: la extensión Estado de la aplicación debe recibir tres señales Incorrectas consecutivas a través del protocolo HTTP/HTTPS o TCP
Si gracePeriod
expira antes de que la aplicación notifique un estado de mantenimiento consecutivo, el estado de la instancia se determinará de la siguiente manera:
- Protocolo HTTP/HTTPS: el estado de la aplicación cambiará de Inicializando a Desconocido
- Protocolo TCP: el estado de la aplicación cambiará de Inicializando a Incorrecto
Estado desconocido.
Este estado solo se aplica a Rich Health States. El estado Desconocido se notifica solo para sondeos "HTTP" o "HTTPS" y se produce en los escenarios siguientes:
- Cuando la aplicación devuelve un código de estado distinto de 2xx
- Cuando la solicitud de sondeo agota el tiempo de espera
- Cuando el punto de conexión de la aplicación es inaccesible o está incorrectamente configurado
- Cuando se proporciona un valor que falta o no es válido para
ApplicationHealthState
en el cuerpo de la respuesta - Cuando expira el período de gracia
Una instancia en un estado Desconocido se trata de forma similar a una instancia Incorrecta. En caso de habilitarse, las reparaciones de instancias se realizarán en una instancia Desconocida, mientras que las actualizaciones graduales se pausarán hasta que el estado de la instancia vuelva a ser Correcto.
En la tabla siguiente se muestra la interpretación del estado de mantenimiento correspondiente a las actualizaciones graduales y las reparaciones de instancias:
Estado de mantenimiento | Interpretación de actualizaciones graduales | Desencadenador de reparaciones de instancias |
---|---|---|
Inicializando | Espere a que el estado sea Correcto, Incorrecto o Desconocido | No |
Healthy | Healthy | No |
Unhealthy (Incorrecto) | Unhealthy (Incorrecto) | Sí |
Desconocido | Unhealthy (Incorrecto) | Sí |
Esquema de extensión para Binary Health States
En el siguiente JSON, se muestra el esquema para la extensión de Estado de la aplicación. La extensión requiere como mínimo una solicitud "tcp", "http" o "https"con un puerto asociado o una ruta de acceso de solicitud, respectivamente.
{
"extensionProfile" : {
"extensions" : [
{
"name": "HealthExtension",
"properties": {
"publisher": "Microsoft.ManagedServices",
"type": "<ApplicationHealthLinux or ApplicationHealthWindows>",
"autoUpgradeMinorVersion": true,
"typeHandlerVersion": "1.0",
"settings": {
"protocol": "<protocol>",
"port": <port>,
"requestPath": "</requestPath>",
"intervalInSeconds": 5,
"numberOfProbes": 1
}
}
}
]
}
}
Valores de propiedad
Nombre | Valor / ejemplo | Tipo de datos |
---|---|---|
apiVersion | 2018-10-01 |
date |
publisher | Microsoft.ManagedServices |
string |
type | ApplicationHealthLinux Linux, ApplicationHealthWindows (Windows) |
string |
typeHandlerVersion | 1.0 |
string |
Configuración
Nombre | Valor / ejemplo | Tipo de datos |
---|---|---|
protocol | http , https o tcp |
string |
port | Opcional cuando el protocolo es http o https , u obligatorio cuando el protocolo es tcp . |
int |
requestPath | Obligatorio cuando el protocolo es http o https , o no se permite cuando el protocolo es tcp . |
string |
intervalInSeconds | Opcional, el valor predeterminado es 5 segundos. Este es el intervalo entre cada sondeo de estado. Por ejemplo, si intervalInSeconds == 5, se enviará un sondeo al punto de conexión de la aplicación local una vez cada 5 segundos. | int |
numberOfProbes | Opcional, el valor predeterminado es 1. Este es el número de sondeos consecutivos necesarios para que cambie el estado de mantenimiento. Por ejemplo, si numberOfProbles == 3, necesitará 3 señales "Healthy" consecutivas para cambiar el estado de mantenimiento de "Unhealthy" a "Healthy". Se aplica el mismo requisito para cambiar el estado de mantenimiento al estado "Unhealthy". | int |
Esquema de extensión para Rich Health States
En el siguiente JSON, se muestra el esquema para la extensión Rich Health States. La extensión requiere como mínimo una solicitud "http" o "https"con un puerto asociado o una ruta de acceso de solicitud, respectivamente. También se admiten sondeos TCP, pero no podrán establecer ApplicationHealthState
a través del cuerpo de la respuesta de sondeo y no tendrán acceso al estado Desconocido.
{
"extensionProfile" : {
"extensions" : [
{
"name": "HealthExtension",
"properties": {
"publisher": "Microsoft.ManagedServices",
"type": "<ApplicationHealthLinux or ApplicationHealthWindows>",
"autoUpgradeMinorVersion": true,
"typeHandlerVersion": "2.0",
"settings": {
"protocol": "<protocol>",
"port": <port>,
"requestPath": "</requestPath>",
"intervalInSeconds": 5,
"numberOfProbes": 1,
"gracePeriod": 600
}
}
}
]
}
}
Valores de propiedad
Nombre | Valor / ejemplo | Tipo de datos |
---|---|---|
apiVersion | 2018-10-01 |
date |
publisher | Microsoft.ManagedServices |
string |
type | ApplicationHealthLinux Linux, ApplicationHealthWindows (Windows) |
string |
typeHandlerVersion | 2.0 |
string |
Configuración
Nombre | Valor / ejemplo | Tipo de datos |
---|---|---|
protocol | http , https o tcp |
string |
port | Opcional cuando el protocolo es http o https , u obligatorio cuando el protocolo es tcp . |
int |
requestPath | Obligatorio cuando el protocolo es http o https , o no se permite cuando el protocolo es tcp . |
string |
intervalInSeconds | Opcional, el valor predeterminado es 5 segundos. Este es el intervalo entre cada sondeo de estado. Por ejemplo, si intervalInSeconds == 5, se enviará un sondeo al punto de conexión de la aplicación local una vez cada 5 segundos. | int |
numberOfProbes | Opcional, el valor predeterminado es 1. Este es el número de sondeos consecutivos necesarios para que cambie el estado de mantenimiento. Por ejemplo, si numberOfProbles == 3, necesitará 3 señales "Healthy" consecutivas para cambiar el estado de mantenimiento de "Unhealthy"/"Unknown" a "Healthy". Se aplica el mismo requisito para cambiar el estado de mantenimiento al estado "Unhealthy" o "Unknown". | int |
gracePeriod | Opcional, el valor predeterminado = intervalInSeconds * numberOfProbes ; el período de gracia máximo es de 7200 segundos |
int |
Implementación de la extensión Estado de la aplicación
Hay varias maneras de implementar la extensión Estado de la aplicación en los conjuntos de escalado tal como se detalla en los siguientes ejemplos.
Binary Health States
En el siguiente ejemplo se agrega la extensión Estado de la aplicación (con el nombre myHealthExtension) a extensionProfile en el un modelo de conjunto de escalado de un conjunto de escalado basado en Windows.
También puede usar este ejemplo para cambiar una extensión existente de Rich Health States a Binary Health realizando una llamada PATCH en lugar de una PUT.
PUT on `/subscriptions/subscription_id/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet/extensions/myHealthExtension?api-version=2018-10-01`
{
"name": "myHealthExtension",
"location": "<location>",
"properties": {
"publisher": "Microsoft.ManagedServices",
"type": "ApplicationHealthWindows",
"autoUpgradeMinorVersion": true,
"typeHandlerVersion": "1.0",
"settings": {
"protocol": "<protocol>",
"port": <port>,
"requestPath": "</requestPath>"
}
}
}
Use PATCH
para editar una extensión ya implementada.
Actualice las máquinas virtuales para instalar la extensión.
POST on `/subscriptions/<subscriptionId>/resourceGroups/<myResourceGroup>/providers/Microsoft.Compute/virtualMachineScaleSets/< myScaleSet >/manualupgrade?api-version=2022-08-01`
{
"instanceIds": ["*"]
}
Rich Health States
En el siguiente ejemplo se agrega la extensión Estado de la aplicación - Rich States (con el nombre myHealthExtension
) a extensionProfile
en el modelo del conjunto de escalado de un conjunto de escalado basado en Windows.
También puede usar este ejemplo para actualizar una extensión existente de Binary a Rich Health States realizando una llamada PATCH en lugar de una PUT.
PUT on `/subscriptions/subscription_id/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet/extensions/myHealthExtension?api-version=2018-10-01`
{
"name": "myHealthExtension",
"location": "<location>",
"properties": {
"publisher": "Microsoft.ManagedServices",
"type": "ApplicationHealthWindows",
"autoUpgradeMinorVersion": true,
"typeHandlerVersion": "2.0",
"settings": {
"protocol": "<protocol>",
"port": <port>,
"requestPath": "</requestPath>",
"intervalInSeconds": <intervalInSeconds>,
"numberOfProbes": <numberOfProbes>,
"gracePeriod": <gracePeriod>
}
}
}
Use PATCH
para editar una extensión ya implementada.
Actualice las máquinas virtuales para instalar la extensión.
POST on `/subscriptions/<subscriptionId>/resourceGroups/<myResourceGroup>/providers/Microsoft.Compute/virtualMachineScaleSets/< myScaleSet >/manualupgrade?api-version=2022-08-01`
{
"instanceIds": ["*"]
}
Solución de problemas
Necesita ayuda para configurar una respuesta de sondeo
Consulte ejemplos de estado de la aplicación para obtener ejemplos de respuestas de sondeo de estado que se emiten a un punto de conexión local.
Visualización de VMHealth: instancia única
Get-AzVmssVM
-InstanceView `
-ResourceGroupName <rgName> `
-VMScaleSetName <vmssName> `
-InstanceId <instanceId>
Visualización de VMHealth: llamada en lote
Solo está disponible para Virtual Machine Scale Sets con orquestación uniforme.
GET on `/subscriptions/<subscriptionID>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/virtualMachineScaleSets/<vmssName>/virtualMachines/?api-version=2022-03-01&$expand=instanceview`
El estado de mantenimiento no aparece
Si el estado de mantenimiento no aparece en Azure Portal o a través de una llamada GET, compruebe que la máquina virtual se ha actualizado al modelo más reciente. Si la máquina virtual no está en el modelo más reciente, actualícela y aparecerá el estado de mantenimiento.
Registro de salida de ejecución de las extensiones
El resultado de la ejecución de las extensiones se registra en los archivos que se encuentran en los siguientes directorios:
C:\WindowsAzure\Logs\Plugins\Microsoft.ManagedServices.ApplicationHealthWindows\<version>\
/var/lib/waagent/Microsoft.ManagedServices.ApplicationHealthLinux-<extension_version>/status
/var/log/azure/applicationhealth-extension
Los registros también capturan periódicamente el estado de mantenimiento de la aplicación.
Pasos siguientes
Obtenga información sobre cómo implementar la aplicación en conjuntos de escalado de máquinas virtuales.