共用方式為


教學課程:在 Azure App 服務 中設定自定義容器的 Sidecar 容器

在本教學課程中,您會在 Azure App 服務 中,將OpenTelemetry收集器新增為Sidecar容器至Linux自定義容器應用程式。 如需自備程式代碼 Linux 應用程式,請參閱教學課程:在 Azure App 服務 中設定 Linux 應用程式的側車容器。

如果您沒有 Azure 帳戶,請在開始之前建立 免費帳戶

什麼是側車容器?

在 Azure App 服務 中,您可以為每個 Linux 應用程式新增最多 9 個側車容器。 Sidecar 容器可讓您將額外的服務和功能部署到 Linux 應用程式,而不需要將它們緊密結合到主要容器(內建或自定義)。 例如,您可以將監視、記錄、設定和網路服務新增為 Sidecar 容器。 OpenTelemetry 收集器 Sidecar 是這類監視範例之一。

Sidecar 容器會與相同 App Service 方案中的主要應用程式容器一起執行。

1.設定所需的資源

首先,您會建立教學課程所使用的資源。 它們用於此特定案例,而一般來說 Sidecar 容器不需要。

  1. Azure Cloud Shell 中,執行下列命令:

    git clone https://github.com/Azure-Samples/app-service-sidecar-tutorial-prereqs
    cd app-service-sidecar-tutorial-prereqs
    azd env new my-sidecar-env
    azd provision
    
  2. 出現提示時,請提供您想要的訂用帳戶和區域。 例如:

    • 訂用帳戶:您的訂用帳戶。
    • 地區: (歐洲)西歐

    當部署完成時,您應該會看到下列輸出:

     APPLICATIONINSIGHTS_CONNECTION_STRING = InstrumentationKey=...;IngestionEndpoint=...;LiveEndpoint=...
    
     Open resource group in the portal: https://portal.azure.com/#@/resource/subscriptions/.../resourceGroups/...
     
  3. 在瀏覽器索引標籤中開啟資源群組連結。您稍後必須使用連接字串。

    注意

    azd provision 使用包含的範本來建立下列 Azure 資源:

2.建立已啟用 Sidecar 的應用程式

  1. 在資源群組的管理頁面中,選取 [建立]

  2. 搜尋 Web 應用程式,然後選取 [建立] 上的向下箭號,然後選取 [Web 應用程式]

    顯示 Azure Marketplace 頁面的螢幕擷取畫面,其中顯示正在搜尋 Web 應用程式且按一下建立 Web 應用程式按鈕。

  3. 如下所示,設定 [基本資料] 面板:

    • 名稱︰唯一的名稱。
    • 發佈容器
    • 作業系統Linux
    • 區域:與您使用 azd provision 選擇的區域相同
    • Linux 方案:新的 App Service 方案

    顯示已醒目提示 Linux 自訂容器應用程式的 Web 應用程式建立精靈和設定的螢幕擷取畫面。

  4. 選取 [容器]。 如下所示,設定 [容器] 面板:

    • Sidecar 支援已啟用
    • 映像來源Azure Container Registry
    • 登錄azd provision 所建立的登錄
    • 映像nginx
    • 標籤最新
    • 連接埠80

    此螢幕擷取畫面顯示容器映像的 Web 應用程式建立精靈和設定,並已醒目提示 Sidecar 支援。

    注意

    這些設定會以不同方式在啟用 Sidecar 的應用程式中設定。 如需詳細資訊,請參閱 啟用側車的自定義容器有何差異?

  5. 選取 [檢閱 + 建立],然後選取 [建立]

  6. 部署完成後,請選取 [前往資源]

  7. 在新的瀏覽器索引標籤中,瀏覽至 https://<app-name>.azurewebsites.net 並查看預設 Nginx 頁面。

3.新增 Sidecar 容器

在本節中,您會將 Sidecar 容器新增至自訂容器應用程式。

  1. 在應用程式的管理頁面中,從左側功能表選取 [部署中心]

    部署中心會顯示應用程式中的所有容器。 現在,它只有主要容器。

  2. 選取 [新增],然後設定新的容器,如下所示:

    • 名稱otel-collector
    • 映像來源Azure Container Registry
    • 登錄azd provision 所建立的登錄
    • 映像otel-collector
    • 標籤最新
  3. 選取套用

    此螢幕擷取畫面顯示如何在 Web 應用程式的部署中心設定 Sidecar 容器。

    您現在應會在部署中心看到兩個容器。 主要容器會標示為 [主要],而 Sidecar 容器會標示為 [Sidecar]。 每個應用程式都必須有一個主要容器,但可有多個 Sidecar 容器。

4.設定環境變數

針對範例案例,otel-collector Sidecar 會設定為將 OpenTelemetry 資料匯出至 Azure 監視器,但是需要連接字元串作為環境變數 (請參閱 otel-collector 映像的 OpenTelemetry 組態檔)。

您可藉由設定應用程式設定,為容器 (像是任何 App Service 應用程式) 設定環境變數。 應用程式設定可供應用程式中的所有容器存取。

  1. 在應用程式的管理頁面中,從左側功能表中,選取 [環境變數]。

  2. 選取 [新增 ] 並加以設定,以新增應用程式設定,如下所示:

    • 名稱APPLICATIONINSIGHTS_CONNECTION_STRING
    • :輸出azd provision中的 連接字串。 如果您遺失 Cloud Shell 工作階段,您也可以在 Application Insight 資源的 [概觀] 頁面的 [連接字串] 底下找到它。
  3. 選取 [套用],然後選取 [套用],然後選取 [確認]。

    顯示 Web 應用程式的 [組態] 頁面的螢幕擷取畫面,其中新增了兩項應用程式設定。

注意

某些應用程式設定不適用於已啟用 Sidecar 的應用程式。 如需詳細資訊,請參閱 啟用側車的自定義容器有何差異?

5.在 Application Insights 中確認

otel-collector Sidecar 現在應該將資料匯出至 Application Insights。

  1. 回到 https://<app-name>.azurewebsites.net 的瀏覽器索引標籤,重新整理頁面數次以產生一些 Web 要求。

  2. 返回資源群組概觀頁面,然後選取 Application Insights 資源。 您現在應該會在預設圖表中看到一些資料。

    Application Insights 頁面的螢幕擷取畫面,其中顯示預設圖表中的資料。

注意

在此非常常見的監視案例中,Application Insights 就是您可使用的其中一個 OpenTelemetry 目標,例如 Jaeger、Prometheus 和 Zipkin。

清除資源

若不再需要此環境,您可以刪除資源群組、App Service 及所有相關資源。 只要在 Cloud Shell 中複製的存放庫中執行此命令:

azd down

常見問題

已啟用 Sidecar 的自訂容器有何差異?

您會以不同的方式設定已啟用 Sidecar 的應用程式與未啟用 Sidecar 的應用程式。

未啟用側車

  • 容器名稱和類型會直接透過 LinuxFxVersion=DOCKER|<image-details> 進行設定(請參閱 az webapp config set --linux-fx-version)。
  • 主要容器是使用應用程式設定來設定,例如:
    • DOCKER_REGISTRY_SERVER_URL
    • DOCKER_REGISTRY_SERVER_USERNAME
    • DOCKER_REGISTRY_SERVER_PASSWORD
    • WEBSITES_PORT

已啟用 Sidecar功能

  • 已啟用 sidecar 的應用程式由LinuxFxVersion=sitecontainers 指定(請參閱 az webapp config set --linux-fx-version)。
  • 主要容器是使用 sitecontainers 資源來設定。 這些設定不適用於啟用了 Sidecar 功能的應用程式
    • DOCKER_REGISTRY_SERVER_URL
    • DOCKER_REGISTRY_SERVER_USERNAME
    • DOCKER_REGISTRY_SERVER_PASSWORD
    • WEBSITES_PORT

Sidecar 容器如何處理內部通訊?

Sidecar 容器與主要容器共用相同的網路主機,因此主要容器(和其他側車容器)可以使用 聯機到 Sidecar localhost:<port>上的任何埠。 範例 startup.sh 使用 localhost:4318 來存取 4318 在收集器側車上的埠。

在 [ 編輯容器] 對話框中, App Service 目前未使用 [埠 ] 方塊。 您可以使用它做為 Sidecar 元數據的一部分,例如指出 Sidecar 正在接聽的埠。

Sidecar 容器可以接收網路請求嗎?

否。 App Service 只會將網際網路請求傳送至主要容器。 針對基於程式碼的 Linux 應用程式,內建的 Linux 容器是主要容器,且應使用 新增任何 Sidecar 容器(IsMain=false)。 針對自訂容器,sitecontainers 中應該只有一個例外,其他都必須具備 IsMain=false

如需有關設定 IsMain 的詳細資訊,請參閱 Microsoft.Web sites/sitecontainers

如何使用磁碟區掛接?

卷掛載功能可讓您在 Web 應用程式內的容器之間共用非永久性檔案和目錄。

顯示 Sidecar 容器磁碟區掛接設定的螢幕快照。

磁碟區子路徑: 這是一個自動建立的邏輯目錄路徑,且不會在容器內被引用。 使用相同磁碟區子路徑設定的容器可以彼此共用檔案和目錄。

容器掛接路徑: 這會對應至您在容器內參考的目錄路徑。 容器掛載路徑會映射到磁碟區子路徑。

例如,假設已設定下列磁碟區掛接:

Sidecar 名稱 磁碟區子路徑 容器掛接路徑 唯讀
容器1 /directory1/directory2 /container1Vol
容器2 /directory1/directory2 /container2Vol
Container3 /directory1/directory2/directory3 /container3Vol
Container4 /directory4 /container1Vol

根據這些設定,適用下列條件:

  • 如果 Container1 建立 /container1Vol/myfile.txt,Container2 可以透過 /container2Vol/myfile.txt讀取檔案。
  • 如果 Container1 建立 /container1Vol/directory3/myfile.txt,Container2 可以透過 /container2Vol/directory3/myfile.txt讀取檔案,而 Container3 可以透過 /container3Vol/myfile.txt讀取和寫入檔案。
  • Container4 不會與其他任何容器共用磁碟區掛接。

注意

對於基於程式碼的 Linux 應用程式,內建的 Linux 容器無法使用磁碟區掛載。

更多資源