Share via


教學課程:在 Azure Container Apps 中建立 Azure 檔案儲存體 磁碟區掛接

瞭解如何使用 Azure 檔案儲存體 記憶體掛接,寫入容器應用程式中的永久記憶體。 如需記憶體掛接的詳細資訊,請參閱 在 Azure Container Apps 中使用記憶體掛接。

在本教學課程中,您會了解如何:

  • 建立容器應用程式環境
  • 建立 Azure 儲存體帳戶
  • 在記憶體帳戶中定義檔案共用
  • 將環境連結至記憶體檔案共用
  • 在個別容器中掛接記憶體共用
  • 檢視網站存取記錄來確認記憶體掛接

注意

Azure Container Apps 支援使用 SMB 和 NFS 通訊協定掛接檔案共用。 本教學課程示範如何使用SMB通訊協定掛接 Azure 檔案儲存體共用。 若要深入瞭解掛接 NFS 共用,請參閱 在 Azure Container Apps 中使用記憶體掛接。

必要條件

設定環境

下列命令可協助您定義變數,並確定您的 Container Apps 擴充功能是最新的。

  1. 登入 Azure CLI。

    az login
    
  2. 設定用於各種命令中要遵循的環境變數。

    RESOURCE_GROUP="my-container-apps-group"
    ENVIRONMENT_NAME="my-storage-environment"
    LOCATION="canadacentral"
    
  3. 請確定您有最新版的 Container Apps Azure CLI 擴充功能。

    az extension add -n containerapp --upgrade
    
  4. 註冊 Microsoft.App 命名空間。

    az provider register --namespace Microsoft.App
    
  5. 如果您之前未曾使用過,請註冊 Azure 監視器 Log Analytics 工作區的 Microsoft.OperationalInsights 提供者。

    az provider register --namespace Microsoft.OperationalInsights
    

建立環境

下列步驟會建立資源群組和 Container Apps 環境。

  1. 建立資源群組。

    az group create \
      --name $RESOURCE_GROUP \
      --location $LOCATION \
      --query "properties.provisioningState"
    

    建立之後,命令會傳回「成功」訊息。

    在本教學課程結束時,您可以刪除資源群組,以移除本文期間建立的所有服務。

  2. 建立容器應用程式環境。

    az containerapp env create \
      --name $ENVIRONMENT_NAME \
      --resource-group $RESOURCE_GROUP \
      --location "$LOCATION" \
      --query "properties.provisioningState"
    

    建立之後,命令會傳回「成功」訊息。

    儲存體 掛接會與容器應用程式環境相關聯,並在個別容器應用程式中設定。

設定記憶體帳戶

接下來,建立記憶體帳戶,並建立要掛接至容器應用程式的檔案共用。

  1. 定義記憶體帳戶名稱。

    此命令會產生記憶體帳戶名稱的隨機後綴,以確保唯一性。

    STORAGE_ACCOUNT_NAME="myacastorageaccount$RANDOM"
    
  2. 建立 Azure 儲存體帳戶。

    az storage account create \
      --resource-group $RESOURCE_GROUP \
      --name $STORAGE_ACCOUNT_NAME \
      --location "$LOCATION" \
      --kind StorageV2 \
      --sku Standard_LRS \
      --enable-large-file-share \
      --query provisioningState
    

    建立之後,命令會傳回「成功」訊息。

  3. 定義檔案共享名稱。

    STORAGE_SHARE_NAME="myfileshare"
    
  4. 建立 Azure 儲存體 檔案共用。

    az storage share-rm create \
      --resource-group $RESOURCE_GROUP \
      --storage-account $STORAGE_ACCOUNT_NAME \
      --name $STORAGE_SHARE_NAME \
      --quota 1024 \
      --enabled-protocols SMB \
      --output table
    
  5. 取得記憶體帳戶金鑰。

    STORAGE_ACCOUNT_KEY=`az storage account keys list -n $STORAGE_ACCOUNT_NAME --query "[0].value" -o tsv`
    

    您必須有記憶體帳戶密鑰,才能在 Container Apps 環境中建立記憶體連結。

  6. 定義記憶體掛接名稱。

    STORAGE_MOUNT_NAME="mystoragemount"
    

    這個值是用來定義容器應用程式環境到 Azure 儲存體 帳戶之記憶體掛接連結的名稱。

建立記憶體掛接

現在您可以更新容器應用程式組態以支援記憶體掛接。

  1. 在環境中建立記憶體連結。

    az containerapp env storage set \
      --access-mode ReadWrite \
      --azure-file-account-name $STORAGE_ACCOUNT_NAME \
      --azure-file-account-key $STORAGE_ACCOUNT_KEY \
      --azure-file-share-name $STORAGE_SHARE_NAME \
      --storage-name $STORAGE_MOUNT_NAME \
      --name $ENVIRONMENT_NAME \
      --resource-group $RESOURCE_GROUP \
      --output table
    

    此命令會在容器應用程式環境與使用 命令建立的 az storage share-rm 檔案共享之間建立連結。

    既然記憶體帳戶和環境已連結,您可以建立使用記憶體掛接的容器應用程式。

  2. 定義容器應用程式名稱。

    CONTAINER_APP_NAME="my-container-app"
    
  3. 建立容器應用程式。

    az containerapp create \
      --name $CONTAINER_APP_NAME \
      --resource-group $RESOURCE_GROUP \
      --environment $ENVIRONMENT_NAME \
      --image nginx \
      --min-replicas 1 \
      --max-replicas 1 \
      --target-port 80 \
      --ingress external \
      --query properties.configuration.ingress.fqdn
    

    此命令會顯示新容器應用程式的URL。

  4. 複製 URL 並貼到網頁瀏覽器中,以瀏覽至網站。

    頁面載入之後,您會看到「歡迎使用 nginx!」訊息。 保持開啟此瀏覽器索引標籤。 您將在記憶體掛接驗證步驟期間返回網站。

    既然您已確認容器應用程式已設定,您可以使用記憶體掛接定義將應用程式更新為 。

  5. 匯出容器應用程式的設定。

    az containerapp show \
      --name $CONTAINER_APP_NAME \
      --resource-group $RESOURCE_GROUP \
      --output yaml > app.yaml
    

    注意

    雖然此應用程式沒有秘密,但許多應用程式都會執行功能秘密。 根據預設,當您匯出應用程式的組態時,產生的 YAML 中不會包含秘密的值。

    如果您不需要變更秘密值,則可以移除 secrets 區段,而您的秘密仍維持不變。 或者,如果您需要變更秘密的值,請務必在嘗試更新應用程式之前,先提供 name 檔案中所有秘密的 和 value 。 省略區段中的 secrets 秘密會刪除秘密。

  6. 在程式代碼編輯器中開啟 app.yaml

  7. volumes: null 區段中的定義 template 取代為 volumes: 參考記憶體磁碟區的定義。 範本區段看起來應該如下所示:

    template:
      volumes:
      - name: my-azure-file-volume
        storageName: mystoragemount
        storageType: AzureFile
      containers:
      - image: nginx
        name: my-container-app
        volumeMounts:
        - volumeName: my-azure-file-volume
          mountPath: /var/log/nginx
        resources:
          cpu: 0.5
          ephemeralStorage: 3Gi
          memory: 1Gi
      initContainers: null
      revisionSuffix: ''
      scale:
        maxReplicas: 1
        minReplicas: 1
        rules: null
    

    新的 template.volumes 區段包含下列屬性。

    屬性 說明
    name 這個值會比對呼叫 命令所建立的磁碟區 az containerapp env storage set
    storageName 此值會定義環境中容器用來存取記憶體磁碟區的名稱。
    storageType 這個值會決定為環境定義的記憶體磁碟區類型。 在此情況下,會宣告 Azure 檔案儲存體 掛接。

    volumes 段會定義應用程式層級的磁碟區,讓應用程式容器或 Sidecar 容器可以透過 volumeMounts 與容器相關聯的區段來參考。

  8. 將區volumeMounts段新增至 區段中的containersnginx容器。

    containers:
      - image: nginx
        name: my-container-app
        volumeMounts:
        - volumeName: my-azure-file-volume
          mountPath: /var/log/nginx
    

    新的 volumeMounts 區段包含下列屬性:

    屬性 說明
    volumeName 此值必須符合定義中 volumes 定義的名稱。
    mountPath 此值會定義容器中掛接記憶體的路徑。
  9. 使用新的記憶體掛接組態更新容器應用程式。

    az containerapp update \
      --name $CONTAINER_APP_NAME \
      --resource-group $RESOURCE_GROUP \
      --yaml app.yaml \
      --output table
    

確認記憶體掛接

現在已建立記憶體掛接,您可以從容器操作 Azure 儲存體 中的檔案。 使用下列命令來觀察工作的記憶體掛接。

  1. 開啟容器應用程式內的互動式殼層,以在執行中的容器內執行命令。

    az containerapp exec \
      --name $CONTAINER_APP_NAME \
      --resource-group $RESOURCE_GROUP
    

    此命令可能需要一些時間才能開啟遠端殼層。 殼層準備就緒後,您可以透過文件系統命令與記憶體掛接互動。

  2. 變更為 nginx /var/log/nginx 資料夾。

    cd /var/log/nginx
    
  3. 返回瀏覽器並流覽至網站並重新整理頁面幾次。

    對網站提出的要求會建立一系列記錄數據流專案。

  4. 返回終端機並列出資料夾的值 /var/log/nginx

    請注意access.logerror.log檔案如何出現在此資料夾中。 這些檔案會寫入您在先前步驟中建立 Azure 儲存體 共用中的 Azure 檔案儲存體 掛接。

  5. 檢視access.log檔案的內容

    cat access.log
    
  6. 結束容器的互動式殼層,以返回您的本機終端機會話。

    exit
    
  7. 現在,您可以檢視 Azure 入口網站 中的檔案,以確認檔案存在於您的 Azure 儲存體 帳戶中。 列印隨機產生的記憶體帳戶名稱。

    echo $STORAGE_ACCOUNT_NAME
    
  8. 流覽至 Azure 入口網站,然後開啟在此程式中建立的記憶體帳戶。

  9. [數據 儲存體 選取[檔案共享]。

  10. 選取 myshare 以檢視 access.logerror.log 檔案。

清除資源

如果您不打算繼續使用此應用程式,請執行下列命令來刪除資源群組以及本文中建立的所有資源。

az group delete \
  --name $RESOURCE_GROUP

下一步