Investigações de integridade em Aplicativos de Contêiner do Azure
As investigações de integridade dos Aplicativos de Contêiner do Azure permitem que o runtime de Aplicativos de Contêiner inspecione regularmente o status dos aplicativos de contêiner.
Você pode configurar investigações usando TCP ou HTTP (S) exclusivamente.
Os Aplicativos de Contêiner dão suporte às seguintes investigações:
Investigação | Descrição |
---|---|
Inicialização | Verificam se o aplicativo foi iniciado com êxito. Essa verificação é separada da investigação de atividade e é executada durante a fase de inicialização do aplicativo. |
Atividade | Verifica se o aplicativo ainda está em execução e responde. |
Preparação | Verificar se uma réplica está pronta para lidar com solicitações de entrada. |
Para obter uma lista das especificações de investigação com suporte nos Aplicativos de Contêiner do Azure, consulte as Especificações da API REST do Azure.
Investigações HTTP
As investigações HTTP permitem que você implemente uma lógica personalizada para verificar o status das dependências do aplicativo antes de relatar um status Íntegro.
Configure seus pontos de extremidade de investigação de integridade para responder com um código de status HTTP maior ou igual a 200
e menor que 400
para indicar êxito. Qualquer outro código de resposta fora desse intervalo indica uma falha.
O exemplo a seguir demonstra como implementar um ponto de extremidade de vida em JavaScript.
const express = require('express');
const app = express();
app.get('/liveness', (req, res) => {
let isSystemStable = false;
// check for database availability
// check filesystem structure
// etc.
// set isSystemStable to true if all checks pass
if (isSystemStable) {
res.status(200); // Success
} else {
res.status(503); // Service unavailable
}
})
Investigações de TCP
As investigações de TCP esperam que uma conexão seja estabelecida com o servidor para indicar êxito. A investigação falhará se não conseguir estabelecer uma conexão com seu aplicativo.
Restrições
- Você só pode adicionar um de cada tipo de investigação por contêiner.
- Não há suporte para a investigação
exec
. - Os valores de porta devem ser inteiros; Não há suporte para portas nomeadas.
- Não há suporte para gRPC.
Exemplos
A listagem de código a seguir mostra como você pode definir investigações de integridade para seus contêineres.
Os espaços reservados ...
denotam código omitido. Confira a Especificação da API do modelo do ARM dos Aplicativos de Contêiner para obter detalhes completos do modelo do ARM.
{
...
"containers":[
{
"image":"nginx",
"name":"web",
"probes": [
{
"type": "liveness",
"httpGet": {
"path": "/health",
"port": 8080,
"httpHeaders": [
{
"name": "Custom-Header",
"value": "liveness probe"
}]
},
"initialDelaySeconds": 7,
"periodSeconds": 3
},
{
"type": "readiness",
"tcpSocket": {
"port": 8081
},
"initialDelaySeconds": 10,
"periodSeconds": 3
},
{
"type": "startup",
"httpGet": {
"path": "/startup",
"port": 8080,
"httpHeaders": [
{
"name": "Custom-Header",
"value": "startup probe"
}]
},
"initialDelaySeconds": 3,
"periodSeconds": 3
}]
}]
...
}
A configuração opcional failureThreshold
define o número de tentativas feitas pelos Aplicativos de Contêiner para executar a investigação se a execução falhar. As tentativas que excedem a quantidade failureThreshold
causam resultados diferentes para cada tipo de investigação.
Configuração padrão
Se a entrada estiver habilitada, as investigações padrão a seguir serão adicionadas automaticamente ao contêiner de aplicativo principal se não houver uma definição para cada tipo.
Tipo de investigação | Valores padrão |
---|---|
Inicialização | Protocolo: TCP Porta: porta de destino de entrada Tempo limite: 3 segundos Período: 1 segundo Atraso inicial: 1 segundo Limite de êxito: 1 Limite de falhas: 240 |
Preparação | Protocolo: TCP Porta: porta de destino de entrada Tempo limite: 5 segundos Período: 5 segundos Atraso inicial: 3 segundos Limite de êxito: 1 Limite de falhas: 48 |
Atividade | Protocolo: TCP Porta: porta de destino de entrada |
Se o aplicativo demorar muito para começar (o que é comum em Java), geralmente é necessário personalizar as investigações para que o contêiner não falhe.
O exemplo a seguir demonstra como configurar as investigações de dinamismo e preparação para estender os tempos de inicialização.
"probes": [
{
"type": "liveness",
"failureThreshold": 3,
"periodSeconds": 10,
"successThreshold": 1,
"tcpSocket": {
"port": 80
},
"timeoutSeconds": 1
},
{
"type": "readiness",
"failureThreshold": 48,
"initialDelaySeconds": 3,
"periodSeconds": 5,
"successThreshold": 1,
"tcpSocket": {
"port": 80
},
"timeoutSeconds": 5
}]