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: contenitori

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 configurazione template 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.

Passaggi successivi