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 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 8Gi muss.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.