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: Kontejnery

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é:

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).

Další kroky