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:

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).

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)
Desconocido Unhealthy (Incorrecto)

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 ApplicationHealthLinuxLinux, 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 ApplicationHealthLinuxLinux, 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

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.