Como configurar testes de integridade e períodos de término normais para aplicativos hospedados no Azure Spring Apps

Este artigo aplica-se a: ✔️ Java ✔️ C#

Este artigo aplica-se a: ✔️ Basic/Standard ✔️ Enterprise

Este artigo mostra como personalizar aplicativos em execução no Azure Spring Apps com testes de integridade e períodos de término normais.

Uma sonda é uma atividade de diagnóstico executada periodicamente pelo Azure Spring Apps em uma instância de aplicativo. Para executar um diagnóstico, o Azure Spring Apps executa uma das seguintes ações:

  • Executa um comando arbitrário de sua escolha dentro da instância do aplicativo.
  • Estabelece uma conexão de soquete TCP.
  • Faz uma solicitação HTTP.

O Azure Spring Apps oferece regras de investigação de integridade padrão para cada aplicativo. Este artigo mostra como personalizar seu aplicativo com três tipos de testes de integridade:

  • As sondas Liveness determinam quando reiniciar um aplicativo. Por exemplo, os testes de vivacidade podem identificar um deadlock, como quando um aplicativo está em execução, mas não consegue progredir. Reiniciar o aplicativo em um estado de bloqueio pode torná-lo disponível apesar dos erros.

  • Os testes de preparação determinam quando uma instância do aplicativo está pronta para começar a aceitar tráfego. Por exemplo, os testes de preparação podem controlar quais instâncias do aplicativo são usadas como back-ends para o aplicativo. Quando uma instância de aplicativo não está pronta, ela é removida da descoberta do serviço Kubernetes. Para obter mais informações, consulte Descubra e registre seus aplicativos Spring Boot. Para obter mais informações sobre a descoberta de serviços com o plano Enterprise, consulte Usar o Tanzu Service Registry.

  • As sondas de inicialização determinam quando um aplicativo foi iniciado. Uma sonda de inicialização desabilita as verificações de vivacidade e prontidão até que a inicialização seja bem-sucedida, garantindo que as sondas de vivacidade e prontidão não interfiram na inicialização do aplicativo. Você pode usar testes de inicialização para executar verificações de vivacidade em aplicativos de inicialização lenta, impedindo que o aplicativo seja encerrado antes de estar em execução.

Pré-requisitos

  • CLI do Azure com a extensão Azure Spring Apps. Use o comando a seguir para remover versões anteriores e instalar a extensão mais recente. Se você instalou anteriormente a extensão spring-cloud, desinstale-a para evitar incompatibilidades de configuração e versão.

    az extension remove --name spring
    az extension add --name spring
    az extension remove --name spring-cloud
    

Configurar testes de integridade e terminação normal para aplicativos

As seções a seguir descrevem como configurar testes de integridade e terminação normal usando a CLI do Azure.

Rescisão graciosa

A tabela a seguir descreve a propriedade, que você pode usar para configurar a terminationGracePeriodSeconds terminação normal.

Property name Description
terminationGracePeriodSeconds A duração em segundos após os processos em execução na instância do aplicativo recebem um sinal de encerramento antes de serem interrompidos à força. Defina esse valor por mais tempo do que o tempo de limpeza esperado para o seu processo. O valor deve ser um número inteiro não negativo. Definir o período de carência como 0 interrompe a instância do aplicativo imediatamente por meio do sinal de eliminação, sem oportunidade de desligar. Se o valor for nulo, o Azure Spring Apps usará o período de carência padrão. O valor padrão é 90.

Propriedades da sonda de saúde

A tabela a seguir descreve as propriedades que você pode usar para configurar testes de integridade.

Property name Description
initialDelaySeconds O número de segundos após o início da instância do aplicativo antes que as sondas sejam iniciadas. O valor padrão é 0, o valor mínimo.
periodSeconds A frequência em segundos para executar a sonda. O valor predefinido é 10. O valor mínimo é 1.
timeoutSeconds O número de segundos até o tempo limite da sonda expirar. O valor padrão é 1, o valor mínimo.
failureThreshold O número mínimo de falhas consecutivas para que a sonda seja considerada falha após ter sido bem-sucedida. O valor padrão é 3. O valor mínimo é 1.
successThreshold O número mínimo de sucessos consecutivos para que a sonda seja considerada bem-sucedida após ter falhado. O valor padrão é 1. O valor deve ser 1 para liveness e startup. O valor mínimo é 1.

Propriedades de ação da sonda

Há três maneiras de verificar uma instância de aplicativo usando uma sonda. Cada sonda deve definir uma das seguintes ações de teste:

  • HTTPGetAction

    Executa uma solicitação HTTP GET na instância do aplicativo em um caminho especificado. O diagnóstico é considerado bem-sucedido se a resposta tiver um código de status maior ou igual a 200 e menor que 400.

    Property name Description
    scheme O esquema a ser usado para se conectar ao host. O padrão é HTTP.
    path O caminho para acessar no servidor HTTP da instância do aplicativo, como /healthz.
  • ExecAction

    Executa um comando especificado dentro da instância do aplicativo. O diagnóstico é considerado bem-sucedido se o comando for encerrado com um código de status de 0.

    Property name Description
    command O comando a ser executado dentro da instância do aplicativo. O diretório de trabalho para o comando é o diretório raiz (/) no sistema de arquivos da instância do aplicativo. Como o comando é executado usando exec e não dentro de um shell, as instruções do shell não funcionarão. Para usar um shell, chame explicitamente o shell. Um status de saída de 0 é tratado como vivo/saudável, e diferente de zero não é íntegro.
  • TCPSocketAction

    Executa uma verificação TCP em relação à instância do aplicativo.

    Não há propriedades disponíveis para a TCPSocketAction ação.

Personalize a sua aplicação

Use as etapas a seguir para personalizar seu aplicativo usando o portal do Azure.

  1. Em Definições, selecione Aplicações e, em seguida, selecione a aplicação na lista.

    Screenshot of Azure portal showing the Apps page.

  2. Selecione Configuração no painel de navegação esquerdo, selecione Sondas de integridade e especifique Propriedades da sonda de integridade.

    Screenshot of the Azure portal Configuration page showing the Health probes tab.

  3. Para definir o período de carência de rescisão, selecione Configurações gerais e especifique um valor na caixa Período de carência de rescisão.

    Screenshot of the Azure portal Configuration page showing the General settings tab.

Melhores práticas

Use as seguintes práticas recomendadas ao adicionar testes de integridade ao Azure Spring Apps:

  • Use sondas de vivacidade e prontidão juntas. O Azure Spring Apps fornece duas abordagens para a descoberta de serviços ao mesmo tempo. Quando o teste de preparação falha, a instância do aplicativo é removida somente da descoberta do serviço Kubernetes. Uma sonda de vivacidade configurada corretamente pode remover a instância do aplicativo emitida da descoberta do serviço Eureka para evitar casos inesperados. Para obter mais informações sobre a descoberta de serviços, consulte Descobrir e registrar seus aplicativos Spring Boot. Para obter mais informações sobre a descoberta de serviços com o plano Enterprise, consulte Usar o Tanzu Service Registry.

  • Quando uma instância de aplicativo é iniciada, a primeira verificação ocorre após o atraso especificado pelo initialDelaySeconds. As verificações subsequentes ocorrem periodicamente, de acordo com a duração do período especificado pela periodSeconds. Se o aplicativo não responder às solicitações por várias vezes, conforme especificado pelo failureThreshold, a instância do aplicativo será reiniciada. Certifique-se de que seu aplicativo pode iniciar rápido o suficiente, ou atualizar esses parâmetros, para que o tempo limite initialDelaySeconds + periodSeconds * failureThreshold total seja maior do que a hora de início do seu aplicativo.

  • Para aplicativos Spring Boot, o Spring Boot é fornecido com o suporte a grupos de integridade, permitindo que os desenvolvedores selecionem um subconjunto de indicadores de integridade e os agrupem em um único status de integridade correlacionado. Para obter mais informações, consulte Sondas de vivacidade e prontidão com o Spring Boot no Blog do Spring.

    O exemplo a seguir mostra uma sonda de vivacidade com o Spring Boot:

    "probe": {
           "initialDelaySeconds": 30,
           "periodSeconds": 10,
           "timeoutSeconds": 1,
           "failureThreshold": 30,
           "successThreshold": 1,
           "probeAction": {
               "type": "HTTPGetAction",
               "scheme": "HTTP",
               "path": "/actuator/health/liveness"
           }
       }
    

    O exemplo a seguir mostra uma sonda de prontidão com o Spring Boot:

    "probe": {
           "initialDelaySeconds": 0,
           "periodSeconds": 10,
           "timeoutSeconds": 1,
           "failureThreshold": 3,
           "successThreshold": 1,
           "probeAction": {
               "type": "HTTPGetAction",
               "scheme": "HTTP",
               "path": "/actuator/health/readiness"
           }
       }
    

Perguntas mais frequentes

Esta seção fornece respostas para perguntas frequentes sobre como usar sondas de integridade com o Azure Spring Apps.

  • Recebi uma resposta de 400 quando criei aplicações com sondas de saúde personalizadas. Qual é o significado disto?

    A mensagem de erro aponta qual sonda é responsável pela falha de provisionamento. Verifique se as regras do teste de integridade estão corretas e se o tempo limite é longo o suficiente para que o aplicativo esteja no estado de execução.

  • Quais são as configurações de teste padrão para um aplicativo existente?

    O exemplo a seguir mostra as configurações padrão:

    "startupProbe": null,
    "livenessProbe": {
        "disableProbe": false,
        "failureThreshold": 3,
        "initialDelaySeconds": 300,
        "periodSeconds": 10,
        "probeAction": {
            "type": "TCPSocketAction"
        },
        "successThreshold": 1,
        "timeoutSeconds": 3
    },
    "readinessProbe": {
        "disableProbe": false,
        "failureThreshold": 3,
        "initialDelaySeconds": 0,
        "periodSeconds": 5,
        "probeAction": {
            "type": "TCPSocketAction"
        },
        "successThreshold": 1,
        "timeoutSeconds": 3
    }
    

Próximos passos