Configurar pesquisas readiness
Para aplicativos em contêineres que atendem ao tráfego, convém verificar se o contêiner está pronto para lidar com solicitações de entrada. As Instâncias de Contêiner do Azure dão suporte a testes de preparação para incluir configurações para que seu contêiner não possa ser acessado sob determinadas condições. A sonda de prontidão se comporta como uma sonda de prontidão do Kubernetes. Por exemplo, um aplicativo contêiner pode precisar carregar um grande conjunto de dados durante a inicialização e você não deseja que ele receba solicitações durante esse período.
Este artigo explica como implantar um grupo de contêineres que inclui um teste de preparação, para que um contêiner só receba tráfego quando o teste for bem-sucedido.
As Instâncias de Contêiner do Azure também dão suporte a testes de liveness, que você pode configurar para fazer com que um contêiner não íntegro seja reiniciado automaticamente.
Configuração do YAML
Como exemplo, crie um readiness-probe.yaml
arquivo com o seguinte trecho que inclua uma sonda de preparação. Esse arquivo define um grupo de contêineres que consiste em um contêiner executando um pequeno aplicativo Web. O aplicativo é implantado a partir da imagem pública mcr.microsoft.com/azuredocs/aci-helloworld
. Esse aplicativo em contêiner também é demonstrado em Implantar uma instância de contêiner no Azure usando a CLI do Azure e outros inícios rápidos.
apiVersion: 2019-12-01
location: eastus
name: readinesstest
properties:
containers:
- name: mycontainer
properties:
image: mcr.microsoft.com/azuredocs/aci-helloworld
command:
- "/bin/sh"
- "-c"
- "node /usr/src/app/index.js & (sleep 240; touch /tmp/ready); wait"
ports:
- port: 80
resources:
requests:
cpu: 1.0
memoryInGB: 1.5
readinessProbe:
exec:
command:
- "cat"
- "/tmp/ready"
periodSeconds: 5
osType: Linux
restartPolicy: Always
ipAddress:
type: Public
ports:
- protocol: tcp
port: '80'
tags: null
type: Microsoft.ContainerInstance/containerGroups
Comando Iniciar
A implantação inclui uma command
propriedade que define um comando inicial que é executado quando o contêiner começa a ser executado pela primeira vez. Esta propriedade aceita uma matriz de cadeias de caracteres. Este comando simula um momento em que o aplicativo Web é executado, mas o contêiner não está pronto.
Primeiro, ele inicia uma sessão de shell e executa um node
comando para iniciar o aplicativo Web. Ele também inicia um comando para dormir por 240 segundos, após o qual cria um arquivo chamado ready
dentro do /tmp
diretório:
node /usr/src/app/index.js & (sleep 240; touch /tmp/ready); wait
Comando de prontidão
Este arquivo YAML define um readinessProbe
que suporta um exec
comando readiness que atua como a verificação de prontidão. Este exemplo de comando readiness testa /tmp
a existência do ready
arquivo no diretório.
Quando o ready
arquivo não existe, o comando readiness é encerrado com um valor diferente de zero, o contêiner continua em execução, mas não pode ser acessado. Quando o comando é encerrado com êxito com o código de saída 0, o contêiner está pronto para ser acessado.
A periodSeconds
propriedade designa o comando readiness deve ser executado a cada 5 segundos. O teste de prontidão é executado durante o tempo de vida do grupo de contêineres.
Exemplo de implantação
Execute o seguinte comando para implantar um grupo de contêineres com a configuração YAML anterior:
az container create --resource-group myResourceGroup --file readiness-probe.yaml
Ver verificações de prontidão
Neste exemplo, durante os primeiros 240 segundos, o comando readiness falha quando verifica a existência do ready
arquivo. O código de status retornado sinaliza que o contêiner não está pronto.
Esses eventos podem ser exibidos no portal do Azure ou na CLI do Azure. Por exemplo, o portal mostra que eventos do tipo Unhealthy
são acionados quando o comando readiness falha.
Verificar a prontidão do contêiner
Depois de iniciar o contêiner, você pode verificar se ele não está acessível inicialmente. Após o provisionamento, obtenha o endereço IP do grupo de contêineres:
az container show --resource-group myResourceGroup --name readinesstest --query "ipAddress.ip" --out tsv
Tente acessar o site enquanto a sonda de preparação falhar:
wget <ipAddress>
A saída mostra que o site não está acessível inicialmente:
wget 192.0.2.1
--2019-10-15 16:46:02-- http://192.0.2.1/
Connecting to 192.0.2.1... connected.
HTTP request sent, awaiting response...
Após 240 segundos, o comando readiness é bem-sucedido, sinalizando que o contêiner está pronto. Agora, quando você executa o wget
comando, ele é bem-sucedido:
wget 192.0.2.1
--2019-10-15 16:46:02-- http://192.0.2.1/
Connecting to 192.0.2.1... connected.
HTTP request sent, awaiting response...200 OK
Length: 1663 (1.6K) [text/html]
Saving to: ‘index.html.1’
index.html.1 100%[===============================================================>] 1.62K --.-KB/s in 0s
2019-10-15 16:49:38 (113 MB/s) - ‘index.html.1’ saved [1663/1663]
Quando o contêiner estiver pronto, você também poderá acessar o aplicativo Web navegando até o endereço IP usando um navegador da Web.
Nota
A sonda de prontidão continua a ser executada durante o tempo de vida do grupo de contêineres. Se o comando readiness falhar posteriormente, o contêiner ficará novamente inacessível.
Próximos passos
Uma sonda de prontidão pode ser útil em cenários que envolvem grupos de vários contêineres que consistem em contêineres dependentes. Para obter mais informações sobre cenários de vários contêineres, consulte Grupos de contêineres em instâncias de contêiner do Azure.