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.

Observação

Atualmente, não é possível usar uma investigação de preparação em um grupo de contêineres implantados em uma rede virtual.

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.

Evento não íntegro no portal

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.