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
- Containrar från alla offentliga eller privata containerregister
- Valfria sidovagns- och initcontainrar
Bland funktionerna finns även:
- Appar använder konfigurationsavsnittet
template
för att definiera containeravbildningen och andra inställningar. Ändringar i konfigurationsavsnittettemplate
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
De flesta containerappar har en enda container. I avancerade scenarier kan en app också ha sidovagns- och init-containrar. I en containerappsdefinition visas huvudappen och dess sidovagnscontainrar i matrisen containers
properties.template
i avsnittet och init-containrar visas i matrisen initContainers
. Följande utdrag visar tillgängliga konfigurationsalternativ när du konfigurerar en apps containrar.
{
"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 | beskrivning | 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 namn/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. | Se krav för vCPU och minnesallokering |
resources.memory |
Mängden RAM-minne som har allokerats till containern. | Se krav för vCPU och minnesallokering |
volumeMounts |
En matris med volymmonteringsdefinitioner. | Du kan definiera en tillfällig eller permanent lagringsvolym 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. | Mer information om avsökningsinställningar finns i Hälsoavsökningar i Azure Container Apps. |
krav för vCPU- och minnesallokering
När du använder förbrukningsplanen måste det totala antalet processorer och minne som allokerats till alla containrar i en containerapp lägga till upp till någon av följande kombinationer.
vCPU:er (kärnor) | Minne |
---|---|
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 |
Kommentar
Appar som använder förbrukningsplanen i en miljö med endast förbrukning är begränsade till högst 2 kärnor och 4Gi minne.
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 upplever samma programlivscykel.
Det finns två sätt att köra ytterligare 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 i appar som använder den dedikerade planen eller som körs i en miljö med endast förbrukning kan inte komma åt hanterad identitet vid körning.
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 registret i matrisen registries
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": "docker-hub-password",
"value": "my-docker-hub-password"
}
],
...
"registries": [
{
"server": "docker.io",
"username": "someuser",
"passwordSecretRef": "docker-hub-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.
Om du vill använda hanterad identitet med ett register måste identiteten vara aktiverad i appen och den måste vara tilldelad acrPull
roll i registret. Om du vill konfigurera registret använder du resurs-ID:t för hanterad identitet för en användartilldelad identitet eller system
för den systemtilldelade identiteten identity
i registrets egenskap. Konfigurera inte ett användarnamn och lösenord när du använder hanterad identitet.
{
"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.Maximal bildstorlek:
- Förbrukningsarbetsbelastningsprofilen stöder containeravbildningar på totalt upp till 8 GB för varje app eller jobbreplik.
- Dedikerade arbetsbelastningsprofiler stöder större containeravbildningar. Eftersom en dedikerad arbetsbelastningsprofil kan köra flera appar eller jobb delar flera containeravbildningar det tillgängliga diskutrymmet. Den faktiska bildstorleken som stöds varierar beroende på resurser som används av andra appar och jobb.