Containrar i Azure Container Apps
Azure Container Apps hanterar information om Kubernetes och containerorkestrering åt dig. Du kan använda valfri körmiljö, valfritt programmeringsspråk och valfri utvecklingsstack för containrar i Azure Container Apps.
Azure Container Apps stöder:
- Alla Linux-baserade x86-64-containeravbildningar (
linux/amd64
) utan nödvändig basavbildning - Containrar från alla offentliga eller privata containerregister
- Sidovagns- och initcontainrar
Bland funktionerna finns även:
- Ändringar i konfigurationsavsnittet
template
utlöser en ny revision av containerappen. - Om en container kraschar startas den automatiskt om.
Jobbfunktionerna omfattar:
- Jobbkörningar använder konfigurationsavsnittet
template
för att definiera containeravbildningen och andra inställningar när varje körning startar. - Om en container avslutas med en slutkod som inte är noll markeras jobbkörningen som misslyckad. Du kan konfigurera ett jobb för att försöka utföra misslyckade körningar igen.
Konfiguration
Följande kod är ett exempel på matrisen containers
properties.template
i avsnittet i en resursmall för containerappen. Utdraget visar tillgängliga konfigurationsalternativ när du konfigurerar en container.
{
"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"
}
]
}
]
...
}
...
}
Inställning | Description | Kommentarer |
---|---|---|
image |
Containeravbildningens namn för containerappen. | Det här värdet har formen repository/<IMAGE_NAME>:<TAG> . |
name |
Eget namn på containern. | Används för rapportering och identifiering. |
command |
Containerns startkommando. | Motsvarar Docker-startpunktsfältet. |
args |
Starta kommandoargument. | Poster i matrisen kopplas samman för att skapa en parameterlista som ska skickas till startkommandot. |
env |
En matris med nyckel/värde-par som definierar miljövariabler. | Använd secretRef i stället för fältet value för att referera till en hemlighet. |
resources.cpu |
Antalet processorer som allokerats till containern. | Med förbrukningsplanen måste värdena följa följande regler: • större än noll • mindre än eller lika med 2 • kan vara valfritt decimaltal (med högst två decimaler) Är till exempel 1.25 giltigt, men 1.555 är ogiltigt.Standardvärdet är 0,25 processorer per container. När du använder arbetsbelastningsprofilen Förbrukning i den dedikerade planen gäller samma regler, förutom att processorer måste vara mindre än eller lika med 4. När du använder den dedikerade planen måste de maximala processorerna vara mindre än eller lika med det antal kärnor som är tillgängliga i profilen där containerappen körs. |
resources.memory |
Mängden RAM-minne som har allokerats till containern. | Med förbrukningsplanen måste värdena följa följande regler: • större än noll • mindre än eller lika med 4Gi • kan vara valfritt decimaltal (med högst två decimaler) Är till exempel 1.25Gi giltigt, men 1.555Gi är ogiltigt.Standardvärdet är 0.5Gi per container.När du använder arbetsbelastningen Förbrukning i den dedikerade planen gäller samma regler förutom att 8Gi minnet måste vara mindre än eller lika med .När du använder den dedikerade planen måste det maximala minnet vara mindre än eller lika med mängden minne som är tillgängligt i profilen där containerappen körs. |
volumeMounts |
En matris med volymmonteringsdefinitioner. | Du kan definiera en tillfällig volym eller flera permanenta lagringsvolymer för din container. Mer information om lagringsvolymer finns i Använda lagringsmonteringar i Azure Container Apps. |
probes |
En matris med hälsoavsökningar aktiverade i containern. | Den här funktionen baseras på Kubernetes-hälsoavsökningar. Mer information om avsökningsinställningar finns i Hälsoavsökningar i Azure Container Apps. |
När du använder antingen förbrukningsplanen eller en förbrukningsarbetsbelastning i den dedikerade planen måste den totala cpu- och minnesallokeringen som begärs för alla containrar i en containerapp lägga till någon av följande kombinationer.
vCPU:er (kärnor) | Minne | Förbrukningsplan | Förbrukningsprofil för arbetsbelastning |
---|---|---|---|
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 |
✔ |
Summan av CPU-begäranden i alla dina containrar måste matcha ett av värdena i kolumnen vCPU:er .
Summan av minnesbegäranden i alla containrar måste matcha minnesvärdet i minneskolumnen på samma rad i CPU-kolumnen.
När du använder förbrukningsprofilen i den dedikerade planen måste den totala processor- och minnesallokeringen som begärs för alla containrar i en containerapp vara mindre än eller lika med kärnorna och minnet som är tillgängligt i profilen.
Flera containrar
I avancerade scenarier kan du köra flera containrar i en enda containerapp. Använd endast det här mönstret i specifika fall där containrarna är tätt kopplade.
För de flesta mikrotjänstscenarier är bästa praxis att distribuera varje tjänst som en separat containerapp.
Flera containrar i samma containerapp delar hårddisk- och nätverksresurser och har samma programlivscykel.
Det finns två sätt att köra flera containrar i en containerapp: sidovagnscontainrar och init-containrar.
Sidovagnscontainrar
Du kan definiera flera containrar i en enda containerapp för att implementera sidovagnsmönstret.
Exempel på sidovagnscontainrar är:
En agent som läser loggar från den primära appcontainern på en delad volym och vidarebefordrar dem till en loggningstjänst.
En bakgrundsprocess som uppdaterar en cache som används av den primära appcontainern på en delad volym.
Dessa scenarier är exempel och representerar inte de enda sätten du kan implementera en sidovagn på.
Om du vill köra flera containrar i en containerapp lägger du till fler än en container i containers
containerappmallens matris.
Init-containrar
Du kan definiera en eller flera init-containrar i en containerapp. Init-containrar körs före den primära appcontainern och används för att utföra initieringsuppgifter som att ladda ned data eller förbereda miljön.
Init-containrar definieras i matrisen initContainers
för containerappmallen. Containrarna körs i den ordning de definieras i matrisen och måste slutföras innan den primära appcontainern startar.
Kommentar
Init-containrar stöder avbildningshämtningar med hanterade identiteter, men processer som körs i init-containrar har inte åtkomst till hanterade identiteter.
Containerregister
Du kan distribuera avbildningar som finns i privata register genom att ange autentiseringsuppgifter i Container Apps-konfigurationen.
Om du vill använda ett containerregister definierar du de obligatoriska fälten i registries
matrisen properties.configuration
i avsnittet i resursmallen för containerappen. Fältet passwordSecretRef
identifierar namnet på hemligheten i matrisnamnet secrets
där du definierade lösenordet.
{
...
"registries": [{
"server": "docker.io",
"username": "my-registry-user-name",
"passwordSecretRef": "my-password-secret-name"
}]
}
Sparade autentiseringsuppgifter används för att hämta en containeravbildning från det privata registret när appen distribueras.
I följande exempel visas hur du konfigurerar autentiseringsuppgifter för Azure Container Registry i en containerapp.
{
...
"configuration": {
"secrets": [
{
"name": "acr-password",
"value": "my-acr-password"
}
],
...
"registries": [
{
"server": "myacr.azurecr.io",
"username": "someuser",
"passwordSecretRef": "acr-password"
}
]
}
}
Kommentar
Docker Hub begränsar antalet Nedladdningar av Docker-avbildningar. När gränsen har nåtts startar inte containrar i din app. Använd ett register med tillräckliga gränser, till exempel Azure Container Registry för att undvika det här problemet.
Hanterad identitet med Azure Container Registry
Du kan använda en hanterad Azure-identitet för att autentisera med Azure Container Registry i stället för att använda ett användarnamn och lösenord. Mer information finns i Hanterade identiteter i Azure Container Apps.
När du tilldelar en hanterad identitet till ett register använder du resurs-ID:t för hanterad identitet för en användartilldelad identitet eller system
för den systemtilldelade identiteten.
{
"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"
}]
}
...
}
}
Mer information om hur du konfigurerar användartilldelade identiteter finns i Lägga till en användartilldelad identitet.
Begränsningar
Azure Container Apps har följande begränsningar:
Privilegierade containrar: Azure Container Apps tillåter inte privilegierat containerläge med åtkomst på värdnivå.
Operativsystem: Linux-baserade (
linux/amd64
) containeravbildningar krävs.