瞭解單一裝置或大規模 IoT Edge 自動部署

適用于: IoT Edge 1.4 checkmark IoT Edge 1.4

重要

支援的版本是 IoT Edge 1.4。 如果您是舊版,請參閱更新 IoT Edge

自動部署和分層部署可協助您管理和設定大量 IoT Edge 裝置上的模組。

Azure IoT Edge 提供兩種方式來設定模組以在 IoT Edge 裝置上執行。 第一種方法是在每個裝置上部署模組。 您可以建立部署資訊清單,然後依名稱將它套用至特定裝置。 第二種方法是自動將模組部署到任何符合一組已定義條件的已註冊裝置。 您可以建立部署資訊清單,然後根據裝置對應項中的標籤 定義其套用的 裝置。

您無法合併每個裝置和自動部署。 一旦您開始以自動部署的 IoT Edge 裝置為目標(含或不含分層部署),就不再支援個別裝置部署。

本文著重于設定和監視裝置車隊,統稱為 IoT Edge 自動部署

基本部署步驟如下:

  1. 操作員會定義描述一組模組和目標裝置的部署資訊清單。
  2. 因此,IoT 中樞服務會與所有目標裝置通訊,以使用宣告的模組進行設定。
  3. IoT 中樞服務會從 IoT Edge 裝置擷取狀態,並將其提供給操作員使用。 例如,操作員可以看到 Edge 裝置未成功設定,或當模組在執行時間期間失敗時。
  4. 每當新鎖定的 IoT Edge 裝置上線並聯機到IoT 中樞時,它們就會設定為部署。

本文說明設定和監視部署所涉及的每個元件。 如需建立和更新部署的逐步解說,請參閱 大規模 部署和監視 IoT Edge 模組。

部署

IoT Edge 自動部署會指派 IoT Edge 模組映射,以在目標 IoT Edge 裝置上當做實例執行。 自動化部署會設定 IoT Edge 部署資訊清單,以包含具有對應初始化參數的模組清單。 部署可以指派給單一裝置(根據裝置識別碼)或一組裝置(根據標籤)。 IoT Edge 裝置收到部署資訊清單之後,它會從個別的容器存放庫下載並安裝容器映射,並據以設定它們。 建立部署之後,操作員可以監視部署狀態,以查看目標裝置是否已正確設定。

只有 IoT Edge 裝置可以使用部署進行設定。 下列必要條件必須在裝置上,才能接收部署:

  • 基本作業系統
  • 容器管理系統,例如 Moby 或 Docker
  • 布建 IoT Edge 執行時間

部署資訊清單

部署資訊清單是 JSON 檔,描述要設定于目標 IoT Edge 裝置上的模組。 其中包含所有模組的組態中繼資料,包括必要的系統模組(特別是 IoT Edge 代理程式和 IoT Edge 中樞)。

每個模組的組態中繼資料包括:

  • 版本
  • 類型
  • 狀態(例如執行 中或 停止)
  • 重新啟動原則
  • 映射和容器登錄
  • 資料輸入和輸出的路由

如果模組映射儲存在私人容器登錄中,IoT Edge 代理程式會保存登錄認證。

目標條件

目標裝置條件會在部署的整個存留期內持續評估。 包含任何符合需求的新裝置,並移除任何不再符合需求的現有裝置。 如果服務偵測到任何目標條件變更,則會重新啟用部署。

例如,您有具有目標條件 tags.environment = 'prod' 的部署。 當您起始部署時,有 10 個生產裝置。 這些模組已成功安裝在這 10 個裝置中。 IoT Edge 代理程式狀態會顯示 10 個裝置、10 個成功的回應、0 個失敗回應,以及 0 個擱置的回應。 現在,您再新增五個裝置與 tags.environment = 'prod' 。 服務會偵測到變更,IoT Edge 代理程式狀態現在會顯示 15 個裝置、10 個成功的回應、0 個失敗回應,以及 5 個擱置中的回應,同時部署到五個新的裝置。

如果部署沒有目標條件,則不會套用至任何裝置。

在裝置對應項標籤、裝置對應項報告屬性或 deviceId 上使用任何布林值條件來選取目標裝置。 如果您想要搭配標記使用條件,您必須在與屬性相同的層級下,在裝置對應項中新增 "tags":{} 區段。 如需裝置對應項中標籤的詳細資訊,請參閱 瞭解和使用IoT 中樞 中的裝置對應項。 如需查詢作業的詳細資訊,請參閱 IoT 中樞查詢語言運算子和IS_DEFINED函式

目標條件的範例:

  • deviceId ='linuxprod1'
  • tags.environment ='prod'
  • tags.environment = 'prod' AND tags.location = 'westus'
  • tags.environment = 'prod' OR tags.location = 'westus'
  • tags.operator = 'John' AND tags.environment = 'prod' AND NOT deviceId = 'linuxprod1'
  • properties.reported.devicemodel = '4000x'
  • IS_DEFINED(tags.remote)
  • NOT IS_DEFINED(tags.location.building)
  • tags.environment != null
  • [none]

當您建構目標條件時,請考慮這些條件約束:

  • 在裝置對應項中,您只能使用標記、報告的屬性或 deviceId 來建置目標條件。
  • 目標條件的任何部分都不允許雙引號。 使用單引號。
  • 單引號代表目標條件的值。 因此,如果單引號是裝置名稱的一部分,則必須以另一個單引號逸出。 例如,若要以名為 operator'sDevice 的裝置為目標,請寫入 deviceId='operator''sDevice'
  • 目標條件值允許數位、字母和下列字元: "()<>@,;:\\"/?={} \t\n\r
  • 目標條件索引鍵中不允許下列字元: /;

優先順序

優先順序會定義部署是否應該套用至相對於其他部署的目標裝置。 部署優先順序是介於 0 到 2,147,483,647 範圍內的正整數。 較大的數位表示較高的優先順序。 如果 IoT Edge 裝置是以多個部署為目標,則會套用優先順序最高的部署。 不會套用優先順序較低的部署,也不會合並。 如果裝置以兩個以上的部署為目標,且優先順序相等,則會套用最近建立的部署(由建立時間戳記決定)。

標籤

標籤是字串索引鍵/值組,可用來篩選部署並加以分組。 部署可能會有多個標籤。 標籤是選擇性的,不會影響 IoT Edge 裝置的設定。

度量

根據預設,所有部署都會報告四個計量:

  • [目標] 顯示符合部署目標條件的 IoT Edge 裝置。
  • [套用 ] 會顯示目標 IoT Edge 裝置,這些裝置不是由另一個優先順序較高的部署為目標。
  • 報告成功 會顯示回報其模組已成功部署的 IoT Edge 裝置。
  • 報告失敗 會顯示回報一或多個模組的 IoT Edge 裝置未成功部署。 若要進一步調查錯誤,請從遠端連線到這些裝置並檢視記錄檔。

此外,您可以定義自己的自訂計量,協助監視和管理部署。

計量能提供在套用部署設定後,裝置所回報各種狀態的摘要計數。 計量可以查詢 edgeHub 模組對應項報告屬性 ,例如 lastDesiredStatus last連線Time

例如:

SELECT deviceId FROM devices
  WHERE properties.reported.lastDesiredStatus.code = 200

新增您自己的計量是選擇性的,且不會影響 IoT Edge 裝置的實際設定。

分層部署

分層部署是可以結合在一起的自動部署,以減少需要建立的唯一部署數目。 分層部署適用於許多自動部署中相同模組在不同組合中重複使用的案例。

分層部署具有與任何自動部署相同的基本元件。 它們會以裝置對應項中的標籤為基礎,並提供與標籤、計量和狀態報表相同的功能。 分層部署也有指派給他們的優先順序。 優先順序會決定裝置上多個部署的排名方式,而不是使用優先順序來判斷裝置上套用的部署。 例如,如果兩個分層部署具有同名的模組或路由,則會在覆寫較低優先順序時套用具有較高優先順序的分層部署。

系統執行時間模組稱為 edgeAgent 和 edgeHub,不會設定為分層部署的一部分。 任何以分層部署為目標的 IoT Edge 裝置,首先需要套用標準自動部署。 自動部署提供可新增分層部署的基礎。

IoT Edge 裝置只能套用一個標準自動部署,但可以套用多層自動部署。 以裝置為目標的任何分層部署,都必須具有高於該裝置的自動部署優先順序。

例如,請考慮以下管理建築物的公司案例。 該公司開發了 IoT Edge 模組,從安全性相機、動作感應器和電梯收集資料。 不過,並非所有建築物都可以使用所有三個模組。 使用標準自動部署,公司必須為其建築物所需的所有模組組合建立個別部署。

Screenshot of showing that standard automatic deployments need to accommodate every module combination.

不過,一旦公司切換到分層式自動部署,他們就可以為其建築物建立相同的模組組合,且部署較少的管理。 每個模組都有自己的分層部署,而裝置標籤會識別每個建築物所要新增的模組。

Screenshot that shows how layered automatic deployments simplify scenarios where the same modules are combined in different ways.

模組對應項設定

當您使用分層部署時,您可以刻意或其他方式,使用以裝置為目標的相同模組有兩個部署。 在這些情況下,您可以決定較高的優先順序部署應該覆寫模組對應項或附加至模組對應項。 例如,您可能有將相同模組套用至 100 個不同裝置的部署。 不過,其中 10 部裝置處於安全設施中,需要額外的設定,才能透過 Proxy 伺服器進行通訊。 您可以使用分層部署來新增模組對應項屬性,讓這 10 部裝置能夠安全地通訊,而不會覆寫基底部署的現有模組對應項資訊。

您可以在部署資訊清單中附加模組對應項所需的屬性。 在標準部署中,您會在 模組對應項的 properties.desired 區段中新增屬性。 但在分層部署中,您可以宣告所需屬性的新子集。

例如,在標準部署中,您可以使用下列所需屬性來新增模擬溫度感應器模組,告知其以 5 秒間隔傳送資料:

"SimulatedTemperatureSensor": {
  "properties.desired": {
    "SendData": true,
    "SendInterval": 5
  }
}

在以部分或全部相同裝置為目標的分層部署中,您可以新增屬性,告知模擬感應器傳送 1000 則訊息,然後停止。 您不想覆寫現有的屬性,因此您會在名為 的所需屬性 layeredProperties 內建立新的區段,其中包含新的屬性:

"SimulatedTemperatureSensor": {
  "properties.desired.layeredProperties": {
    "StopAfterCount": 1000
  }
}

已套用兩個部署的裝置,將會在模擬溫度感應器的模組對應項中反映下列屬性:

"properties": {
  "desired": {
    "SendData": true,
    "SendInterval": 5,
    "layeredProperties": {
      "StopAfterCount": 1000
    }
  }
}

如果您在分層部署中設定 properties.desired 模組對應項的欄位, properties.desired 將會在任何優先順序較低的部署中覆寫該模組所需的屬性。

階段式推出

階段式推出是一項整體程式,其中操作員會將變更部署到一組擴大的 IoT Edge 裝置。 目標是逐步進行變更,以減少進行大規模重大變更的風險。 自動部署可協助管理跨 IoT Edge 裝置的分階段推出。

分階段推出會在下列階段和步驟中執行:

  1. 藉由布建 IoT Edge 裝置並設定裝置對應項標籤,以 tag.environment='test' 建立 IoT Edge 裝置的測試環境。 測試環境應該鏡像部署最終目標的生產環境。
  2. 建立部署,包括所需的模組和組態。 目標條件應以測試 IoT Edge 裝置環境為目標。
  3. 在測試環境中驗證新的模組組態。
  4. 將新的標籤新增至目標條件,以更新部署以包含生產 IoT Edge 裝置的子集。 此外,確定部署的優先順序高於目前將目標設為那些裝置的其他部署。
  5. 檢視部署狀態,確認目標 IoT Edge 裝置上的部署成功。
  6. 更新部署以以所有剩餘的生產 IoT Edge 裝置為目標。

復原

如果您收到錯誤或設定錯誤,則可以回復部署。 因為部署會定義 IoT Edge 裝置的絕對模組組態,因此即使目標是移除所有模組,其他部署也必須以較低的優先順序鎖定相同的裝置。

刪除部署並不會從目標裝置中移除模組。 必須有另一個定義裝置新設定的部署,即使是空部署也一樣。

不過,如果部署是分層部署,刪除部署可能會從目標裝置移除模組。 分層部署會更新基礎部署,並可能新增模組。 移除分層部署會移除其基礎部署的更新,而可能會移除模組。

例如,裝置的基底部署 A 和分層部署 O 和 M 會套用到它上(以便將 A、O 和 M 部署部署到裝置上)。 如果接著刪除分層部署 M,則會將 A 和 O 套用至裝置,並移除部署 M 特有的模組。

依下列循序執行復原:

  1. 確認第二個部署也以相同的裝置集為目標。 如果復原的目標是移除所有模組,則第二個部署不應包含任何模組。
  2. 修改或移除您想要復原之部署的目標條件運算式,讓裝置不再符合目標條件。
  3. 檢視部署狀態以確認復原成功。
    • 回復部署不應再顯示已回復之裝置的狀態。
    • 第二個部署現在應該包含已復原之裝置的部署狀態。

下一步