共用方式為


在 Azure 容器應用程式中使用儲存體掛接

容器應用程式可以存取不同型別的儲存體。 必要時,單一應用程式可以使用一種以上的儲存體。

儲存體類型 描述 持續性 使用範例
容器範圍儲存體 可供執行中容器使用的暫時性儲存體 資料在容器關閉之前可供使用 撰寫本機應用程式快取。
複本範圍儲存體 在相同複本中的容器之間共用檔案的暫時性儲存體 資料在複本關閉之前可供使用 寫入 Sidecar 容器所處理之記錄檔的主要應用程式容器。
Azure 檔案 永久儲存體 資料會保存至 Azure 檔案儲存體 將檔案寫入檔案共用,讓其他系統能夠存取資料。

暫時性儲存體

容器應用程式可以讀取暫存資料並將其寫入暫時性儲存體。 暫時性儲存體的範圍可以設定為容器或複本。 每個複本可用的容器範圍和複本範圍儲存體總數,取決於配置給複本的 vCPU 總數。

vCPU 暫時性儲存體總計
0.25 以下 1 GiB
0.5 以下 2 GiB
1 以下 4 GiB
超過 1 8 GiB

容器範圍儲存體

容器可以寫入自有的檔案系統。

容器檔案系統儲存體具有下列特性:

  • 儲存體是暫時的,會在容器關閉或重新啟動時消失。
  • 只有在目前容器中執行的程序可以看見寫入此儲存體的檔案。

複本範圍儲存體

您可以在 Kubernetes 中掛接等同於 EmptyDir (空白目錄) 的暫時性暫存磁碟區。 此儲存體的範圍設定為單一複本。 使用 EmptyDir 磁碟區在相同複本中的容器之間共用資料。

複本範圍儲存體具有下列特性:

  • 檔案的保留期限為複本存留期。
    • 如果複本中的容器重新啟動,則會保留磁碟區中的檔案。
  • 複本中的任何 Init 或應用程式容器都可以掛接相同的磁碟區。
  • 容器可以掛接多個 EmptyDir 磁碟區。

若要設定複本範圍儲存體,請先在修訂中定義 EmptyDir 磁碟區。 然後,在修訂中的一或多個容器中定義磁碟區掛接。

必要條件

需求 指示
Azure 帳戶 如果您沒有帳戶,可免費建立帳戶
Azure 容器應用程式環境 建立容器應用程式環境

組態

使用 Azure CLI 設定複本範圍儲存體時,必須使用 YAML 定義來建立或更新容器應用程式。

  1. 若要更新現有的容器應用程式以使用複本範圍儲存體,請將應用程式的規格匯出至名為 app.yaml 的 YAML 檔案。

    az containerapp show -n <APP_NAME> -g <RESOURCE_GROUP_NAME> -o yaml > app.yaml
    
  2. 對容器應用程式規格進行下列變更。

    • volumes 陣列新增至容器應用程式定義的 template 區段,並定義磁碟區。 如果您已有 volumes 陣列,請將新的磁碟區新增至陣列。
      • name 是磁碟區的識別碼。
      • 使用 EmptyDir 作為 storageType
    • 針對範本中要掛接磁碟區的每個容器,在容器定義的 volumeMounts 陣列中定義磁碟區掛接。
      • volumeNamevolumes 陣列中定義的名稱。
      • mountPath 是容器中要掛接磁碟區的路徑。
    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. 使用 YAML 檔案更新容器應用程式。

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

如需完整範例,請參閱 YAML 規格 (部分機器翻譯)。

若要建立複本範圍磁碟區並將其掛接在容器中,請對 ARM 範本中的容器應用程式資源進行下列變更:

  • volumes 陣列新增至容器應用程式定義的 template 區段,並定義磁碟區。 如果您已有 volumes 陣列,請將新的磁碟區新增至陣列。
    • name 是磁碟區的識別碼。
    • 使用 EmptyDir 作為 storageType
  • 針對範本中要掛接磁碟區的每個容器,在容器定義的 volumeMounts 陣列中定義磁碟區掛接。
    • volumeNamevolumes 陣列中定義的名稱。
    • mountPath 是容器中要掛接磁碟區的路徑。

範例 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"
        }
      ]
    }
  }
}

如需完整範例,請參閱 ARM 範本 API 規格

若要建立複本範圍磁碟區並將其掛接在容器中,請使用 Azure 入口網站部署容器應用程式的新修訂。

  1. 在 Azure 入口網站中,瀏覽至您的容器應用程式。

  2. 在左側功能表中選取 [修訂管理]

  3. 選取 [建立新修訂]

  4. 選取要掛接磁碟區的容器。

  5. 在 [編輯容器] 內容窗格中,選取 [磁碟區掛接] 索引標籤。

  6. 在 [暫時性儲存體] 區段下,使用下列資訊建立新的磁碟區。

    • 磁碟區名稱:暫時性磁碟區的名稱。
    • 掛接路徑:容器中掛接磁碟區的絕對路徑。
  7. 選取 [儲存],以儲存變更並結束內容窗格。

  8. 選取 [建立] 以建立新修訂。

Azure 檔案儲存體磁碟區

您可以從 Azure 檔案儲存體掛接檔案共用,作為容器內的磁碟區。

Azure 檔案儲存體具有下列特性:

  • 在掛接位置下寫入的檔案會保存至檔案共用。
  • 共用中的檔案可透過掛接位置取得。
  • 多個容器可以掛接相同的檔案共用,包括位於另一個複本、修訂或容器應用程式的檔案共用。
  • 掛接共用的所有容器都可以存取任何其他容器或方法所寫入的檔案。
  • 多個 Azure 檔案儲存體磁碟區可以掛接在單一容器中。

「Azure 檔案儲存體」服務支援 SMB (伺服器訊息區) 和 NFS (網路檔案系統) 通訊協定。 您可以使用任一通訊協定來掛接「Azure 檔案儲存體」共用。 您在環境中所定義的檔案共用必須使用儲存體帳戶中的檔案共用所使用的相同通訊協定來進行設定。

注意

在「Azure 容器應用程式」中掛接 NFS 共用的支援處於預覽階段。

若要在您的容器中啟用「Azure 檔案」儲存體,您需要按如下所示設定您的環境和容器應用程式:

  • 在容器應用程式環境中建立儲存體定義。
  • 如果您使用 NFS,則必須使用自訂 VNet 來設定您的環境,且必須將儲存體帳戶設定為允許從該 VNet 進行存取。 如需詳細資訊,請參閱 Azure 檔案儲存體中的 NFS 檔案共用
  • 如果使用自訂 VNet 來設定您的環境,則必須允許與子網路相關聯的網路安全性群組 (NSG) 中的連接埠 445 和 2049。
  • 在修訂中定義類型為 AzureFile (SMB) 或 NfsAzureFile (NFS) 的磁碟區。
  • 在修訂中的一或多個容器中定義磁碟區掛接。
  • 使用的 Azure 檔案儲存體帳戶必須可從容器應用程式的虛擬網路存取。 如需詳細資訊,請參閱授與虛擬網路存取權

必要條件

需求 指示
Azure 帳戶 如果您沒有帳戶,可免費建立帳戶
Azure 儲存體帳戶 建立儲存體帳戶
Azure 容器應用程式環境 建立容器應用程式環境

組態

設定容器應用程式以使用 Azure CLI 掛接 Azure 檔案儲存體磁碟區時,必須使用 YAML 定義來建立或更新容器應用程式。

如需掛接 SMB 檔案共用的逐步教學課程,請參閱在 Azure 容器應用程式中建立 Azure 檔案儲存體掛接

  1. 將儲存體定義新增至您的容器應用程式環境。

    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
    

    <STORAGE_ACCOUNT_NAME><STORAGE_ACCOUNT_KEY> 取代為您儲存體帳戶的名稱和金鑰。 將 <STORAGE_SHARE_NAME> 取代為儲存體帳戶中的檔案共用名稱。

    --access-mode 的允許值為 ReadWriteReadOnly

  2. 若要更新現有的容器應用程式以掛接檔案共用,請將應用程式的規格匯出至名為 app.yaml 的 YAML 檔案。

    az containerapp show -n <APP_NAME> -g <RESOURCE_GROUP_NAME> -o yaml > app.yaml
    
  3. 對容器應用程式規格進行下列變更。

    • volumes 陣列新增至容器應用程式定義的 template 區段,並定義磁碟區。 如果您已有 volumes 陣列,請將新的磁碟區新增至陣列。
      • name 是磁碟區的識別碼。
      • 對於 storageType,將 AzureFile 用於 SMB,或將 NfsAzureFile 用於 NFS。 此值必須符合您在環境中所定義的儲存體類型。
      • 針對 storageName,請使用您在環境中定義的儲存體名稱。
    • 針對範本中要掛接 Azure 檔案儲存體的每個容器,在容器定義的 volumeMounts 陣列中定義磁碟區掛接。
      • volumeNamevolumes 陣列中定義的名稱。
      • mountPath 是容器中要掛接磁碟區的路徑。
    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
        volumes:
        - name: azure-files-volume
          storageType: AzureFile
          storageName: mystorage
    
  4. 使用 YAML 檔案更新容器應用程式。

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

如需完整範例,請參閱 YAML 規格 (部分機器翻譯)。

下列 ARM 範本程式碼片段示範如何將 Azure 檔案儲存體共用新增至容器應用程式環境,並在容器應用程式中使用它。

  1. storages 子資源新增至容器應用程式環境。

    {
      "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. 更新容器應用程式資源,以新增磁碟區和磁碟區掛接。

    {
      "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"
                }
              ]
            }
          ],
          "scale": {
            "minReplicas": 1,
            "maxReplicas": 3
          },
          "volumes": [
            {
              "name": "azure-files-volume",
              "storageType": "AzureFile",
              "storageName": "myazurefiles"
            }
          ]
        }
      }
    }
    
    • volumes 陣列新增至容器應用程式定義的 template 區段,並定義磁碟區。 如果您已有 volumes 陣列,請將新的磁碟區新增至陣列。
      • name 是磁碟區的識別碼。
      • 對於 storageType,將 AzureFile 用於 SMB,或將 NfsAzureFile 用於 NFS。 此值必須符合您在環境中所定義的儲存體類型。
      • 針對 storageName,請使用您在環境中定義的儲存體名稱。
    • 針對範本中要掛接 Azure 檔案儲存體的每個容器,在容器定義的 volumeMounts 陣列中定義磁碟區掛接。
      • volumeNamevolumes 陣列中定義的名稱。
      • mountPath 是容器中要掛接磁碟區的路徑。

如需完整範例,請參閱 ARM 範本 API 規格

若要在 Azure 入口網站中設定 Azure 檔案儲存體的磁碟區掛接,請將檔案共用新增至容器應用程式環境,然後透過建立新的修訂,將磁碟區掛接新增至容器應用程式。

  1. 在 Azure 入口網站中,瀏覽至您的容器應用程式環境。

  2. 從左側功能表中選取 [Azure 檔案儲存體]

  3. 選取 [新增]。

  4. 在 [新增檔案共用] 捷徑功能表中,輸入下列資訊:

    • 名稱:檔案共用的名稱。
    • 儲存體帳戶名稱:包含檔案共用的儲存體帳戶名稱。
    • 儲存體帳戶金鑰:儲存體帳戶的存取金鑰。
    • 檔案共用:檔案共用的名稱。
    • 存取模式:檔案共用的存取模式。 有效值為「讀取/寫入」和「唯讀」。
  5. 選取 [新增] 以結束內容窗格。

  6. 選取 [儲存] 以認可變更。

  7. 瀏覽至您的容器應用程式。

  8. 從左側功能表中選取 [修訂管理]

  9. 選取 [建立新修訂]

  10. 選取要在其中掛接磁碟區的容器。

  11. 在 [編輯容器] 內容窗格中,選取 [磁碟區掛接] 索引標籤。

  12. 在 [檔案共用] 區段下,使用下列資訊建立新的磁碟區。

    • 檔案共用名稱:您新增的檔案共用。
    • 掛接路徑:容器中掛接磁碟區的絕對路徑。
  13. 選取 [儲存],以儲存變更並結束內容窗格。

  14. 選取 [建立] 以建立新修訂。