Containers in Azure Container Apps
Azure Container Apps beheert de details van Kubernetes en containerindeling voor u. Containers in Azure Container Apps kunnen gebruikmaken van elke runtime-, computertaal of ontwikkelingsstack van uw keuze.
Azure Container Apps ondersteunt:
- Een x86-64-containerinstallatiekopieën
linux/amd64
op basis van Linux - Containers uit een openbaar of persoonlijk containerregister
- Optionele sidecar- en init-containers
Functies zijn ook:
- Apps gebruiken de
template
configuratiesectie om de containerinstallatiekopieën en andere instellingen te definiëren. Wijzigingen in detemplate
configuratiesectie activeren een nieuwe revisie van de container-app. - Als een container vastloopt, wordt deze automatisch opnieuw opgestart.
Functies voor taken zijn onder andere:
- Taakuitvoeringen gebruiken de
template
configuratiesectie om de containerinstallatiekopieën en andere instellingen te definiëren wanneer elke uitvoering wordt gestart. - Als een container wordt afgesloten met een afsluitcode die niet nul is, wordt de taakuitvoering gemarkeerd als mislukt. U kunt een taak configureren om mislukte uitvoeringen opnieuw uit te voeren.
Configuratie
De meeste container-apps hebben één container. In geavanceerde scenario's kan een app ook sidecar- en init-containers hebben. In een container-app-definitie worden de hoofd-app en de bijbehorende sidecarcontainers weergegeven in de containers
matrix in de properties.template
sectie en worden init-containers weergegeven in de initContainers
matrix. In het volgende fragment ziet u de beschikbare configuratieopties bij het instellen van de containers van een 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"
}
]
}
]
...
}
...
}
Instelling | Beschrijving | Opmerkingen |
---|---|---|
image |
De naam van de containerinstallatiekopieën voor uw container-app. | Deze waarde heeft de vorm van repository/<IMAGE_NAME>:<TAG> . |
name |
Beschrijvende naam van de container. | Wordt gebruikt voor rapportage en identificatie. |
command |
De opstartopdracht van de container. | Gelijk aan het invoerpuntveld van Docker. |
args |
Opdrachtargumenten starten. | Vermeldingen in de matrix worden samengevoegd om een parameterlijst te maken die moet worden doorgegeven aan de opstartopdracht. |
env |
Een matrix met naam-/waardeparen die omgevingsvariabelen definiëren. | Gebruik secretRef in plaats van het value veld om te verwijzen naar een geheim. |
resources.cpu |
Het aantal CPU's dat aan de container is toegewezen. | Zie vereisten voor vCPU en geheugentoewijzing |
resources.memory |
De hoeveelheid RAM die aan de container is toegewezen. | Zie vereisten voor vCPU en geheugentoewijzing |
volumeMounts |
Een matrix met definities voor volumekoppeling. | U kunt een tijdelijke of permanente opslagvolumes definiëren voor uw container. Zie Opslagkoppelingen gebruiken in Azure Container Apps voor meer informatie over opslagvolumes. |
probes |
Een matrix met statustests die zijn ingeschakeld in de container. | Zie Statustests in Azure Container Apps voor meer informatie over testinstellingen. |
Vereisten voor vCPU en geheugentoewijzing
Wanneer u het verbruiksabonnement gebruikt, moet het totale CPU- en geheugen dat is toegewezen aan alle containers in een container-app, een van de volgende combinaties toevoegen.
vCPU's (kernen) | Geheugen |
---|---|
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 |
Notitie
Apps die gebruikmaken van het verbruiksabonnement in een omgeving met alleen verbruik, zijn beperkt tot maximaal 2 kernen en 4Gi geheugen.
Meerdere containers
In geavanceerde scenario's kunt u meerdere containers uitvoeren in één container-app. Gebruik dit patroon alleen in specifieke gevallen waarin uw containers nauw zijn gekoppeld.
Voor de meeste microservicescenario's is de aanbevolen procedure om elke service als een afzonderlijke container-app te implementeren.
Meerdere containers in dezelfde container-app delen harde schijf- en netwerkbronnen en ervaren dezelfde toepassingslevenscyclus.
Er zijn twee manieren om extra containers uit te voeren in een container-app: sidecar-containers en init-containers.
Sidecar-containers
U kunt meerdere containers definiëren in één container-app om het sidecar-patroon te implementeren.
Voorbeelden van sidecarcontainers zijn:
Een agent die logboeken van de primaire app-container op een gedeeld volume leest en doorstuurt naar een logboekregistratieservice.
Een achtergrondproces waarmee een cache wordt vernieuwd die wordt gebruikt door de primaire app-container in een gedeeld volume.
Deze scenario's zijn voorbeelden en vertegenwoordigen niet de enige manieren waarop u een sidecar kunt implementeren.
Als u meerdere containers in een container-app wilt uitvoeren, voegt u meer dan één container toe in de containers
matrix van de container-app-sjabloon.
Init-containers
U kunt een of meer init-containers definiëren in een container-app. Init-containers worden uitgevoerd vóór de primaire app-container en worden gebruikt om initialisatietaken uit te voeren, zoals het downloaden van gegevens of het voorbereiden van de omgeving.
Init-containers worden gedefinieerd in de initContainers
matrix van de container-app-sjabloon. De containers worden uitgevoerd in de volgorde waarin ze zijn gedefinieerd in de matrix en moeten worden voltooid voordat de primaire app-container wordt gestart.
Notitie
Init-containers in apps die gebruikmaken van het Dedicated-plan of worden uitgevoerd in een omgeving met alleen verbruik, hebben tijdens runtime geen toegang tot beheerde identiteiten.
Containerregisters
U kunt installatiekopieën implementeren die worden gehost in privéregisters door referenties op te geven in de Container Apps-configuratie.
Als u een containerregister wilt gebruiken, definieert u het register in de registries
matrix in de properties.configuration
sectie van de resourcesjabloon voor de container-app. Het passwordSecretRef
veld identificeert de naam van het geheim in de secrets
matrixnaam waarin u het wachtwoord hebt gedefinieerd.
{
...
"registries": [{
"server": "docker.io",
"username": "my-registry-user-name",
"passwordSecretRef": "my-password-secret-name"
}]
}
Opgeslagen referenties worden gebruikt om een containerinstallatiekopie op te halen uit het privéregister wanneer uw app wordt geïmplementeerd.
In het volgende voorbeeld ziet u hoe u Azure Container Registry-referenties configureert in een container-app.
{
...
"configuration": {
"secrets": [
{
"name": "docker-hub-password",
"value": "my-docker-hub-password"
}
],
...
"registries": [
{
"server": "docker.io",
"username": "someuser",
"passwordSecretRef": "docker-hub-password"
}
]
}
}
Notitie
Docker Hub beperkt het aantal downloads van Docker-installatiekopieën. Wanneer de limiet is bereikt, kunnen containers in uw app niet worden gestart. Gebruik een register met voldoende limieten, zoals Azure Container Registry om dit probleem te voorkomen.
Beheerde identiteit met Azure Container Registry
U kunt een door Azure beheerde identiteit gebruiken om te verifiëren met Azure Container Registry in plaats van een gebruikersnaam en wachtwoord te gebruiken. Zie Beheerde identiteiten in Azure Container Apps voor meer informatie.
Als u een beheerde identiteit met een register wilt gebruiken, moet de identiteit zijn ingeschakeld in de app en moet deze rol in het register worden toegewezen acrPull
. Als u het register wilt configureren, gebruikt u de resource-id van de beheerde identiteit voor een door de gebruiker toegewezen identiteit of system
voor de door het systeem toegewezen identiteit in de identity
eigenschap van het register. Configureer geen gebruikersnaam en wachtwoord bij het gebruik van een beheerde identiteit.
{
"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"
}]
}
...
}
}
Zie Een door de gebruiker toegewezen identiteit toevoegen voor meer informatie over het configureren van door de gebruiker toegewezen identiteiten.
Beperkingen
Azure Container Apps heeft de volgende beperkingen:
Bevoegde containers: Azure Container Apps staat de modus voor bevoegde containers met toegang op hostniveau niet toe.
Besturingssysteem: containerinstallatiekopieën op basis van
linux/amd64
Linux zijn vereist.Maximale afbeeldingsgrootte:
- Het workloadprofiel Verbruik biedt ondersteuning voor containerinstallatiekopieën die maximaal 8 GB voor elke app of taakreplica in totaal bevatten.
- Toegewezen workloadprofielen ondersteunen grotere containerinstallatiekopieën. Omdat een Toegewezen workloadprofiel meerdere apps of taken kan uitvoeren, delen meerdere containerinstallatiekopieën de beschikbare schijfruimte. De werkelijke ondersteunde afbeeldingsgrootte varieert op basis van resources die door andere apps en taken worden gebruikt.