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.
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 ARMtemplate
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 registries
matrizproperties.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.