Kontenery w usłudze Azure Container Apps

Usługa Azure Container Apps zarządza szczegółami platformy Kubernetes i orkiestracji kontenerów. Kontenery w usłudze Azure Container Apps mogą korzystać z dowolnie wybranego środowiska uruchomieniowego, języka programowania lub stosu programowania.

Azure Container Apps: Containers

Usługa Azure Container Apps obsługuje:

  • Dowolny obraz kontenera x86-64 (linux/amd64) oparty na systemie Linux
  • Kontenery z dowolnego publicznego lub prywatnego rejestru kontenerów
  • Opcjonalne kontenery przyczepki i init

Funkcje obejmują również:

  • Aplikacje używają template sekcji konfiguracji, aby zdefiniować obraz kontenera i inne ustawienia. Zmiany w template sekcji konfiguracji wyzwalają nową poprawkę aplikacji kontenera.
  • Jeśli kontener ulegnie awarii, zostanie on automatycznie uruchomiony ponownie.

Funkcje zadań obejmują:

  • Wykonania zadań używają template sekcji konfiguracji, aby zdefiniować obraz kontenera i inne ustawienia po uruchomieniu każdego wykonania.
  • Jeśli kontener zakończy działanie z kodem zakończenia innego niż zero, wykonanie zadania zostanie oznaczone jako niepowodzenie. Zadanie można skonfigurować, aby ponowić próby wykonania nieudanych prób.

Konfigurowanie

Większość aplikacji kontenerów ma jeden kontener. W zaawansowanych scenariuszach aplikacja może również mieć kontenery przyczepki i inicjowania. W definicji aplikacji kontenera główna aplikacja i jej kontenery przyczepki są wymienione w containers tablicy w properties.template sekcji, a kontenery inicjowania są wyświetlane w tablicy initContainers . Poniższy fragment przedstawia dostępne opcje konfiguracji podczas konfigurowania kontenerów aplikacji.

{
  "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"
          }
        ]
      }
    ]
    ...
  }
  ...
}
Ustawienie opis Uwagi
image Nazwa obrazu kontenera dla aplikacji kontenera. Ta wartość ma postać repository/<IMAGE_NAME>:<TAG>.
name Przyjazna nazwa kontenera. Służy do raportowania i identyfikacji.
command Polecenie uruchamiania kontenera. Odpowiednik pola punktu wejścia platformy Docker.
args Uruchom argumenty poleceń. Wpisy w tablicy są połączone w celu utworzenia listy parametrów do przekazania do polecenia uruchamiania.
env Tablica par nazwa/wartość definiujących zmienne środowiskowe. Użyj secretRef zamiast value pola, aby odwołać się do wpisu tajnego.
resources.cpu Liczba procesorów CPU przydzielonych do kontenera. Zobacz wymagania dotyczące alokacji procesorów wirtualnych i pamięci
resources.memory Ilość pamięci RAM przydzielonej do kontenera. Zobacz wymagania dotyczące alokacji procesorów wirtualnych i pamięci
volumeMounts Tablica definicji instalacji woluminu. Można zdefiniować tymczasowe lub trwałe woluminy magazynu dla kontenera. Aby uzyskać więcej informacji na temat woluminów magazynu, zobacz Use storage mounts in Azure Container Apps (Używanie instalacji magazynu w usłudze Azure Container Apps).
probes Tablica sond kondycji włączona w kontenerze. Aby uzyskać więcej informacji na temat ustawień sond, zobacz Sondy kondycji w usłudze Azure Container Apps.

Wymagania dotyczące alokacji procesorów wirtualnych i pamięci

W przypadku korzystania z planu Zużycie łączna ilość procesora CPU i pamięci przydzielonej do wszystkich kontenerów w aplikacji kontenera musi zostać dodana do jednej z następujących kombinacji.

Procesory wirtualne (rdzenie) Pamięć
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

Uwaga

Aplikacje korzystające z planu Zużycie tylko w środowisku Zużycie są ograniczone do maksymalnie 2 rdzeni i 4Gi pamięci.

Wiele kontenerów

W zaawansowanych scenariuszach można uruchamiać wiele kontenerów w jednej aplikacji kontenera. Tego wzorca należy używać tylko w określonych wystąpieniach, w których kontenery są ściśle powiązane.

W przypadku większości scenariuszy mikrousług najlepszym rozwiązaniem jest wdrożenie każdej usługi jako oddzielnej aplikacji kontenera.

Wiele kontenerów w tej samej aplikacji kontenera współdzieli dysk twardy i zasoby sieciowe oraz środowisko tego samego cyklu życia aplikacji.

Istnieją dwa sposoby uruchamiania dodatkowych kontenerów w aplikacji kontenera: kontenery przyczepki i kontenery inicjowania.

Kontenery przyczepki

Aby zaimplementować wzorzec przyczepki, można zdefiniować wiele kontenerów w jednej aplikacji kontenera.

Przykłady kontenerów przyczepki obejmują:

  • Agent, który odczytuje dzienniki z podstawowego kontenera aplikacji na udostępnionym woluminie i przekazuje je do usługi rejestrowania.

  • Proces w tle, który odświeża pamięć podręczną używaną przez podstawowy kontener aplikacji w udostępnionym woluminie.

Te scenariusze są przykładami i nie reprezentują jedynych sposobów implementacji przyczepki.

Aby uruchomić wiele kontenerów w aplikacji kontenera, dodaj więcej niż jeden kontener w containers tablicy szablonu aplikacji kontenera.

Kontenery inicjowania

W aplikacji kontenera można zdefiniować co najmniej jeden kontener init. Kontenery inicjowania są uruchamiane przed kontenerem aplikacji podstawowej i są używane do wykonywania zadań inicjowania, takich jak pobieranie danych lub przygotowywanie środowiska.

Kontenery inicjowania są definiowane w initContainers tablicy szablonu aplikacji kontenera. Kontenery są uruchamiane w kolejności zdefiniowanej w tablicy i muszą zostać wykonane pomyślnie przed uruchomieniem podstawowego kontenera aplikacji.

Uwaga

Kontenery inicjowania w aplikacjach korzystające z planu dedykowanego lub uruchomione w środowisku Zużycie nie mogą uzyskać dostępu do tożsamości zarządzanej w czasie wykonywania.

Rejestry kontenerów

Obrazy hostowane w prywatnych rejestrach można wdrażać, podając poświadczenia w konfiguracji usługi Container Apps.

Aby użyć rejestru kontenerów, należy zdefiniować rejestr w tablicy w registries properties.configuration sekcji szablonu zasobu aplikacji kontenera. Pole passwordSecretRef identyfikuje nazwę wpisu tajnego w secrets nazwie tablicy, w której zdefiniowano hasło.

{
  ...
  "registries": [{
    "server": "docker.io",
    "username": "my-registry-user-name",
    "passwordSecretRef": "my-password-secret-name"
  }]
}

Zapisane poświadczenia są używane do ściągania obrazu kontenera z rejestru prywatnego podczas wdrażania aplikacji.

W poniższym przykładzie pokazano, jak skonfigurować poświadczenia usługi Azure Container Registry w aplikacji kontenera.

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

Uwaga

Usługa Docker Hub ogranicza liczbę pobrań obrazów platformy Docker. Po osiągnięciu limitu uruchamianie kontenerów w aplikacji zakończy się niepowodzeniem. Użyj rejestru z wystarczającymi limitami, takimi jak usługa Azure Container Registry , aby uniknąć tego problemu.

Tożsamość zarządzana za pomocą usługi Azure Container Registry

Tożsamość zarządzana platformy Azure umożliwia uwierzytelnianie za pomocą usługi Azure Container Registry zamiast używania nazwy użytkownika i hasła. Aby uzyskać więcej informacji, zobacz Tożsamości zarządzane w usłudze Azure Container Apps.

Aby można było używać tożsamości zarządzanej z rejestrem, tożsamość musi być włączona w aplikacji i musi mieć przypisaną acrPull rolę w rejestrze. Aby skonfigurować rejestr, użyj identyfikatora zasobu tożsamości zarządzanej dla tożsamości przypisanej przez użytkownika lub system tożsamości przypisanej przez system we identity właściwości rejestru. Nie konfiguruj nazwy użytkownika i hasła podczas korzystania z tożsamości zarządzanej.

{
    "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"
            }]
        }
        ...
    }
}

Aby uzyskać więcej informacji na temat konfigurowania tożsamości przypisanych przez użytkownika, zobacz Dodawanie tożsamości przypisanej przez użytkownika.

Ograniczenia

Usługa Azure Container Apps ma następujące ograniczenia:

  • Kontenery uprzywilejowane: usługa Azure Container Apps nie zezwala na tryb uprzywilejowanych kontenerów z dostępem na poziomie hosta.

  • System operacyjny: wymagane są obrazy kontenerów oparte na systemie Linux (linux/amd64).

  • Maksymalny rozmiar obrazu:

    • Profil obciążenia Zużycie obsługuje obrazy kontenerów łącznie do 8 GB dla każdej aplikacji lub repliki zadań.
    • Dedykowane profile obciążeń obsługują większe obrazy kontenerów. Ponieważ profil dedykowanego obciążenia może uruchamiać wiele aplikacji lub zadań, wiele obrazów kontenerów współużytkuje dostępne miejsce na dysku. Rzeczywisty obsługiwany rozmiar obrazu różni się w zależności od zasobów używanych przez inne aplikacje i zadania.

Następne kroki