Contenitori nelle 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.

Azure Container Apps: Containers

App Azure Container supporta:

  • Qualsiasi immagine del contenitore x86-64 (linux/amd64) basata su Linux senza un'immagine di base necessaria
  • Contenitori da qualsiasi registro contenitori pubblico o privato
  • Contenitori sidecar e init

Le funzionalità includono anche:

  • Le modifiche apportate alla template sezione di configurazione 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 template sezione di configurazione per definire l'immagine del contenitore e altre impostazioni all'avvio di ogni esecuzione.
  • Se un contenitore viene chiuso con un codice di uscita diverso da zero, l'esecuzione del processo viene contrassegnata come non riuscita. È possibile configurare un processo per ripetere le esecuzioni non riuscite.

Configurazione

Il codice seguente è un esempio di containers matrice nella properties.template sezione di un modello di risorsa dell'app contenitore. L'estratto mostra le opzioni di configurazione disponibili durante la configurazione di un contenitore.

{
  "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 del punto di ingresso di Docker.
args Argomenti del comando di avvio. Le voci nella matrice vengono unite insieme per creare un elenco di parametri da passare al comando di avvio.
env Matrice di coppie chiave/valore che definiscono le variabili di ambiente. Usare secretRef anziché il value campo per fare riferimento a un segreto.
resources.cpu Numero di CPU allocate al contenitore. Con il piano a consumo, i valori devono rispettare le regole seguenti:

• maggiore di zero
• minore o uguale a 2
• può essere qualsiasi numero decimale (con un massimo di due posizioni decimali)

Ad esempio, 1.25 è valido, ma 1.555 non è valido.
Il valore predefinito è 0,25 CPU per ogni contenitore.

Quando si usa il profilo del carico di lavoro Consumo nel piano dedicato, si applicano le stesse regole, ad eccezione delle CPU che devono essere minori o uguali a 4.

Quando si usa il piano Dedicato, le CPU massime devono essere minori o uguali al numero di core disponibili nel profilo in cui è in esecuzione l'app contenitore.
resources.memory Quantità di RAM allocata al contenitore. Con il piano a consumo, i valori devono rispettare le regole seguenti:

• maggiore di zero
• minore o uguale a 4Gi
• può essere qualsiasi numero decimale (con un massimo di due posizioni decimali)

Ad esempio, 1.25Gi è valido, ma 1.555Gi non è valido.
Il valore predefinito è 0.5Gi per contenitore.

Quando si usa il carico di lavoro Consumo nel piano dedicato, le stesse regole si applicano ad eccezione della memoria deve essere minore o uguale a 8Gi.

Quando si usa il piano Dedicato, la memoria massima deve essere minore o uguale alla quantità di memoria disponibile nel profilo in cui è in esecuzione l'app contenitore.
volumeMounts Matrice di definizioni di montaggio del volume. È possibile definire un volume temporaneo o più volumi di archiviazione permanenti per il contenitore. Per altre informazioni sui volumi di archiviazione, vedere Usare i montaggi di archiviazione nelle app Azure Container.
probes Matrice di probe di integrità abilitati nel contenitore. Questa funzionalità si basa sui probe di integrità di Kubernetes. Per altre informazioni sulle impostazioni dei probe, vedere Probe di integrità in App Contenitore di Azure.

Quando si usa il piano a consumo o un carico di lavoro a consumo nel piano dedicato, le allocazioni totali di CPU e memoria richieste per tutti i contenitori in un'app contenitore devono essere aggiunte a una delle combinazioni seguenti.

vCPU (core) Memoria Piano a consumo Profilo del carico di lavoro a consumo
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
  • Il totale delle richieste di CPU in tutti i contenitori deve corrispondere a uno dei valori nella colonna vCPU .

  • Il totale delle richieste di memoria in tutti i contenitori deve corrispondere al valore di memoria nella colonna di memoria nella stessa riga della colonna CPU.

Quando si usa il profilo Consumo nel piano dedicato, le allocazioni totali di CPU e memoria richieste per tutti i contenitori in un'app contenitore devono essere minori o uguali ai core e alla memoria disponibili nel profilo.

Più contenitori

Negli scenari avanzati è possibile eseguire più contenitori in un'unica app contenitore. Usare questo modello 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.

I 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 più contenitori 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 di app primario 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 nella containers matrice 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 sono definiti nella initContainers matrice del modello di app contenitore. I contenitori vengono eseguiti nell'ordine in cui sono definiti nella matrice e devono essere completati correttamente prima dell'avvio del contenitore dell'app primaria.

Nota

I contenitori Init supportano il pull delle immagini usando identità gestite, ma i processi in esecuzione in contenitori init non hanno accesso alle identità gestite.

Registri contenitori

È possibile distribuire immagini ospitate in registri privati fornendo le credenziali nella configurazione di App contenitore.

Per usare un registro contenitori, definire i campi obbligatori nella registries matrice nella properties.configuration sezione del modello di risorsa dell'app contenitore. Il passwordSecretRef campo identifica il nome del segreto nel nome della secrets matrice 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 Registro Azure Container in un'app contenitore.

{
  ...
  "configuration": {
    "secrets": [
      {
        "name": "acr-password",
        "value": "my-acr-password"
      }
    ],
    ...
    "registries": [
      {
        "server": "myacr.azurecr.io",
        "username": "someuser",
        "passwordSecretRef": "acr-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 Azure Container.

Quando si assegna un'identità gestita a un registro, usare l'ID risorsa identità gestita per un'identità assegnata dall'utente o system per l'identità assegnata dal sistema.

{
    "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).

Passaggi successivi