Contenitori in App contenitore di Azure
App contenitore di Azure gestisce i dettagli dell'orchestrazione dei contenitori e Kubernetes. I contenitori in App contenitore di Azure possono usare qualsiasi runtime, linguaggio di programmazione o stack di sviluppo desiderato.
App contenitore di Azure supporta:
- Qualsiasi immagine del contenitore x86-64 (
linux/amd64
) basata su Linux - Contenitori da qualsiasi registro contenitori pubblico o privato
- Contenitori sidecar e init facoltativi
Le funzionalità includono anche:
- Le app usano la sezione di configurazione
template
per definire l'immagine del contenitore e altre impostazioni. Le modifiche apportate alla sezione di configurazionetemplate
attivano una nuova revisione dell'app contenitore. - Se un contenitore si arresta in modo anomalo, viene riavviato automaticamente.
Le funzionalità dei processi includono:
- Le esecuzioni di processi usano la sezione di configurazione
template
per definire l'immagine del contenitore e altre impostazioni all'avvio di ogni esecuzione. - Se un contenitore viene chiuso con un codice di uscita differente da zero, l'esecuzione del processo viene contrassegnata come non riuscita. È possibile configurare un processo per ripetere le esecuzioni non riuscite.
Impostazione
La maggior parte delle app contenitore ha un singolo contenitore. Negli scenari avanzati, un'app può anche avere contenitori sidecar e init. In una definizione di app contenitore, l'app principale e i relativi contenitori sidecar sono elencati nell'array containers
nella sezione properties.template
e i contenitori init sono elencati nell'array initContainers
. L'estratto seguente mostra le opzioni di configurazione disponibili durante la configurazione dei contenitori di un'app.
{
"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"
}
]
}
]
...
}
...
}
Impostazione | Descrizione | Note |
---|---|---|
image |
Nome dell'immagine del contenitore per l'app contenitore. | Questo valore assume la forma di repository/<IMAGE_NAME>:<TAG> . |
name |
Nome descrittivo del contenitore. | Usato per la creazione di report e l'identificazione. |
command |
Comando di avvio del contenitore. | Equivalente al campo punto di ingresso di Docker. |
args |
Argomenti del comando di avvio. | Le voci nell'array vengono unite insieme per creare un elenco di parametri da andare al comando di avvio. |
env |
Array di coppie nome/valore che definiscono le variabili di ambiente. | Usare secretRef anziché il campo value per fare riferimento a un segreto. |
resources.cpu |
Numero di CPU allocate al contenitore. | Vedere vCPU e requisiti di allocazione della memoria |
resources.memory |
Quantità di RAM allocata al contenitore. | Vedere vCPU e requisiti di allocazione della memoria |
volumeMounts |
Array di definizioni di montaggio del volume. | È possibile definire volumi di archiviazione temporanei o permanenti per il contenitore. Per altre informazioni sui volumi di archiviazione, vedere Usare i montaggi di archiviazione in App contenitore di Azure. |
probes |
Array di probe di integrità abilitati nel contenitore. | Per altre informazioni sulle impostazioni dei probe, vedere Probe di integrità in App contenitore di Azure. |
Requisiti di allocazione di memoria e vCPU
Quando si usa il piano A consumo, la CPU totale e la memoria allocata a tutti i contenitori in un'app contenitore devono essere aggiunte a una delle combinazioni seguenti.
vCPU (core) | Memoria |
---|---|
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 |
Nota
Le app che usano il piano A consumo in un ambiente Solo a consumo sono limitate a un massimo di 2 core e 4Gi di memoria.
Più contenitori
Negli scenari avanzati è possibile eseguire più contenitori in un'unica app contenitore. Usare questo criterio solo in istanze specifiche in cui i contenitori sono strettamente associati.
Per la maggior parte degli scenari di microservizi, è consigliabile distribuire ogni servizio come app contenitore separata.
Più contenitori nella stessa app contenitore condividono il disco rigido e le risorse di rete e sperimentano lo stesso ciclo di vita dell'applicazione.
Esistono due modi per eseguire contenitori aggiuntivi in un'app contenitore: contenitori sidecar e contenitori init.
Contenitori sidecar
È possibile definire più contenitori in una singola app contenitore per implementare il modello sidecar.
Esempi di contenitori sidecar includono:
Agente che legge i log dal contenitore dell'app primaria in un volume condiviso e li inoltra a un servizio di registrazione.
Processo in background che aggiorna la cache usata dal contenitore di app primario in un volume condiviso.
Questi scenari sono esempi e non rappresentano gli unici modi in cui è possibile implementare un sidecar.
Per eseguire più contenitori in un'app contenitore, aggiungere più contenitori nell'array containers
del modello di app contenitore.
Contenitori init
È possibile definire uno o più contenitori init in un'app contenitore. I contenitori Init vengono eseguiti prima del contenitore dell'app primaria e vengono usati per eseguire attività di inizializzazione, ad esempio il download di dati o la preparazione dell'ambiente.
I contenitori Init vengono definiti nell'array initContainers
del modello di app contenitore. I contenitori vengono eseguiti nell'ordine in cui sono definiti nell'array e devono essere completati correttamente prima dell'avvio del contenitore dell'app primaria.
Nota
I contenitori init nelle app che usano il piano dedicato o in esecuzione in un ambiente Soloa consumo non possono accedere all'identità gestita in fase di esecuzione.
Registri contenitori
È possibile distribuire immagini ospitate in registri privati fornendo le credenziali nella configurazione di App contenitore.
Per usare un registro contenitori, definire il registro nell'array registries
nella sezione properties.configuration
del modello di risorsa dell'app contenitore. Il campo passwordSecretRef
identifica il nome del segreto nel nome dell'array secrets
in cui è stata definita la password.
{
...
"registries": [{
"server": "docker.io",
"username": "my-registry-user-name",
"passwordSecretRef": "my-password-secret-name"
}]
}
Le credenziali salvate vengono usate per eseguire il pull di un'immagine del contenitore dal registro privato durante la distribuzione dell'app.
L'esempio seguente illustra come configurare le credenziali di Registro Azure Container in un'app contenitore.
{
...
"configuration": {
"secrets": [
{
"name": "docker-hub-password",
"value": "my-docker-hub-password"
}
],
...
"registries": [
{
"server": "docker.io",
"username": "someuser",
"passwordSecretRef": "docker-hub-password"
}
]
}
}
Nota
Docker Hub limita il numero di download di immagini Docker. Quando viene raggiunto il limite, l'avvio dei contenitori nell'app non riuscirà. Usare un registro con limiti sufficienti, ad esempio Registro Azure Container per evitare questo problema.
Identità gestita con Registro Azure Container
È possibile usare un'identità gestita di Azure per eseguire l'autenticazione con Registro Azure Container anziché usare un nome utente e una password. Per altre informazioni, vedere Identità gestite in App contenitore di Azure.
Per usare l'identità gestita con un registro, l'identità deve essere abilitata nell'app e deve essere assegnata al ruolo acrPull
nel Registro di sistema. Per configurare il Registro di sistema, usare l'ID risorsa identità gestita per un'identità assegnata dall'utente o system
per l'identità assegnata dal sistema nella proprietà identity
del Registro di sistema. Non configurare un nome utente e una password quando si usa l'identità gestita.
{
"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"
}]
}
...
}
}
Per altre informazioni sulla configurazione delle identità assegnate dall'utente, vedere Aggiungere un'identità assegnata dall'utente.
Limiti
App contenitore di Azure presenta le limitazioni seguenti:
Contenitori con privilegi: App contenitore di Azure non consente la modalità contenitori con privilegi con accesso a livello di host.
Sistema operativo: sono necessarie le immagini del contenitore basate su Linux (
linux/amd64
).Dimensioni massime immagine:
- Il profilo del carico di lavoro a consumo supporta immagini del contenitore per un totale massimo di 8 GB per ogni replica di app o processi.
- I profili dei carichi di lavoro dedicati supportano immagini del contenitore più grandi. Poiché un profilo di carico di lavoro dedicato può eseguire più app o processi, più immagini del contenitore condividono lo spazio disponibile su disco. Le dimensioni effettive dell'immagine supportate variano in base alle risorse utilizzate da altre app e processi.