Montaże pamięci masowej w Azure Container Apps

Aplikacja kontenera ma dostęp do różnych typów przestrzeni dyskowej. W razie potrzeby pojedyncza aplikacja może korzystać z więcej niż jednego typu pamięci masowej.

Uwaga / Notatka

Unikaj używania znaków specjalnych w nazwach woluminów, aby zapobiec niepowodzeniom wdrożenia. Na przykład nazwany credentials.json wolumin zawiera znak specjalny (.), który powoduje błąd wdrożenia.

Typ magazynu Opis Wytrwałość Przykład użycia
Magazyn przestrzeni kontenera Przestrzeń efemeryczna dostępna dla działającego kontenera Dane są dostępne do momentu zamknięcia kontenera Zapisywanie lokalnej pamięci podręcznej aplikacji.
Magazyn o zakresie repliki Magazyn efemeryczny do udostępniania plików między kontenerami w tej samej replice Dane są dostępne do momentu zamknięcia repliki Główny kontener aplikacji zapisujący pliki dziennika przetwarzane przez kontener przyczepki.
Azure Files Trwałe przechowywanie Dane są utrwalane do Azure Files Zapisywanie plików w udziale plików w celu udostępnienia danych innym systemom.

Uwaga / Notatka

Azure Container Apps nie obsługuje instalowania udziałów plików z Azure NetApp Files ani Azure Blob Storage.

Pamięć tymczasowa

Aplikacja kontenera może odczytywać i zapisywać dane tymczasowe w magazynie efemerycznym. Magazyn efemeryczny może być ograniczony do kontenera lub repliki. Łączna ilość pamięci ograniczonej do kontenera i repliki dostępna dla każdej repliki zależy od łącznej liczby procesorów wirtualnych przydzielonych każdej replice.

wirtualne jednostki centralne przetwarzania (vCPUs) Całkowite tymczasowe magazynowanie
0,25 lub mniej 1 GiB
0,5 lub mniej 2 GiB
1 lub mniej 4 GiB
Ponad 1 8 GiB

Przechowywanie o zakresie kontenera

Kontener może zapisywać dane we własnym systemie plików.

Przechowywanie systemu plików kontenera ma następujące cechy:

  • Magazyn jest tymczasowy i zniknie po zamknięciu lub ponownym uruchomieniu kontenera.
  • Tylko procesy uruchomione w bieżącym kontenerze mogą wyświetlać pliki zapisane w tym magazynie.

Magazyn o zakresie repliki

Możesz zainstalować efemeryczny, tymczasowy wolumin, który jest odpowiednikiem emptyDir (pusty katalog) na platformie Kubernetes. Przechowywanie jest ograniczone do jednej repliki. Użyj woluminu EmptyDir , aby udostępnić dane między kontenerami w tej samej replice.

Magazyn przeznaczony dla repliki ma następujące cechy:

  • Pliki są utrwalane przez okres istnienia repliki.
    • Jeśli kontener w replice zostanie uruchomiony ponownie, pliki w woluminie pozostaną.
  • Wszystkie kontenery init lub aplikacji w replice mogą instalować ten sam wolumin.
  • Kontener może instalować wiele EmptyDir woluminów.

Aby skonfigurować pamięć o zakresie repliki, najpierw zdefiniuj wolumin EmptyDir w wersji. Następnie zdefiniuj podłączenie wolumenu w jednym lub kilku kontenerach w rewizji.

Wymagania wstępne

Wymaganie Instrukcje
konto Azure Jeśli go nie masz, utwórz bezpłatne konto.
środowisko Azure Container Apps Utwórz środowisko aplikacji kontenera.
Konfiguracja tożsamości zarządzanej Upewnij się, że tożsamość zarządzana skojarzona ze środowiskiem usługi Container Apps jest przypisana do odpowiednich ról, aby uzyskać dostęp do Azure Files.

Konfiguracja

Podczas konfigurowania magazynu ograniczonego do repliki przy użyciu Azure CLI, należy użyć definicji YAML do utworzenia lub zaktualizowania aplikacji kontenerowej.

  1. Aby zaktualizować istniejącą aplikację kontenera do używania pamięci ze zasięgiem repliki, wyeksportuj specyfikację aplikacji do pliku YAML o nazwie app.yaml.

    az containerapp show -n <APP_NAME> -g <RESOURCE_GROUP_NAME> -o yaml > app.yaml
    
  2. Wprowadź następujące zmiany w specyfikacji aplikacji kontenera.

    • Dodaj tablicę volumestemplate do sekcji definicji aplikacji kontenera i zdefiniuj wolumin. Jeśli masz już tablicę volumes , dodaj do niej nowy wolumin.
      • name jest identyfikatorem woluminu.
      • Użyj EmptyDir jako .storageType
    • Dla każdego kontenera w szablonie, w którym chcesz zamontować wolumin, zdefiniuj punkt montowania woluminu w tablicy volumeMounts definicji kontenera.
      • Nazwa volumeName jest zdefiniowana w tablicy volumes.
      • Jest to mountPath ścieżka w kontenerze, na której ma zostać zamontowany wolumin.
    properties:
      managedEnvironmentId: /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP_NAME>/providers/Microsoft.App/managedEnvironments/<ENVIRONMENT_NAME>
      configuration:
        activeRevisionsMode: Single
      template:
        containers:
        - image: <IMAGE_NAME1>
          name: my-container-1
          volumeMounts:
          - mountPath: /myempty
            volumeName: myempty
        - image: <IMAGE_NAME_2>
          name: my-container-2
          volumeMounts:
          - mountPath: /myempty
            volumeName: myempty
        volumes:
        - name: myempty
          storageType: EmptyDir
    
  3. Zaktualizuj aplikację kontenera przy użyciu pliku YAML.

    az containerapp update --name <APP_NAME> --resource-group <RESOURCE_GROUP_NAME> \
        --yaml app.yaml
    

Pełny przykład można znaleźć w specyfikacji YAML.

Aby utworzyć wolumin ograniczony do repliki i zainstalować go w kontenerze, wprowadź następujące zmiany w zasobie aplikacji kontenerowej w szablonie ARM.

  • Dodaj tablicę volumestemplate do sekcji definicji aplikacji kontenera i zdefiniuj wolumin. Jeśli masz już tablicę volumes , dodaj do niej nowy wolumin.
    • name jest identyfikatorem woluminu.
    • Użyj EmptyDir jako .storageType
  • Dla każdego kontenera w szablonie, w którym chcesz zamontować wolumin, zdefiniuj punkt montowania woluminu w tablicy volumeMounts definicji kontenera.
    • Nazwa volumeName jest zdefiniowana w tablicy volumes.
    • Jest to mountPath ścieżka w kontenerze, na której ma zostać zamontowany wolumin.

Przykładowy fragment kodu szablonu ARM:

{
  "apiVersion": "2022-03-01",
  "type": "Microsoft.App/containerApps",
  "name": "[parameters('containerappName')]",
  "location": "[parameters('location')]",
  "properties": {

    ...

    "template": {
      "revisionSuffix": "myrevision",
      "containers": [
        {
          "name": "main",
          "image": "[parameters('container_image')]",
          "resources": {
            "cpu": 0.5,
            "memory": "1Gi"
          },
          "volumeMounts": [
            {
              "mountPath": "/myempty",
              "volumeName": "myempty"
            }
          ]
        },
        {
          "name": "sidecar",
          "image": "[parameters('sidecar_image')]",
          "resources": {
            "cpu": 0.5,
            "memory": "1Gi"
          },
          "volumeMounts": [
            {
              "mountPath": "/myempty",
              "volumeName": "myempty"
            }
          ]
        }
      ],
      "scale": {
        "minReplicas": 1,
        "maxReplicas": 3
      },
      "volumes": [
        {
          "name": "myempty",
          "storageType": "EmptyDir"
        }
      ]
    }
  }
}

Zobacz specyfikację API szablonu ARM dla pełnego przykładu.

Aby utworzyć wolumin o zakresie repliki i zainstalować go w kontenerze, wdróż nową poprawkę aplikacji kontenera przy użyciu portalu Azure.

  1. W portalu Azure przejdź do aplikacji kontenera.

  2. Wybierz Zarządzanie wersjami w menu po lewej stronie.

  3. Wybierz pozycję Utwórz nową poprawkę.

  4. Wybierz kontener, w którym chcesz zainstalować wolumin.

  5. W okienku kontekstu Edytowanie kontenera wybierz kartę Punkty montowania woluminów.

  6. W sekcji Magazyn efemeryczny utwórz nowy wolumin z następującymi informacjami:

    • Nazwa woluminu: nazwa woluminu efemerycznego.
    • Ścieżka montowania: ścieżka bezwzględna w kontenerze do zamontowania woluminu.
  7. Wybierz pozycję Zapisz , aby zapisać zmiany i zamknąć okienko kontekstowe.

  8. Wybierz pozycję Utwórz , aby utworzyć nową poprawkę.

wolumin Azure Files

Możesz zamontować udział plików z Azure Files jako wolumin w kontenerze.

Usługa Azure Files ma następujące charakterystyki:

  • Pliki zapisane w lokalizacji instalacji są utrwalane w udziale plików.
  • Pliki w udziale są dostępne za pośrednictwem lokalizacji instalacji.
  • Wiele kontenerów może instalować ten sam udział plików, w tym te, które znajdują się w innej replice, poprawce lub aplikacji kontenera.
  • Wszystkie kontenery, które instalują udział, mogą uzyskiwać dostęp do plików zapisanych przez dowolny inny kontener lub metodę.
  • W jednym kontenerze można montować więcej niż jeden wolumin Azure Files.

Azure Files obsługuje protokoły SMB (blok komunikatów serwera) i NFS (system plików sieciowych). Udział Azure Files można zainstalować przy użyciu dowolnego protokołu. Udział plików zdefiniowany w środowisku musi być skonfigurowany przy użyciu tego samego protokołu, który jest używany przez udział plików na koncie przechowywania.

Aby włączyć magazyn Azure Files w kontenerze, należy skonfigurować środowisko i aplikację kontenera w następujący sposób:

W portalu Azure otwórz aplikację Container App.
W panelu nawigacyjnym po lewej stronie, w obszarze Ustawienia, wybierz Punkty montowania pamięci.

W tym miejscu możesz dodać nowy punkt montowania:

  1. Wybierz typ magazynu (Azure Udział plików lub Azure Blob).
  2. Podaj wymaganą konfigurację (konto magazynu, nazwa udziału, tryb dostępu).
  3. Zapisz montaż.
  4. Utwórz i wdróż nową wersję aplikacji kontenerowej, aby zastosować zmiany.
  • Utwórz definicję magazynu w środowisku usługi Container Apps.
  • Jeśli używasz systemu plików NFS, środowisko musi być skonfigurowane przy użyciu niestandardowej sieci wirtualnej, a konto magazynu musi być skonfigurowane tak, aby zezwalać na dostęp z sieci wirtualnej. Aby uzyskać więcej informacji, zobacz udziały plików NFS w Azure Files.
  • Jeśli środowisko jest skonfigurowane przy użyciu niestandardowej sieci wirtualnej, musisz zezwolić na porty 445 i 2049 w sieciowej grupie zabezpieczeń skojarzonej z podsiecią.
  • Zdefiniuj wolumin typu AzureFile (SMB) lub NfsAzureFile (NFS) w poprawce.
  • Zdefiniuj montowanie wolumenu w jednym lub kilku kontenerach w rewizji.
  • Używane konto magazynu Azure Files musi być dostępne z sieci wirtualnej aplikacji kontenera. Aby uzyskać więcej informacji, zobacz Udzielanie dostępu z sieci wirtualnej.

Wymagania wstępne

Wymaganie Instrukcje
konto Azure Jeśli go nie masz, utwórz bezpłatne konto.
Konto usługi Azure Storage Utwórz konto magazynowe.
środowisko Azure Container Apps Utwórz środowisko aplikacji kontenera.

Konfiguracja

Podczas konfigurowania aplikacji kontenera do instalowania woluminu Azure Files przy użyciu Azure CLI należy użyć definicji YAML do utworzenia lub zaktualizowania aplikacji kontenera.

Aby zapoznać się z samouczkiem krok po kroku dotyczącym instalowania udziału plików SMB, zobacz Tworzenie instalacji magazynu Azure Files w Azure Container Apps.

  1. Dodaj definicję magazynu do środowiska usługi Container Apps.

    az containerapp env storage set --name my-env --resource-group my-group \
        --storage-name mystorage \
        --storage-type AzureFile \
        --azure-file-account-name <STORAGE_ACCOUNT_NAME> \
        --azure-file-account-key <STORAGE_ACCOUNT_KEY> \
        --azure-file-share-name <STORAGE_SHARE_NAME> \
        --access-mode ReadWrite
    

    Zastąp <STORAGE_ACCOUNT_NAME> i <STORAGE_ACCOUNT_KEY> nazwą i kluczem konta przechowywania. Zastąp <STORAGE_SHARE_NAME> nazwą udziału plików na koncie magazynowym.

    Prawidłowe wartości dla --access-mode to i ReadWriteReadOnly.

  2. Aby zaktualizować istniejącą aplikację kontenera w celu zainstalowania udziału plików, wyeksportuj specyfikację aplikacji do pliku YAML o nazwie app.yaml.

    az containerapp show -n <APP_NAME> -g <RESOURCE_GROUP_NAME> -o yaml > app.yaml
    
  3. Wprowadź następujące zmiany w specyfikacji aplikacji kontenera.

    • Dodaj tablicę volumestemplate do sekcji definicji aplikacji kontenera i zdefiniuj wolumin. Jeśli masz już tablicę volumes , dodaj do niej nowy wolumin.
      • name jest identyfikatorem woluminu.
      • W przypadku storageType użyj AzureFile dla SMB lub NfsAzureFile dla NFS. Ta wartość musi być zgodna z typem magazynu zdefiniowanym w środowisku.
      • W przypadku storageName użyj nazwy przechowywania zdefiniowanego w środowisku.
      • Jest to mountOptions oddzielony przecinkami ciąg opcji montowania. Aby uzyskać więcej informacji, zobacz Użyj ustawienia mountOptions w Azure Files.
      • Lista secrets to lista tajnych danych do zamontowania w woluminie. Aby uzyskać więcej informacji, zobacz Instalowanie tajemnic w woluminie.
    • Dla każdego kontenera w szablonie, który ma korzystać z magazynu Azure Files, zdefiniuj zamontowanie woluminu w definicji kontenera tablicy volumeMounts.
      • Nazwa volumeName jest zdefiniowana w tablicy volumes.
      • Jest to mountPath ścieżka w kontenerze, na której ma zostać zamontowany wolumin.
      • subPath to ścieżka w woluminie do zamontowania. Jeśli nie określisz tej wartości, katalog główny woluminu zostanie zainstalowany. Aby uzyskać więcej informacji, zobacz (#sub-path).
    properties:
      managedEnvironmentId: /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP_NAME>/providers/Microsoft.App/managedEnvironments/<ENVIRONMENT_NAME>
      configuration:
      template:
        containers:
        - image: <IMAGE_NAME>
          name: my-container
          volumeMounts:
          - volumeName: azure-files-volume
            mountPath: /my-files
            subPath: my-sub-path
        volumes:
        - name: azure-files-volume
          storageType: AzureFile
          storageName: mystorage
    
  4. Zaktualizuj aplikację kontenera przy użyciu pliku YAML.

    az containerapp update --name <APP_NAME> --resource-group <RESOURCE_GROUP_NAME> \
        --yaml app.yaml
    

Pełny przykład można znaleźć w specyfikacji YAML.

Poniższe fragmenty szablonów ARM pokazują, jak dodać udział Azure Files do środowiska aplikacji kontenerowych i jak używać go w aplikacjach kontenerowych.

  1. Dodaj zasób podrzędny storages do środowiska usługi Container Apps.

    {
      "type": "Microsoft.App/managedEnvironments",
      "apiVersion": "2022-03-01",
      "name": "[parameters('environment_name')]",
      "location": "[parameters('location')]",
      "properties": {
        "daprAIInstrumentationKey": "[parameters('dapr_ai_instrumentation_key')]",
        "appLogsConfiguration": {
          "destination": "log-analytics",
          "logAnalyticsConfiguration": {
            "customerId": "[parameters('log_analytics_customer_id')]",
            "sharedKey": "[parameters('log_analytics_shared_key')]"
          }
        }
      },
      "resources": [
        {
          "type": "storages",
          "name": "myazurefiles",
          "apiVersion": "2022-03-01",
          "dependsOn": [
            "[resourceId('Microsoft.App/managedEnvironments', parameters('environment_name'))]"
          ],
          "properties": {
            "azureFile": {
              "accountName": "[parameters('storage_account_name')]",
              "accountKey": "[parameters('storage_account_key')]",
              "shareName": "[parameters('storage_share_name')]",
              "accessMode": "ReadWrite"
            }
          }
        }
      ]
    }
    
  2. Zaktualizuj zasób aplikacji kontenera, aby dodać wolumin i punkt montowania woluminu.

    {
      "apiVersion": "2023-05-01",
      "type": "Microsoft.App/containerApps",
      "name": "[parameters('containerappName')]",
      "location": "[parameters('location')]",
      "properties": {
    
        ...
    
        "template": {
          "revisionSuffix": "myrevision",
          "containers": [
            {
              "name": "main",
              "image": "[parameters('container_image')]",
              "resources": {
                "cpu": 0.5,
                "memory": "1Gi"
              },
              "volumeMounts": [
                {
                  "mountPath": "/myfiles",
                  "volumeName": "azure-files-volume",
                  "subPath": "my-sub-path"
                }
              ]
            }
          ],
          "scale": {
            "minReplicas": 1,
            "maxReplicas": 3
          },
          "volumes": [
            {
              "name": "azure-files-volume",
              "storageType": "AzureFile",
              "storageName": "myazurefiles"
            }
          ]
        }
      }
    }
    
    • Dodaj tablicę volumestemplate do sekcji definicji aplikacji kontenera i zdefiniuj wolumin. Jeśli masz już tablicę volumes , dodaj do niej nowy wolumin.
      • name jest identyfikatorem woluminu.
      • W przypadku storageType użyj AzureFile dla SMB lub NfsAzureFile dla NFS. Ta wartość musi być zgodna z typem magazynu zdefiniowanym w środowisku.
      • W przypadku storageName użyj nazwy przechowywania zdefiniowanego w środowisku.
      • Jest to mountOptions oddzielony przecinkami ciąg opcji montowania. Aby uzyskać więcej informacji, zobacz Użyj ustawienia mountOptions w Azure Files.
      • Lista secrets to lista tajnych danych do zamontowania w woluminie. Aby uzyskać więcej informacji, zobacz Instalowanie tajemnic w woluminie.
    • Dla każdego kontenera w szablonie, który ma korzystać z magazynu Azure Files, zdefiniuj zamontowanie woluminu w definicji kontenera tablicy volumeMounts.
      • Nazwa volumeName jest zdefiniowana w tablicy volumes.
      • Jest to mountPath ścieżka w kontenerze, na której ma zostać zamontowany wolumin.
      • Wartość subPath (opcjonalna) to ścieżka w woluminie do zainstalowania. Jeśli nie określisz go, katalog główny woluminu zostanie zainstalowany. Aby uzyskać więcej informacji, zobacz (#sub-path).

Zobacz specyfikację API szablonu ARM dla pełnego przykładu.

Aby skonfigurować montowanie woluminu dla magazynu Azure Files w portalu Azure, dodaj udział plików do środowiska usługi Container Apps, a następnie dodaj montowanie woluminu do aplikacji kontenera, tworząc nową rewizję.

  1. W portalu Azure przejdź do środowiska usługi Container Apps.

  2. W okienku nawigacji w obszarze Ustawienia wybierz pozycję Instalacja woluminu.

  3. Wybierz Dodaj.

  4. Wybierz protokół Server Message Block (SMB) lub Network File System (NFS), w zależności od używanego przez twoje udostępnienie plików.

  5. W okienku kontekstowym Dodawanie udziału plików wprowadź następujące informacje:

    • Nazwa: Nazwa udziału plikowego.
    • Nazwa konta magazynowego: Nazwa konta magazynowego, które zawiera zasób plików.
    • Klucz konta magazynu: klucz dostępu dla konta magazynu.
    • Udział plików: nazwa udziału plików.
    • Tryb dostępu: tryb dostępu do zasobu udostępnionego. Prawidłowe wartości to Odczyt/Zapis i Tylko do odczytu.
  6. Wybierz pozycję Dodaj , aby zamknąć okienko kontekstowe.

  7. Wybierz pozycję Zapisz , aby zatwierdzić zmiany.

  8. Przejdź do aplikacji kontenera.

  9. W okienku nawigacji w obszarze Aplikacja wybierz pozycję Poprawki i repliki.

  10. Wybierz pozycję Utwórz nową poprawkę.

  11. Na stronie Tworzenie i wdrażanie nowej poprawki wybierz kartę Woluminy .

  12. Wybierz Dodaj.

  13. W okienku Dodaj wolumin ustaw następujące wartości.

    • typ woluminu: Azure plików wolumin.
    • Nazwa: Wprowadź nazwę woluminu.
    • Nazwa udziału plików: wybierz utworzony wcześniej udział plików.
    • Opcje montowania: Opcjonalnie wprowadź oddzielony przecinkami ciąg opcji montowania. Aby uzyskać więcej informacji, zobacz Użyj ustawienia mountOptions w Azure Files.
  14. Wybierz pozycję Dodaj , aby zamknąć okienko kontekstowe.

  15. Na stronie Tworzenie i ponowne stosowanie nowej poprawki wybierz kartę Kontener .

  16. Wybierz kontener, w którym chcesz zamontować wolumin.

  17. W okienku kontekstu Edytowanie kontenera wybierz kartę Punkty montowania woluminów.

  18. W obszarze Nazwa woluminu wybierz utworzony wcześniej wolumin.

  19. W polu Ścieżka montowania wprowadź ścieżkę bezwzględną w kontenerze, aby zamontować wolumin.

  20. W polu Ścieżka podrzędna (opcjonalnie) wprowadź ścieżkę w woluminie do zamontowania. Jeśli nie określisz tej wartości, katalog główny woluminu zostanie zainstalowany. Aby uzyskać więcej informacji, zobacz (#sub-path).

  21. Wybierz pozycję Zapisz , aby zapisać zmiany i zamknąć okienko kontekstowe.

  22. Wybierz pozycję Utwórz , aby utworzyć nową poprawkę.

Ścieżka podrzędna

Podczas montowania udziału plików z Azure Files można określić zarówno ścieżkę montowania, jak i ścieżkę podrzędną.

  • Ścieżka instalacji: ścieżka w kontenerze, w którym chcesz zainstalować wolumin.
  • Ścieżka podrzędna: Ścieżka w woluminie, który chcesz zainstalować.

Ścieżka podrzędna jest opcjonalna. Jeśli nie określisz ścieżki podrzędnej, zamontowany zostanie root woluminu.

Ścieżka podrzędna jest ścieżką względną od głównego woluminu. Nie uruchamiaj ścieżki podrzędnej za pomocą polecenia /. Jeśli określisz ścieżkę podrzędną rozpoczynającą się od /, aplikacja kontenera może nie zostać uruchomiona. Na przykład my-volume-folder jest prawidłową ścieżką podrzędną, ale /my-volume-folder nie.

Ścieżka podrzędna może odwoływać się do folderu lub pliku w woluminie.

  • Jeśli ścieżka podrzędna odwołuje się do folderu, ścieżka instalacji powinna odwoływać się do pustego folderu w kontenerze.

  • Jeśli ścieżka podrzędna odwołuje się do pliku, ścieżka instalacji powinna odwoływać się do pliku, który jeszcze nie istnieje w kontenerze.

    Załóżmy na przykład, że ścieżka podrzędna to my-volume-folder/my-volume-file.txt, a ścieżka instalacji to /my-container-folder/my-container-file.txt. Folder /my-container-folder powinien już istnieć w kontenerze, ale nie powinien jeszcze zawierać pliku my-container-file.txt.

System ignoruje wszystkie ukośniki ścieżki podrzędnej.