Configurar investigações de preparação
Para aplicativos conteinerizados que atendam ao tráfego, pode ser interessante verificar se o contêiner está pronto para lidar com as solicitações que estão chegando. As Instâncias de Contêiner do Azure dão suporte a investigações de preparação para incluir configurações para que o contêiner não seja acessado sob determinadas condições. A investigação de preparação se comporta como uma investigação de preparação de Kubernetes. Por exemplo, um aplicativo de contêiner pode precisar carregar um grande conjunto de dados durante a inicialização, e o ideal é que ele não receba solicitações durante esse tempo.
Este artigo explica como implantar um grupo de contêineres que inclui uma investigação de preparação, para que um contêiner só receba tráfego quando a investigação for bem-sucedida.
As Instâncias de Contêiner do Azure também dão suporte a investigação de atividade, que podem ser configuradas para fazer com que um contêiner não íntegro seja reiniciado automaticamente.
Configuração de YAML
Por exemplo, crie um arquivo readiness-probe.yaml
com o snippet de código a seguir, que inclui uma investigação de preparação. Esse arquivo define um grupo de contêineres que consiste em um contêiner que executa um pequeno aplicativo Web. O aplicativo é implantado com base na imagem pública mcr.microsoft.com/azuredocs/aci-helloworld
. Esse aplicativo conteinerizado também é demonstrado em Implantar uma instância de contêiner no Azure usando a CLI do Azure e em outros guias de início rápido.
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 propriedade command
que define um comando de início que é executado quando o contêiner começa a ser executado pela primeira vez. Essa propriedade aceita uma matriz de cadeias de caracteres. Este comando simula uma hora em que o aplicativo Web é executado, mas o contêiner não está pronto.
Primeiro, ele inicia uma sessão do shell e executa um comando node
para iniciar o aplicativo Web. Ele também inicia um comando para suspender por 240 segundos, após o qual ele cria um arquivo chamado ready
dentro do diretório /tmp
:
node /usr/src/app/index.js & (sleep 240; touch /tmp/ready); wait
Comando de preparação
Esse arquivo YAML define um readinessProbe
que dá suporte a um comando de preparação exec
que atua como a verificação de preparação. Este exemplo de comando de preparação testa a existência do arquivo ready
no diretório /tmp
.
Quando o arquivo ready
não é encontrado, o comando de preparação é 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 propriedade periodSeconds
indica que o comando de preparação deve ser executado a cada cinco segundos. A investigação de preparação é executada 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
Exibir verificações de preparação
Neste exemplo, durante os primeiros 240 segundos, o comando de preparação falha ao verificar a existência do arquivo ready
. O código de status retornado sinaliza que o contêiner não está pronto.
Esses eventos podem ser exibidos do Portal do Azure ou na CLI do Azure. Por exemplo, o portal mostra que os eventos do tipo Unhealthy
são disparados após a falha do comando de preparação.
Verificar preparação do contêiner
Depois de iniciar o contêiner, você poderá 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 durante a falha da investigação de preparação:
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 de preparação é executado com sucesso, sinalizando que o contêiner está pronto. Agora, quando você executar o comando wget
, ele terá sucesso:
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.
Observação
A investigação de preparação continua a ser executada durante o tempo de vida do grupo de contêineres. Se o comando de preparação falhar em um momento posterior, o contêiner se tornará novamente inacessível.
Próximas etapas
Uma investigação de preparação pode ser útil em cenários que envolvam 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.