了解單一裝置或大規模的 IoT Edge 自動部署
適用於: IoT Edge 1.5 IoT Edge 1.4
重要
IoT Edge 1.5 LTS 和 IoT Edge 1.4 LTS 為支援的版本。 IoT Edge 1.4 LTS 於 2024 年 11 月 12 日結束生命週期。 如果您是舊版,請參閱更新 IoT Edge。
自動部署和分層部署可協助您管理和設定大量 IoT Edge 裝置上的模組。
Azure IoT Edge 提供兩種方式來設定模組以在 IoT Edge 裝置上執行。 第一個方法是在逐一在裝置上部署模組。 您可以建立一個部署資訊清單,然後依名稱將其套用至特定裝置。 第二種方法是自動將模組部署到任何符合一組既定條件的已註冊裝置。 您可以建立一個部署資訊清單,然後根據裝置對應項中的標籤定義其所套用的裝置。
您無法合併個別裝置和自動部署。 一旦您開始以自動部署的 IoT Edge 裝置為目標 (包含或不含分層部署),就不再支援個別裝置部署。
本文著重於多群裝置的設定和監視,統稱為 IoT Edge 自動部署。
基本部署步驟如下所示:
- 操作員會定義部署資訊清單,其中描述一組模組以及目標裝置。
- 因此,IoT 中樞服務會與所有目標裝置通訊,並利用宣告的模組來設定。
- IoT 中樞服務會從 IoT Edge 裝置擷取狀態,並將其提供給操作員使用。 例如,操作員可在未成功設定 Edge 裝置時看見,或是查看模組在執行階段期間是否失敗。
- 每當新目標的 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
- [無]
在建構目標條件時,請考量以下限制:
- 在裝置對應項中,您只能使用標籤、報告的屬性或 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 或 lastConnectTime。
例如:
SELECT deviceId FROM devices
WHERE properties.reported.lastDesiredStatus.code = 200
您可以選擇是否要新增自己的計量,這不會對 IoT Edge 裝置的實際設定產生任何影響。
分層部署
分層部署是可以結合在一起的自動部署,以減少需要建立的唯一部署數目。 分層部署適用於許多自動部署中相同模組在不同組合中重複使用的案例。
分層部署具有與任何自動部署相同的基本元件。 其會根據裝置對應項中的標籤設定目標裝置,並提供與標籤、計量和狀態報告相同的功能。 分層部署也有指派給他們的優先順序。 優先順序會決定裝置上多個部署的排名方式,而不是使用優先順序來判斷裝置上套用的部署。 例如,如果兩個分層部署具有同名的模組或路由,則會在覆寫較低優先順序時套用具有較高優先順序的分層部署。
系統執行階段模組 (稱為 edgeAgent 和 edgeHub) 不會設定為分層部署的一部分。 任何以分層部署為目標的 IoT Edge 裝置,首先需要套用標準自動部署。 自動部署提供可新增分層部署的基礎。
IoT Edge 裝置只能套用一個標準自動部署,但可以套用多層自動部署。 以裝置為目標的任何分層部署,都必須具有高於該裝置的自動部署優先順序。
例如,請考慮以下管理建築物的公司案例。 該公司開發了 IoT Edge 模組,從安全性相機、動作感應器和電梯收集資料。 不過,並非所有建築物都可以使用所有三個模組。 使用標準自動部署,公司必須為其建築物所需的所有模組組合建立個別部署。
不過,一旦公司切換到分層式自動部署,即可為其建築物建立相同的模組組合,且降低要管理的部署。 每個模組都有自己的分層部署,而裝置標籤會識別每個建築物所要新增的模組。
模組對應項設定
當您使用分層部署時,您可能會有意或無意的用相同的模組對裝置進行兩次部署。 在這些情況下,您可以決定較高優先級的部署是要覆寫模組對應項,還是附加到模組對應項。 舉例來說,您的部署可能會將相同的模組套用至 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 裝置的階段式推出。
階段式推出會在下列階段和步驟中執行:
- 藉由佈建 IoT Edge 裝置並設定
tag.environment='test'
等裝置對應項標籤,以建立 IoT Edge 裝置的測試環境。 測試環境應該鏡像部署最終目標的實際執行環境。 - 建立包括所需模組和設定的部署。 目標條件應以測試 IoT Edge 裝置環境為目標。
- 在測試環境中驗證新的模組設定。
- 將新的標籤新增至目標條件,更新部署以包含生產 IoT Edge 裝置的子集。 此外,確定部署的優先順序高於目前將目標設為那些裝置的其他部署。
- 藉由檢視部署狀態,來確認已在目標 IoT Edge 裝置上成功部署。
- 更新部署,以所有剩餘的生產 IoT Edge 裝置為目標。
復原
如果您收到錯誤或設定錯誤,則可以復原部署。 因為部署會定義 IoT Edge 裝置的絕對模組設定,因此即使目標是移除所有模組,其他部署也必須以較低的優先順序將目標設定為相同的裝置。
刪除部署並不會從目標裝置中移除模組。 必須有另一個定義裝置新設定的部署,即使是空部署也一樣。
不過,如果部署為分層部署,則刪除部署可能會從目標裝置移除模組。 分層部署會更新基礎部署,並可能會新增模組。 移除分層部署隨即移除其基礎部署的更新,而可能會移除模組。
例如,裝置會有基底部署 A,以及對其套用分層部署 O 和 M (如此一來,A、O 和 M 部署都會部署到裝置上)。 如果接著刪除分層部署 M,則會將 A 和 O 套用至裝置,並移除部署 M 特有的模組。
依下列循序執行復原:
- 確認第二個部署也以一組相同的裝置為目標。 如果復原的目標是移除所有模組,則第二個部署不應包含任何模組。
- 修改或移除您想要復原部署的目標條件運算式,讓裝置不再符合目標條件。
- 檢視部署狀態以確認復原成功。
- 復原部署不應再顯示已復原裝置的狀態。
- 第二個部署現在應該包含已復原裝置的部署狀態。
下一步
- 逐步解說大規模部署和監視 IoT Edge 模組中,用來建立、更新或刪除部署的步驟。
- 深入了解其他 IoT Edge 概念,例如 IoT Edge 執行階段和 IoT Edge 模組。