Udostępnij za pośrednictwem


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 bez wymaganego obrazu podstawowego
  • Kontenery z dowolnego publicznego lub prywatnego rejestru kontenerów
  • Kontenery przyczepki i init

Funkcje obejmują również:

  • 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

Poniższy kod jest przykładem containers tablicy w properties.template sekcji szablonu zasobu aplikacji kontenera. Fragment przedstawia dostępne opcje konfiguracji podczas konfigurowania kontenera.

{
  "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 klucz/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. W przypadku planu Zużycie wartości muszą być zgodne z następującymi regułami:

• większe niż zero
• mniejsze niż lub równe 2
• może być dowolną liczbą dziesiętną (z maksymalnie dwoma miejscami dziesiętnymi)

Na przykład jest prawidłowy, 1.25 ale 1.555 jest nieprawidłowy.
Wartość domyślna to 0,25 procesorów CPU na kontener.

Jeśli używasz profilu obciążenia Zużycie w ramach planu dedykowanego, mają zastosowanie te same reguły, z wyjątkiem procesorów CPU muszą być mniejsze lub równe 4.

W przypadku korzystania z planu dedykowanego maksymalna liczba procesorów CPU musi być mniejsza lub równa liczbie rdzeni dostępnych w profilu, w którym jest uruchomiona aplikacja kontenera.
resources.memory Ilość pamięci RAM przydzielonej do kontenera. W przypadku planu Zużycie wartości muszą być zgodne z następującymi regułami:

• większe niż zero
• mniejsze niż lub równe 4Gi
• może być dowolną liczbą dziesiętną (z maksymalnie dwoma miejscami dziesiętnymi)

Na przykład jest prawidłowy, 1.25Gi ale 1.555Gi jest nieprawidłowy.
Wartość domyślna to 0.5Gi na kontener.

Jeśli używasz obciążenia Zużycie w ramach planu dedykowanego, te same reguły mają zastosowanie z wyjątkiem pamięci musi być mniejsza lub równa 8Gi.

W przypadku korzystania z planu dedykowanego maksymalna ilość pamięci musi być mniejsza lub równa ilości pamięci dostępnej w profilu, w którym jest uruchomiona aplikacja kontenera.
volumeMounts Tablica definicji instalacji woluminu. Można zdefiniować wolumin tymczasowy lub wiele stałych woluminów 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. Ta funkcja jest oparta na sondach kondycji platformy Kubernetes. Aby uzyskać więcej informacji na temat ustawień sond, zobacz Sondy kondycji w usłudze Azure Container Apps.

Jeśli używasz planu Zużycie lub obciążenia Zużycie w ramach planu dedykowanego, łączna alokacja procesora CPU i pamięci żądana dla wszystkich kontenerów w aplikacji kontenera musi zostać dodana do jednej z następujących kombinacji.

Procesory wirtualne (rdzenie) Pamięć Plan Zużycie Profil obciążenia zużycie
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
  • Suma żądań procesora CPU we wszystkich kontenerach musi być zgodna z jedną z wartości w kolumnie procesorów wirtualnych.

  • Suma żądań pamięci we wszystkich kontenerach musi być zgodna z wartością pamięci w kolumnie pamięci w tym samym wierszu kolumny procesora CPU.

Jeśli używasz profilu Zużycie w planie dedykowanym, łączna alokacja procesora CPU i pamięci żądana dla wszystkich kontenerów w aplikacji kontenera musi być mniejsza lub równa rdzeniom i pamięci dostępnej w profilu.

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 wielu 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 obsługują ściąganie obrazów przy użyciu tożsamości zarządzanych, ale procesy działające w kontenerach inicjowania nie mają dostępu do tożsamości zarządzanych.

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ć wymagane pola w tablicy w registriesproperties.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": "acr-password",
        "value": "my-acr-password"
      }
    ],
    ...
    "registries": [
      {
        "server": "myacr.azurecr.io",
        "username": "someuser",
        "passwordSecretRef": "acr-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.

Podczas przypisywania tożsamości zarządzanej do rejestru 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.

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

Następne kroki