快速入門:在 GitHub Codespaces 中使用 K3s 執行 Azure IoT 運作

在這個快速入門中,你將 Azure IoT 操作 部署到 Azure Arc 啟用的 Kubernetes 叢集,讓你能遠端管理裝置與工作負載。 在此快速入門結束時,您會有可從雲端管理的叢集。 此端對端系列中的其餘快速入門以這個系列為基礎來定義範例資產、資料處理管線及視覺效果。

開始之前

這系列快速入門課程旨在幫助您盡快開始使用 Azure IoT 操作,從而評估端到端的情境。 在真正的開發或生產環境中,這些工作會由多個小組共同執行,且有些工作可能需要更高的權限。

為了獲得最佳的新使用者體驗,我們建議使用 Azure 免費帳號,這樣你就能擁有這些快速入門資源的擁有者權限。

我們使用 GitHub Codespaces 作為這個快速入門的虛擬環境,讓你能在不安裝新工具的情況下測試情境。 如果您想了解如何將 Azure IoT 操作 部署至 Ubuntu 或 Azure Kubernetes Service (AKS) 上的本機叢集,請參閱 準備已啟用 Azure Arc 的 Kubernetes 叢集,但這不是本快速入門的必要步驟。

重要事項

程式碼空間很容易快速設置,之後拆除,但不適合用於生產環境、效能評估或規模測試。 只用 GitHub Codespaces 來探索。

Codespaces 環境足以完成快速啟動步驟,但不支援像 安全設定這類進階設定。 請參考 GitHub 中的這些腳本,以取得搭配安全設定的生產就緒部署。

必要條件

開始之前,請符合下列必要條件:

  • 一個GitHub帳戶。

  • Visual Studio Code 安裝在您的開發機器上。 欲了解更多資訊,請參閱下載 Visual Studio Code

  • 資源群組層級中的 Microsoft.Authorization/roleAssignments/write 權限。

我們會解決什麼問題?

Azure IoT 操作 是一套運行於 Kubernetes 叢集上的資料服務套件。 您希望這些叢集從雲端遠端管理,並能夠安全地與雲端資源和端點通訊。 在本快速入門中,我們會使用下列工作來解決這些疑慮:

  1. 在 GitHub Codespaces 建立一個 Kubernetes 叢集。
  2. 將叢集連接到 Azure Arc 進行遠端管理。
  3. 建立結構描述登錄。
  4. 將 Azure IoT 操作 部署到你的叢集。

建立叢集

在本節中,您會建立新的叢集。

Azure-Samples/explore-iot-operations 程式碼空間預先配置如下:

  • 輕量型 Kubernetes 叢集 K3d 中執行的 K3s
  • Azure CLI
  • 用來管理 Kubernetes 資源的 Kubectl
  • 其他實用的工具,例如 Helmk9s

若要建立您的 Codespace 和叢集,請使用下列步驟:

  1. 在 GitHub Codespaces 建立一個程式碼空間。

    建立一個explore-iot-operations的codespace

  2. 為您的 Codespace 提供下列建議的祕密:

    參數
    訂閱識別碼 你的 Azure 訂閱 ID。
    資源群組 一個新的 Azure 資源群組名稱,你的叢集將會在那裡建立。
    位置 你附近的 Azure 區域。 如需目前支援的區域清單,請參閱支援的區域

    提示

    你在此步驟提供作為秘密的數值會儲存在你的 GitHub 帳號,供本次及未來的 Codespaces 使用。 這些值會新增為 Codespace 終端機中的環境變數,您可以在下一節的 CLI 命令中使用這些環境變數。

    此外,此 Codespace 會建立使用 Codespace 名稱設定的 CLUSTER_NAME 環境變數。

  3. 選取 [建立新的 codespace]

  4. 一旦 Codespace 就緒,請選取左上方的功能表按鈕,然後選取 [在 VS Code Desktop 中開啟]

    顯示在 VS Code Desktop 中開啟 Codespace 的螢幕擷取畫面。

  5. 如果出現提示,請安裝適用於 Visual Studio Code 的 GitHub Codespaces 擴充功能,並登入 GitHub。

  6. 在Visual Studio Code中,選擇 View>Terminal

    使用此終端機來執行管理叢集的所有 CLI 命令。

重要事項

本文的程式碼空間使用一個 8 核心的運算實例。 如果你長期維持程式碼空間運作,這會影響你的預算。 若要避免產生非預期費用,如果您在本快速入門的各篇文章之間會暫停較長一段時間,請務必停止您的程式碼空間。 當你準備好繼續時,可以重新開始。 欲了解更多資訊,請參閱 「停止與啟動碼空間」。

連接叢集到 Azure Arc

要將叢集連接到 Azure Arc:

  1. 在你的 codespace 終端機中,登入 Azure CLI:

    az login
    

    提示

    如果你是在瀏覽器中使用 GitHub codespace 環境,而非 VS Code 桌面版,執行 az login 會回傳 localhost 錯誤。 若要修正錯誤,請:

    • 在 VS Code Desktop 中開啟 Codespace,然後回到瀏覽器終端機中,並重新執行 az login
    • 或者,當你在瀏覽器出現 localhost 錯誤後,從瀏覽器複製網址,並在新的終端機分頁執行 curl "<URL>"。你應該會看到一個 JSON 回應,訊息是「你已登入 Microsoft Azure!」
  2. 登入後,Azure CLI會顯示你所有的訂閱內容,並以星號標示你的預設訂閱*。 若要繼續使用預設訂用帳戶,請選取 Enter。 否則,請輸入你想使用的 Azure 訂閱號碼。

  3. 在您的訂用帳戶中註冊必要的資源提供者:

    提示

    每個訂用帳戶只需要執行此步驟一次。 若要註冊資源提供者,您必須要有執行 /register/action 作業的權限,該權限包含在訂用帳戶的參與者和擁有者角色中。 欲了解更多資訊,請參閱 Azure 資源提供者與類型 類型

    az provider register -n "Microsoft.ExtendedLocation"
    az provider register -n "Microsoft.Kubernetes"
    az provider register -n "Microsoft.KubernetesConfiguration"
    az provider register -n "Microsoft.IoTOperations"
    az provider register -n "Microsoft.DeviceRegistry"
    az provider register -n "Microsoft.SecretSyncController"
    az provider register -n "Microsoft.Storage"
    
  4. 請使用 az 群組 create 指令在你的Azure訂閱中建立資源群組來儲存所有資源:

    az group create --location $LOCATION --resource-group $RESOURCE_GROUP
    
  5. 請使用 az connectedk8s connect 指令啟用 Arc 的 Kubernetes 叢集,並將其作為 Azure 資源群組的一部分來管理:

    az connectedk8s connect --name $CLUSTER_NAME --location $LOCATION --resource-group $RESOURCE_GROUP
    

    提示

    $CLUSTER_NAME 的值會自動設定為 Codespace 的名稱。 如果您想要使用不同的名稱,請取代環境變數。

  6. 取得租戶中Azure Arc服務使用的Microsoft Entra ID應用程式的 objectId,並將其存為環境變數。 完全按照書面指令執行下列命令,不變更 GUID 值。

    export OBJECT_ID=$(az ad sp show --id bc313c14-388c-4e7d-a58e-70017303ee3b --query id -o tsv)
    
  7. 使用 az connectedk8s enable-features 命令,在您的叢集上啟用自訂位置支援。 此指令使用Azure Arc服務所使用的Microsoft Entra ID應用程式的 objectId

    az connectedk8s enable-features -n $CLUSTER_NAME -g $RESOURCE_GROUP --custom-locations-oid $OBJECT_ID --features cluster-connect custom-locations
    

安裝最新版本的 az iot ops

此快速入門使用最新版本的 Azure IoT 操作。 要安裝最新版本,你需要最新版本的 Azure IoT 操作 CLI 擴充功能:

az extension add --upgrade --name azure-iot-ops

建立儲存體帳戶和結構描述登錄

結構描述登錄是將訊息定義同時儲存在雲端和邊緣的同步存放庫。 Azure IoT 操作 需要在叢集上建立 schema 登錄檔。 架構登錄需要一個 Azure 儲存帳號來存放雲端的結構資訊。

本節中用於建立結構描述登錄的命令,需要在資源群組層級具備 Microsoft.Authorization/roleAssignments/write 權限。 此權限可用來為結構描述登錄提供參與者角色,使其能夠寫入儲存體帳戶。

在 Codespaces 終端機中執行下列 CLI 命令。

  1. 為您在本節中建立的資源設定環境變數。

    預留位置
    <儲存帳戶名稱> 您的儲存體帳戶名稱。 儲存體帳戶名稱必須介於 3 到 24 個字元的長度,且只能包含數字和小寫字母。
    <SCHEMA_REGISTRY_NAME> 您的結構描述登錄名稱。 結構描述登錄名稱只能包含數字、小寫字母和連字號。
    <SCHEMA_REGISTRY_NAMESPACE> 您的結構描述登錄命名空間名稱。 命名空間會唯一識別租用戶內的結構描述登錄。 結構描述登錄命名空間名稱只能包含數字、小寫字母和連字號。
    STORAGE_ACCOUNT=<STORAGE_ACCOUNT_NAME>
    SCHEMA_REGISTRY=<SCHEMA_REGISTRY_NAME>
    SCHEMA_REGISTRY_NAMESPACE=<SCHEMA_REGISTRY_NAMESPACE>
    
  2. 建立已啟用階層命名空間的儲存體帳戶。

    az storage account create --name $STORAGE_ACCOUNT --location $LOCATION --resource-group $RESOURCE_GROUP --enable-hierarchical-namespace
    
  3. 建立連線至儲存體帳戶的結構描述登錄。 這個指令也會在儲存帳號中建立一個名為 schemas 的 blob 容器。

    az iot ops schema registry create --name $SCHEMA_REGISTRY --resource-group $RESOURCE_GROUP --registry-namespace $SCHEMA_REGISTRY_NAMESPACE --sa-resource-id $(az storage account show --name $STORAGE_ACCOUNT -o tsv --query id)
    

建立 Azure 裝置註冊表命名空間

Azure IoT 操作 和 Azure 裝置登錄使用命名空間來組織資產與裝置。 每個 Azure IoT 操作 實例都使用單一命名空間來管理其資產與裝置。

執行以下 CLI 指令來建立 Azure 裝置登錄檔命名空間。

az iot ops ns create -n myqsnamespace -g $RESOURCE_GROUP

部署 Azure IoT 作業

在這個區塊中,你要用 Azure IoT 操作 元件的相依性來配置叢集,然後部署 Azure IoT 操作。

在 Codespaces 終端機中執行下列 CLI 命令。

  1. 初始化你的叢集以啟用 Azure IoT 操作。

    提示

    每個叢集只需要執行一次 init 命令。

    az iot ops init --cluster $CLUSTER_NAME --resource-group $RESOURCE_GROUP
    

    此命令可能需要幾分鐘的時間才能完成。 您可以在終端機中監看部署進度顯示中的進度。

  2. 部署 Azure IoT 操作. 此指令包含了你在以下快速入門中使用的OPC UA可選連接器。

    az iot ops create --cluster $CLUSTER_NAME --resource-group $RESOURCE_GROUP --name ${CLUSTER_NAME}-instance --sr-resource-id $(az iot ops schema registry show --name $SCHEMA_REGISTRY --resource-group $RESOURCE_GROUP -o tsv --query id) --ns-resource-id $(az iot ops ns show --name myqsnamespace --resource-group $RESOURCE_GROUP -o tsv --query id) --broker-frontend-replicas 1 --broker-frontend-workers 1  --broker-backend-part 1  --broker-backend-workers 1 --broker-backend-rf 2 --broker-mem-profile Low  --feature opcua.mode=Stable
    

    此命令可能需要幾分鐘的時間才能完成。 您可以在終端機中監看部署進度顯示中的進度。

    如果您收到錯誤,指出您的裝置必須經過管理才能存取您的資源,請再次執行 az login,並確實使用瀏覽器以互動方式登入。

檢視叢集中的資源

部署完成後,你可以使用 kubectl 指令觀察叢集的變動,或者因為叢集支援 Arc,可以使用 Azure 入口網站。

若要檢視叢集上的 Pod,請執行下列命令:

kubectl get pods -n azure-iot-operations

要在 Azure 入口網站上查看您的資源,請使用以下步驟:

  1. Azure 入口網站,前往包含你Azure IoT 操作實例的資源群組,或搜尋並選擇 Azure IoT 操作

  2. 選擇您的 Azure IoT 操作 實例名稱。

  3. 在執行個體的 [概觀] 頁面上,選取 [資源摘要] 索引標籤,以檢視已部署至叢集之資源的佈建狀態。

    截圖,顯示你啟用 Arc 叢集上的Azure IoT 操作實例。

我們如何解決問題?

在這個快速入門中,你設定了支援 Arc 的 Kubernetes 叢集,使其能與 Azure IoT 操作 元件安全通訊。 然後,您將這些元件部署至叢集。 在此測試案例中,您有一個在 Codespaces 中執行的 Kubernetes 叢集。 不過,在生產情節中,您可以使用相同的步驟,將工作負載部署到多個網站上的許多叢集。

清理資源

如果您繼續進行下一個快速入門,請保留所有資源。

如果您在進入下一個快速入門前暫停,建議您停止程式碼空間,以避免不必要的費用。 欲了解更多資訊,請參閱 「停止與啟動碼空間」。

如果你想刪除為這個快速入門建立的所有資源,請移除包含你Azure Arc連接叢集及此快速入門中其他資源的Azure資源群組。 然後從 GitHub 刪除你的 Codespace,以及你為它建立的秘密。 若要刪除你的程式碼空間和秘密,請參見 刪除程式碼空間刪除秘密

後續步驟