Compartilhar via


Contêineres em Aplicativos de Contêiner do Azure

Os Aplicativos de Contêiner do Azure gerenciam os detalhes do Kubernetes e orquestração de contêineres para você. Os contêineres nos Aplicativos de Contêiner do Azure podem usar o runtime, a linguagem de programação ou a pilha de desenvolvimento de sua preferência.

Aplicativos de Contêiner do Azure: contêineres

Os Aplicativos de Contêiner do Azure são compatíveis com:

  • Qualquer imagem de contêiner baseada em Linux x86-64 (linux/amd64)
  • Contêineres de qualquer registro de contêiner, público ou privado
  • Sidecar e contêineres de init opcionais

Os recursos também incluem:

  • Os aplicativos usam a seção de configuração do template para definir a imagem de contêiner e outras configurações. As alterações na seção de configuração do ARM template disparam uma nova revisão do aplicativo de contêiner.
  • Se um contêiner falha, ele é reiniciado automaticamente.

Os recursos de trabalho incluem:

  • As execuções de trabalho usam a seção de configuração template para definir a imagem do contêiner e outras configurações quando cada execução é iniciada.
  • Se um contêiner for encerrado com um código de saída diferente de zero, a execução do trabalho será marcada como com falha. É possível configurar um trabalho para repetir as execuções com falha.

Configuração

A maioria dos aplicativos de contêiner tem um único contêiner. Em cenários avançados, um aplicativo também pode ter contêineres sidecar e init. Em uma definição de aplicativo de contêiner, o aplicativo principal e seus contêineres de sidecar são listados na matriz containers na seção properties.template e os contêineres init são listados na matriz initContainers. O trecho a seguir mostra as opções de configuração disponíveis para um contêineres de aplicativo.

{
  "properties": {
    "template": {
      "containers": [
        {
          "name": "main",
          "image": "[parameters('container_image')]",
          "env": [
            {
              "name": "HTTP_PORT",
              "value": "80"
            },
            {
              "name": "SECRET_VAL",
              "secretRef": "mysecret"
            }
          ],
          "resources": {
            "cpu": 0.5,
            "memory": "1Gi"
          },
          "volumeMounts": [
            {
              "mountPath": "/appsettings",
              "volumeName": "appsettings-volume"
            }
          ],
          "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
            }
          ]
        }
      ]
    },
    "initContainers": [
      {
        "name": "init",
        "image": "[parameters('init_container_image')]",
        "resources": {
          "cpu": 0.25,
          "memory": "0.5Gi"
        },
        "volumeMounts": [
          {
            "mountPath": "/appsettings",
            "volumeName": "appsettings-volume"
          }
        ]
      }
    ]
    ...
  }
  ...
}
Configuração Descrição Comentários
image O nome da imagem de contêiner do seu aplicativo de contêiner. Esse valor assume a forma de repository/<IMAGE_NAME>:<TAG>.
name Nome amigável do contêiner. Usado para relatório e identificação.
command O comando de inicialização do contêiner. Equivalente ao campo entrypoint do Docker.
args Argumentos do comando de inicialização. As entradas na matriz são unidas para criar uma lista de parâmetros a ser passada para o comando de inicialização.
env Uma matriz de nomes/valores em par que definem variáveis de ambiente. Use secretRef em vez do campo value para fazer referência a um segredo.
resources.cpu O número de CPUs alocadas para o contêiner. Consulte requisitos de alocação de memória e vCPU
resources.memory A quantidade de RAM alocada para o contêiner. Consulte requisitos de alocação de memória e vCPU
volumeMounts Uma matriz de definições de montagem de volume. Você pode definir um temporário ou armazenamento permanentes para seu contêiner. Para obter mais informações sobre volumes de armazenamento, confira Usar montagens de armazenamento em Aplicativos de Contêiner do Azure.
probes Uma matriz de investigações de integridade habilitadas no contêiner. Para obter mais informações sobre as configurações de investigações, confira Investigações de integridade em Aplicativos de Contêiner do Azure.

Requisitos de alocação de memória e vCPU

Quando você usa o plano Consumo, o total e de CPU e memória alocadas para todos os contêineres em um aplicativo de contêiner deve somar de acordo com uma das combinações a seguir.

vCPUs (núcleos) Memória
0.25 0.5Gi
0.5 1.0Gi
0.75 1.5Gi
1.0 2.0Gi
1.25 2.5Gi
1.5 3.0Gi
1.75 3.5Gi
2.0 4.0Gi
2.25 4.5Gi
2.5 5.0Gi
2.75 5.5Gi
3.0 6.0Gi
3.25 6.5Gi
3.5 7.0Gi
3.75 7.5Gi
4.0 8.0Gi

Observação

Os aplicativos que usam o plano de consumo em um ambiente de Consumo apenas são limitados a um máximo de 2 núcleos e 4Gi de memória.

Vários contêineres

Em cenários avançados, é possível executar vários contêineres em um único aplicativo de contêiner. Use esse padrão somente em instâncias específicas em que seus contêineres estejam fortemente acoplados.

Para a maioria dos cenários de microsserviços, a melhor prática é implantar cada serviço como um aplicativo de contêiner separado.

Os vários contêineres em no mesmo aplicativo de contêiner compartilham disco rígido e recursos de rede e têm o mesmo ciclo de vida do aplicativo.

Há duas maneiras de executar contêineres adicionais em um aplicativo de contêiner: contêineres sidecar e contêineres init.

Contêineres Sidecar

Você pode definir vários contêineres em um único aplicativo de contêiner para implementar o padrão sidecar.

Exemplos de contêineres sidecar incluem:

  • Um agente que lê os logs do contêiner do aplicativo primário em um volume compartilhado e os encaminha para um serviço registrar em log.

  • Um processo em segundo plano que atualiza um cache usado pelo contêiner de aplicativo primário em um volume compartilhado.

Esses cenários são exemplos e não representam as únicas maneiras pelas quais você pode implementar um sidecar.

Para executar vários contêineres em um aplicativo de contêiner, adicione mais de um contêiner na matriz containers do modelo de aplicativo de contêiner.

Contêineres de inicialização

Você pode definir uma ou mais contêineres de inicialização em um aplicativo de contêiner. Os contêineres de inicialização são executados antes do contêiner de aplicativo principal e são usados para executar tarefas de inicialização, como baixar dados ou preparar o ambiente.

Os contêineres de inicialização são definidos na matriz initContainers do modelo de aplicativo de contêiner. Os contêineres são executados na ordem em que estão definidos na matriz e devem ser concluídos com êxito antes que o contêiner do aplicativo principal seja iniciado.

Observação

Inite contêineres em aplicativos usando o plano Dedicado ou em execução em um Consumo somente ambiente não pode acessar a identidade gerenciada em tempo de execução.

Registros de contêiner

Você pode implantar imagens hospedadas em registros privados fornecendo as credenciais na configuração de Aplicativos de Contêiner.

Para usar um registro de contêiner, defina os registro na seção registriesmatrizproperties.configuration do modelo de recurso do aplicativo de contêiner. O campo passwordSecretRef identifica o nome do segredo no nome da matriz secrets em que você definiu a senha.

{
  ...
  "registries": [{
    "server": "docker.io",
    "username": "my-registry-user-name",
    "passwordSecretRef": "my-password-secret-name"
  }]
}

As credenciais salvas são usadas para efetuar pull de uma imagem de contêiner do registro privado à medida que seu aplicativo é implantado.

O exemplo a seguir mostra como configurar as credenciais do Registro de Contêiner do Azure em um aplicativo de contêiner.

{
  ...
  "configuration": {
    "secrets": [
      {
        "name": "docker-hub-password",
        "value": "my-docker-hub-password"
      }
    ],
    ...
    "registries": [
      {
        "server": "docker.io",
        "username": "someuser",
        "passwordSecretRef": "docker-hub-password"
      }
    ]
  }
}

Observação

O Docker Hub limita o número de downloads de imagens do Docker. Quando o limite for atingido, os contêineres em seu aplicativo não serão iniciados. Use um registro com limites suficientes, como o Registro de Contêiner do Azure para evitar problemas.

Identidade gerenciada com Registro de Contêiner do Azure

Você pode usar uma identidade gerenciada do Azure para autenticar o Registro de Contêiner do Azure em vez de usar um nome de usuário e uma senha. Para obter mais informações, confira Identidades gerenciadas nos Aplicativos de Contêiner do Azure.

Para usar a identidade gerenciada com um registro, a identidade deve ser habilitada no aplicativo e deve ser atribuída função no registro acrPull. Para configurar o registro, use a ID do recurso da identidade gerenciada para system uma identidade atribuída ao usuário ou para identidade gerenciada atribuída ao sistema na identity propriedade do registro. Não configure um nome de usuário e senha ao usar a identidade gerenciada.

{
    "identity": {
        "type": "SystemAssigned,UserAssigned",
        "userAssignedIdentities": {
            "<IDENTITY1_RESOURCE_ID>": {}
        }
    }
    "properties": {
        "configuration": {
            "registries": [
            {
                "server": "myacr1.azurecr.io",
                "identity": "<IDENTITY1_RESOURCE_ID>"
            },
            {
                "server": "myacr2.azurecr.io",
                "identity": "system"
            }]
        }
        ...
    }
}

Para obter mais informações sobre como configurar identidades atribuídas pelo usuário, confira Adicionar uma identidade atribuída pelo usuário.

Limitações

Os Aplicativos de Contêiner do Azure têm as seguintes limitações:

  • Contêineres privilegiados: Os Aplicativos de Contêiner do Azure não permitem o modo de contêineres privilegiados com acesso no nível do host.

  • Sistema operacional: são necessárias imagens de contêiner baseadas em Linux (linux/amd64).

  • Tamanho máximo da imagem:

    • O perfil de carga de trabalho de consumo é compatível com imagens de contêiner com um total de até 8 GB para cada aplicativo ou réplica de trabalho.
    • Os perfis de carga de trabalho dedicados são compatíveis com imagens de contêiner maiores. Como um perfil de carga de trabalho dedicado pode executar vários aplicativos ou trabalhos, várias imagens de contêiner compartilham o espaço em disco disponível. O tamanho real da imagem com suporte varia de acordo com os recursos consumidos por outros aplicativos e trabalhos.

Próximas etapas