Container in Azure Container Apps

Azure Container Apps verwaltet die Details von Kubernetes und der Containerorchestrierung für Sie. Container in Azure Container Apps können eine beliebige Laufzeit, Programmiersprache oder einen Entwicklungsstapel Ihrer Wahl verwenden.

Azure Container Apps: Containers

Azure Container Apps unterstützt Folgendes:

  • Jedes linuxbasierte x86-64 (linux/amd64) Containerimage ohne erforderliches Basisimage
  • Container aus einer öffentlichen oder privaten Containerregistrierung
  • Sidecar- und Initcontainer

Features umfassen auch:

  • Änderungen am template Konfigurationsabschnitt lösen eine neue Überarbeitung der Container-App aus.
  • Wenn ein Container abstürzt, wird er automatisch neu gestartet.

Zu den Aufgabenfeatures gehören:

  • Auftragsausführungen verwenden den template Konfigurationsabschnitt, um das Containerimage und andere Einstellungen zu definieren, wenn jede Ausführung gestartet wird.
  • Wenn ein Container mit einem Nicht-Null-Beendigungscode beendet wird, wird die Auftragsausführung als fehlgeschlagen markiert. Sie können einen Auftrag so konfigurieren, dass fehlgeschlagene Ausführungen wiederholt werden.

Konfiguration

Nachfolgend sehen Sie ein Codebeispiel für das Array containers im Abschnitt properties.template einer Container-App-Ressourcenvorlage. Der Auszug zeigt die beim Einrichten eines Containers verfügbaren Konfigurationsoptionen.

{
  "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"
          }
        ]
      }
    ]
    ...
  }
  ...
}
Einstellung Beschreibung Hinweise
image Der Name des Containerimages für Ihre Container-App. Dieser Wert hat das Format repository/<IMAGE_NAME>:<TAG>.
name Anzeigename des Containers. Dient zur Berichterstellung und Identifizierung.
command Der Startbefehl des Containers. Entspricht dem Feld entrypoint von Docker.
args Startbefehlsargumente. Einträge im Array werden miteinander so verbunden, dass eine Parameterliste erstellt wird, die an den Startbefehl übergeben wird.
env Ein Array von Schlüssel-Wert-Paaren, die Umgebungsvariablen festlegen. Verwenden Sie secretRef anstelle des Felds value, um auf ein Geheimnis zu verweisen.
resources.cpu Die Anzahl der CPUs, die dem Container zugeordnet sind. Mit dem Verbrauchsplan müssen die Werte den folgenden Regeln entsprechen:

• größer als Null
• kleiner als oder gleich 2
• kann eine beliebige Dezimalzahl sein (mit maximal zwei Dezimalstellen)

Beispiel: 1.25 ist gültig, 1.555 jedoch ungültig.
Der Standardwert ist 0,25 CPUs pro Container.

Wenn Sie das Arbeitsauslastungsprofil "Verbrauch" im dedizierten Plan verwenden, gelten dieselben Regeln, außer CPUs müssen kleiner oder gleich 4 sein.

Wenn Sie den dedizierten Plan verwenden, müssen die maximalen CPUs kleiner oder gleich der Anzahl der Kerne sein, die im Profil verfügbar sind, in dem die Container-App ausgeführt wird.
resources.memory Die Größe des dem Container zugeteilten RAM. Mit dem Verbrauchsplan müssen die Werte den folgenden Regeln entsprechen:

• größer als Null
• kleiner oder gleich 4Gi
• kann eine beliebige Dezimalzahl sein (mit maximal zwei Dezimalstellen)

Beispiel: 1.25Gi ist gültig, 1.555Gi jedoch ungültig.
Der Standardwert ist 0.5Gi pro Container.

Wenn Sie die Workload "Verbrauch" für den dedizierten Plan verwenden, gelten dieselben Regeln, mit Ausnahme von Arbeitsspeicher, der kleiner oder gleich sein 8Gimuss.

Wenn Sie den dedizierten Plan verwenden, muss der maximale Arbeitsspeicher kleiner oder gleich der Menge des Arbeitsspeichers sein, der im Profil verfügbar ist, in dem die Container-App ausgeführt wird.
volumeMounts Ein Array der Volumebereitstellungsdefinitionen. Sie können ein temporäres Volume oder mehrere dauerhafte Speichervolumes für Ihren Container definieren. Weitere Informationen zu Speichervolumes finden Sie unter Verwenden von Speicherbereitstellungen in Azure Container Apps.
probes Ein Array von Integritätstasten, die im Container aktiviert sind. Dieses Feature basiert auf Kubernetes-Integritätstests. Weitere Informationen zu Testeinstellungen finden Sie unter Integritätstests in Azure Container Apps.

Wenn Sie entweder den Verbrauchsplan oder eine Auslastung für den dedizierten Plan verwenden, müssen die für alle Container in einer Container-App angeforderten CPU- und Speicherzuweisungen bis zu einer der folgenden Kombinationen addiert werden.

vCPUs (Kerne) Arbeitsspeicher Verbrauchsplan Arbeitsauslastungsprofil für Verbrauch
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
  • Die Gesamtanzahl der CPU-Anforderungen in allen Containern muss mit einem der Werte in der Spalte "vCPUs " übereinstimmen.

  • Die Gesamtanzahl der Arbeitsspeicheranforderungen in allen Ihren Containern muss mit dem Wert für „Arbeitsspeicher“ in der Spalte „Arbeitsspeicher“ in derselben Zeile wie in der Spalte „CPU“ übereinstimmen.

Wenn Sie das Profil "Verbrauch" im dedizierten Plan verwenden, müssen die für alle Container in einer Container-App angeforderten CPU- und Speicherzuweisungen kleiner oder gleich den kernen und dem im Profil verfügbaren Arbeitsspeicher sein.

Mehrere Container

In erweiterten Szenarien können Sie mehrere Container in einer einzelnen Container-App ausführen. Verwenden Sie dieses Muster nur in bestimmten Fällen, in denen Ihre Container eng gekoppelt sind.

Für die meisten Microservice-Szenarien empfiehlt es sich, jeden Dienst als separate Container-App bereitzustellen.

Die mehreren Container in derselben Container-App teilen Festplatten- und Netzwerkressourcen und erleben den gleichen Anwendungslebenszyklus.

Es gibt zwei Möglichkeiten zum Ausführen mehrerer Container in einer Container-App: Sidecar-Container und Init-Container.

Sidecar-Container

Sie können mehrere Container in einer einzelnen Container-App definieren, um das Sidecar-Muster zu implementieren.

Beispiele für Sidecar-Container sind:

  • Ein Agent, der Protokolle aus dem primären App-Container auf einem Freigabevolume liest und sie an einen Protokollierungsdienst weiterleitet.

  • Ein Hintergrundprozess, der einen Cache aktualisiert, der vom primären App-Container in einem Freigabevolume verwendet wird.

Diese Szenarien sind Beispiele und stellen nicht die einzigen Möglichkeiten dar, wie Sie ein Sidecar implementieren können.

Fügen Sie zum Ausführen mehrerer Container in einer Container-App mehr als einen Container im Array containers der Container-App-Vorlage hinzu.

Initialisierungscontainer.

Sie können einen oder mehrere Init-Container in einer Container-App definieren. Init-Container werden vor dem primären App-Container ausgeführt und werden verwendet, um Initialisierungsaufgaben auszuführen, z. B. das Herunterladen von Daten oder das Vorbereiten der Umgebung.

Init-Container werden im initContainers Array der Container-App-Vorlage definiert. Die Container werden in der Reihenfolge ausgeführt, in der sie im Array definiert sind, und müssen erfolgreich abgeschlossen werden, bevor der primäre App-Container gestartet wird.

Hinweis

Init-Container unterstützen Image-Pulls mithilfe von verwalteten Identitäten, aber Prozesse, die init-Containern ausgeführt werden, haben keinen Zugriff auf verwaltete Identitäten.

Containerregistrierungen

Sie können Images bereitstellen, die in privaten Registrierungen gehostet werden, indem Sie Anmeldeinformationen in der Container Apps-Konfiguration angeben.

Um eine Containerregistrierung zu verwenden, definieren Sie die erforderlichen Felder im Array registries im Abschnitt properties.configuration der Container-App-Ressourcenvorlage. Das Feld passwordSecretRef identifiziert den Namen des Geheimen im secrets-Arraynamen, in dem Sie das Kennwort definiert haben.

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

Gespeicherte Anmeldeinformationen werden verwendet, um ein Containerimage aus der privaten Registrierung abzurufen, während Ihre App bereitgestellt wird.

Im folgenden Beispiel wird gezeigt, wie Sie Azure Container Registry-Anmeldeinformationen in einer Container-App konfigurieren.

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

Hinweis

Docker Hub beschränkt die Anzahl der Docker-Imagedownloads. Wenn der Grenzwert erreicht wird, können Container in Ihrer App nicht mehr gestartet werden. Verwenden Sie eine Registrierung mit ausreichenden Grenzwerten, z . B. Azure Container Registry , um dieses Problem zu vermeiden.

Verwaltete Identität mit Azure Container Registry

Sie können anstelle eines Benutzernamens und eines Kennworts eine verwaltete Azure-Identität verwenden, um sich mit Azure Container Registry zu authentifizieren. Weitere Informationen finden Sie unter Verwaltete Identitäten in Azure Container Apps.

Verwenden Sie beim Zuweisen einer verwalteten Identität zu einer Registrierung die Ressourcen-ID der verwalteten Identität für eine vom Benutzer zugewiesene Identität oder system für die vom System zugewiesene Identität.

{
    "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"
            }]
        }
        ...
    }
}

Weitere Informationen zum Konfigurieren benutzerseitig zugewiesener Identitäten finden Sie unter Hinzufügen einer benutzerseitig zugewiesenen Identität.

Begrenzungen

Für Azure Container Apps gelten die folgenden Einschränkungen:

  • Privilegierte Container: Azure-Container-Apps lassen den Modus privilegierter Container mit Zugriff auf Hostebene nicht zu.

  • Betriebssystem: Linux-basierte (linux/amd64) Containerimages sind erforderlich.

Nächste Schritte