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

Azure Container Apps podporuje:

  • Jakákoli image kontejneru x86-64linux/amd64 () se systémem Linux bez požadované základní image
  • Kontejnery z libovolného veřejného nebo privátního registru kontejneru
  • Sajdkárna a inicializační kontejnery

Mezi funkce patří:

  • 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

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 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ů klíč/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 U plánu Consumption musí hodnoty dodržovat následující pravidla:

• větší než nula
• menší než nebo rovno 2
• může být libovolné desetinné číslo (s maximálním počtem dvou desetinných míst)

Je například 1.25 platný, ale 1.555 je neplatný.
Výchozí hodnota je 0,25 procesorů na kontejner.

Pokud v plánu Dedicated použijete profil úlohy Consumption, platí stejná pravidla s výjimkou procesorů, která musí být menší nebo rovna 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 dodržovat následující pravidla:

• větší než nula
• menší než nebo rovno 4Gi
• může být libovolné desetinné číslo (s maximálním počtem dvou desetinných míst)

Je například 1.25Gi platný, ale 1.555Gi je neplatný.
Výchozí hodnota je 0.5Gi pro každý kontejner.

Při použití úlohy Consumption v plánu Dedicated platí stejná pravidla s výjimkou paměti 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, ve kterém je spuštěná aplikace kontejneru.
volumeMounts Pole definic připojení svazků. 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 v Azure Container Apps.

Při použití plánu Consumption nebo úlohy Consumption v plánu Dedicated musí celkové přidělení procesoru a paměti požadované pro všechny kontejnery v aplikaci kontejneru sčítat až jednu z následujících kombinací.

virtuální procesory (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 musí odpovídat hodnotě paměti ve sloupci paměti ve stejném řádku sloupce procesoru.

Pokud použijete profil Consumption v plánu Dedicated, celkové přidělení procesoru a paměti požadované pro všechny kontejnery v aplikaci kontejneru musí být menší než nebo rovno jaderm a paměti dostupným v profilu.

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.

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 v aplikaci kontejneru spustit více kontejnerů: 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 podporují vyžádání imagí pomocí spravovaných identit, ale procesy spuštěné v inicializačních kontejnerech 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 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": "acr-password",
        "value": "my-acr-password"
      }
    ],
    ...
    "registries": [
      {
        "server": "myacr.azurecr.io",
        "username": "someuser",
        "passwordSecretRef": "acr-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.

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

Další kroky