Kontejnery v Azure Container Apps
Azure Container Apps za vás spravuje podrobnosti o orchestraci Kubernetes a kontejnerů. Kontejnery ve službě Azure Container Apps můžou využívat jakýkoli modul runtime a programovací jazyk nebo libovolnou vývojovou sadu.
Azure Container Apps podporuje:
- Libovolná image kontejneru x86-64 (
linux/amd64
) se systémem Linux bez požadované základní image - Kontejnery z libovolného veřejného nebo privátního registru kontejnerů
- Kontejnery sidecar a init
Mezi funkce patří také:
- Změny v oddílu
template
konfigurace aktivují revizi nové aplikace kontejneru. - Pokud dojde k chybovému ukončení kontejneru, automaticky se restartuje.
Mezi funkce úloh patří:
- Spuštění úloh používají
template
část konfigurace k definování image kontejneru a dalších nastavení při každém spuštění. - Pokud se kontejner ukončí s nenulovým ukončovacím kódem, spuštění úlohy se označí jako neúspěšné. Úlohu můžete nakonfigurovat tak, aby se zopakovala neúspěšná spuštění.
Konfigurace
Následující kód je příkladem containers
pole v properties.template
části šablony prostředku aplikace kontejneru. Výňatek ukazuje dostupné možnosti konfigurace při nastavování kontejneru.
{
"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"
}
]
}
]
...
}
...
}
Nastavení | Popis | Poznámky |
---|---|---|
image |
Název image kontejneru pro aplikaci kontejneru. | Tato hodnota má tvar repository/<IMAGE_NAME>:<TAG> . |
name |
Popisný název kontejneru | Používá se k vytváření sestav a identifikaci. |
command |
Spouštěcí příkaz kontejneru | Ekvivalent pole vstupního bodu Dockeru |
args |
Spusťte argumenty příkazu. | Položky v poli jsou spojeny dohromady a vytvoří seznam parametrů, který se předá spouštěcímu příkazu. |
env |
Pole párů klíč/hodnota, které definují proměnné prostředí. | value Místo pole použijte secretRef odkaz na tajný kód. |
resources.cpu |
Počet procesorů přidělených kontejneru. | U plánu Consumption musí hodnoty splňovat následující pravidla: • větší než nula • menší než nebo rovno 2 • může být libovolné desetinné číslo (maximálně dvě desetinná místa). Například 1.25 je platný, ale 1.555 je neplatný.Výchozí hodnota je 0,25 procesorů na kontejner. Při použití profilu úlohy Consumption v plánu Dedicated platí stejná pravidla, s výjimkou procesorů musí být menší nebo roven 4. Při použití plánu Dedicated musí být maximální počet procesorů menší nebo roven počtu jader dostupných v profilu, ve kterém je aplikace kontejneru spuštěná. |
resources.memory |
Množství paměti RAM přidělené kontejneru | U plánu Consumption musí hodnoty splňovat následující pravidla: • větší než nula • menší než nebo rovno 4Gi • může být libovolné desetinné číslo (maximálně dvě desetinná místa). Například 1.25Gi je platný, ale 1.555Gi je neplatný.Výchozí hodnota je 0.5Gi na kontejner.Pokud použijete úlohu Consumption v plánu Dedicated, platí stejná pravidla s tím rozdílem, že paměť musí být menší nebo rovna 8Gi .Při použití plánu Dedicated musí být maximální paměť menší nebo rovna množství paměti dostupné v profilu, na kterém je spuštěná aplikace kontejneru. |
volumeMounts |
Pole definic připojení svazku. | Pro kontejner můžete definovat dočasný svazek nebo několik trvalých svazků úložiště. Další informace o svazcích úložiště najdete v tématu Použití připojení úložiště v Azure Container Apps. |
probes |
Pole sond stavu povolené v kontejneru. | Tato funkce je založená na sondách stavu Kubernetes. Další informace o nastavení sond najdete v tématu Sondy stavu ve službě Azure Container Apps. |
Pokud v plánu Dedicated použijete plán Consumption nebo úlohu Consumption, musí se celkové přidělení procesoru a paměti požadované pro všechny kontejnery v aplikaci kontejneru sčítat do jedné z následujících kombinací.
vCPU (jádra) | Memory (Paměť) | Plán Consumption | Profil úlohy Consumption |
---|---|---|---|
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 |
✔ |
Celkový počet požadavků procesoru ve všech kontejnerech se musí shodovat s jednou z hodnot ve sloupci vCPU .
Celkový počet požadavků na paměť ve všech kontejnerech se musí shodovat s hodnotou paměti ve sloupci paměť ve stejném řádku sloupce CPU.
Pokud použijete profil Consumption v plánu Dedicated, musí být celkové přidělení procesoru a paměti požadované pro všechny kontejnery v aplikaci kontejneru menší nebo roven jádrům a paměti, které jsou k dispozici v profilu.
Více kontejnerů
V pokročilých scénářích můžete v jedné aplikaci kontejneru spouštět několik kontejnerů. Tento vzor použijte jenom v konkrétních případech, kdy jsou kontejnery úzce propojené.
Pro většinu scénářů mikroslužeb je osvědčeným postupem nasadit každou službu jako samostatnou aplikaci kontejneru.
Několik kontejnerů ve stejné aplikaci kontejneru sdílí pevný disk a síťové prostředky a má stejný životní cyklus aplikace.
Existují dva způsoby, jak spustit více kontejnerů v aplikaci kontejneru: kontejnery sidecar a kontejnery inicializační.
Kontejnery sajdkár
V jedné aplikaci kontejneru můžete definovat několik kontejnerů a implementovat tak model sajdkár.
Mezi příklady kontejnerů sajdkár patří:
Agent, který čte protokoly z primárního kontejneru aplikace na sdíleném svazku a předává je službě protokolování.
Proces na pozadí, který aktualizuje mezipaměť používanou primárním kontejnerem aplikace ve sdíleném svazku.
Tyto scénáře jsou příklady a nepředstavují jediný způsob implementace sajdkáry.
Pokud chcete v aplikaci kontejneru spustit více kontejnerů, přidejte do containers
pole šablony aplikace kontejneru více než jeden kontejner.
Kontejnery Init
V aplikaci kontejneru můžete definovat jeden nebo více inicializačních kontejnerů . Kontejnery inicializace běží před primárním kontejnerem aplikace a používají se k provádění inicializačních úloh, jako je stahování dat nebo příprava prostředí.
Inicializační kontejnery jsou definované v initContainers
poli šablony aplikace kontejneru. Kontejnery běží v pořadí, ve kterém jsou definované v poli, a musí se úspěšně dokončit před spuštěním primárního kontejneru aplikace.
Poznámka
Kontejnery inicializačních zařízení podporují načítání imagí pomocí spravovaných identit, ale procesy spuštěné v kontejnerech init nemají přístup ke spravovaným identitám.
Registry kontejnerů
Image hostované v privátních registrech můžete nasadit zadáním přihlašovacích údajů v konfiguraci Container Apps.
Pokud chcete použít registr kontejneru, definujete požadovaná pole v registries
poli v properties.configuration
části šablony prostředku aplikace kontejneru. Pole passwordSecretRef
identifikuje název tajného kódu v secrets
názvu pole, ve kterém jste definovali heslo.
{
...
"registries": [{
"server": "docker.io",
"username": "my-registry-user-name",
"passwordSecretRef": "my-password-secret-name"
}]
}
Uložené přihlašovací údaje se používají k načtení image kontejneru z privátního registru při nasazení aplikace.
Následující příklad ukazuje, jak nakonfigurovat přihlašovací údaje Azure Container Registry v aplikaci kontejneru.
{
...
"configuration": {
"secrets": [
{
"name": "acr-password",
"value": "my-acr-password"
}
],
...
"registries": [
{
"server": "myacr.azurecr.io",
"username": "someuser",
"passwordSecretRef": "acr-password"
}
]
}
}
Poznámka
Docker Hub omezí počet stažených imagí Dockeru. Po dosažení limitu se nepodaří spustit kontejnery ve vaší aplikaci. Pokud chcete tomuto problému zabránit, použijte registr s dostatečnými omezeními, například Azure Container Registry.
Spravovaná identita s Azure Container Registry
Místo použití uživatelského jména a hesla můžete k ověřování pomocí Azure Container Registry použít spravovanou identitu Azure. Další informace najdete v tématu Spravované identity v Azure Container Apps.
Při přiřazování spravované identity k registru použijte ID prostředku spravované identity pro identitu přiřazenou uživatelem nebo system
pro identitu přiřazenou systémem.
{
"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"
}]
}
...
}
}
Další informace o konfiguraci identit přiřazených uživatelem najdete v tématu Přidání identity přiřazené uživatelem.
Omezení
Azure Container Apps má následující omezení:
Privilegované kontejnery: Azure Container Apps nemůže spouštět privilegované kontejnery. Pokud se program pokusí spustit proces, který vyžaduje přístup uživatele root, dojde v aplikaci v kontejneru k chybě za běhu.
Operační systém: Vyžadují se image kontejnerů založené na Linuxu (
linux/amd64
).