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-64linux/amd64 () založená na Linuxu
  • Kontejnery z libovolného veřejného nebo privátního registru kontejneru
  • Volitelné sajdkáře a inicializační kontejnery

Mezi funkce patří:

  • Aplikace používají template konfigurační oddíl k definování image kontejneru a dalších nastavení. Změny v oddílu template konfigurace aktivují novou revizi aplikace kontejneru.
  • Pokud dojde k chybovému ukončení kontejneru, automaticky se restartuje.

Mezi funkce úloh patří:

  • Spuštění úloh používají template konfigurační oddíl 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, označí se spuštění úlohy jako neúspěšné. Úlohu můžete nakonfigurovat tak, aby se zopakovala neúspěšná spuštění.

Konfigurace

Většina aplikací typu kontejner má jeden kontejner. V pokročilýchscénářch V definici aplikace kontejneru jsou hlavní aplikace a její kontejnery sajdkáře uvedené v containers poli v properties.template části a kontejnery inicializace jsou uvedeny v initContainers poli. Následující výňatek ukazuje dostupné možnosti konfigurace při nastavování kontejnerů aplikace.

{
  "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 vaši aplikaci kontejneru. Tato hodnota má formu 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ů název/hodnota, které definují proměnné prostředí. value Místo secretRef pole použijte odkaz na tajný kód.
resources.cpu Počet procesorů přidělených kontejneru Viz požadavky na přidělení virtuálních procesorů a paměti
resources.memory Množství paměti RAM přidělené kontejneru. Viz požadavky na přidělení virtuálních procesorů a paměti
volumeMounts Pole definic připojení svazků. Pro kontejner můžete definovat dočasné nebo trvalé svazky ú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 Další informace o nastavení sond najdete v tématu Sondy stavu v Azure Container Apps.

Požadavky na přidělení virtuálních procesorů a paměti

Při použití plánu Consumption se celkový počet procesorů a paměti přidělených všem kontejnerům v aplikaci kontejneru musí sčítat do jedné z následujících kombinací.

virtuální procesory (jádra) Memory (Paměť)
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

Poznámka:

Aplikace využívající plán Consumption pouze v prostředí Consumption jsou omezené na maximálně 2 jádra a 4Gi paměti.

Více kontejnerů

V pokročilých scénářích můžete v jedné aplikaci kontejneru spustit více kontejnerů. Tento vzor použijte pouze v konkrétních instancích, ve kterých jsou kontejnery úzce svázané.

Pro většinu scénářů mikroslužeb je osvědčeným postupem nasadit každou službu jako samostatnou aplikaci kontejneru.

Více kontejnerů ve stejné aplikaci kontejneru sdílí pevný disk a síťové prostředky a dochází ke stejnému životnímu cyklu aplikace.

Existují dva způsoby, jak v aplikaci kontejneru spouštět další kontejnery: kontejnery sajdkáře a inicializační kontejnery.

Kontejnery sajdkáře

V jedné aplikaci kontejneru můžete definovat více kontejnerů pro implementaci vzoru sajdkáře.

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 do služby 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áře.

Pokud chcete v aplikaci kontejneru spustit více kontejnerů, přidejte do pole šablony aplikace kontejneru více kontejnerů containers .

Inicializační kontejnery

V aplikaci kontejneru můžete definovat jeden nebo více inicializačních kontejnerů . Inicializační kontejnery 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 definovány v initContainers poli šablony aplikace kontejneru. Kontejnery běží v pořadí, v jakém jsou definovány v poli, a musí se úspěšně dokončit před spuštěním primárního kontejneru aplikace.

Poznámka:

Inicializační kontejnery v aplikacích používajících vyhrazený plán nebo spuštěné pouze v prostředí Consumption nemají přístup ke spravované identitě za běhu.

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 registr 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 slouží k načtení image kontejneru z privátního registru při nasazení vaší aplikace.

Následující příklad ukazuje, jak nakonfigurovat přihlašovací údaje služby Azure Container Registry v aplikaci kontejneru.

{
  ...
  "configuration": {
    "secrets": [
      {
        "name": "docker-hub-password",
        "value": "my-docker-hub-password"
      }
    ],
    ...
    "registries": [
      {
        "server": "docker.io",
        "username": "someuser",
        "passwordSecretRef": "docker-hub-password"
      }
    ]
  }
}

Poznámka:

Docker Hub omezuje počet stahování imagí Dockeru. Po dosažení limitu se kontejnery ve vaší aplikaci nespustí. Pokud se chcete tomuto problému vyhnout, použijte registr s dostatečnými limity, jako je Azure Container Registry .

Spravovaná identita se službou Azure Container Registry

Spravovanou identitu Azure můžete použít k ověření ve službě Azure Container Registry místo použití uživatelského jména a hesla. Další informace najdete v tématu Spravované identity v Azure Container Apps.

Pokud chcete používat spravovanou identitu s registrem, musí být v aplikaci povolená identita a musí mít přiřazenou acrPull roli v registru. Ke konfiguraci registru použijte ID prostředku spravované identity pro identitu přiřazenou uživatelem nebo system pro identitu přiřazenou systémem ve identity vlastnosti registru. Při použití spravované identity nekonfigurujte uživatelské jméno a heslo.

{
    "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 neumožňuje režim privilegovaných kontejnerů s přístupem na úrovni hostitele.

  • Operační systém: Vyžadují se image kontejnerů založené na Linuxu (linux/amd64).

  • Maximální velikost obrázku:

    • Profil úlohy Consumption podporuje image kontejnerů celkem až 8 GB pro každou aplikaci nebo repliku úlohy.
    • Vyhrazené profily úloh podporují větší image kontejnerů. Vzhledem k tomu, že profil vyhrazené úlohy může spouštět více aplikací nebo úloh, sdílí několik imagí kontejnerů dostupné místo na disku. Skutečná podporovaná velikost image se liší v závislosti na prostředcích využívaných jinými aplikacemi a úlohami.

Další kroky