快速入門:使用 K3s 在 GitHub Codespaces 中執行 Azure IoT 作業
在本快速入門中,您會將 Azure IoT 作業部署到已啟用 Azure Arc 的 Kubernetes 叢集,以便遠端管理您的裝置和工作負載。 在快速入門結束時,您會有可從雲端管理的叢集。 此端對端系列中的其餘快速入門是以此系列為基礎來定義範例資產、數據處理管線和視覺效果。
開始之前
本系列快速入門旨在協助您儘快開始使用 Azure IoT 操作,以便評估端對端案例。 在真正的開發或生產環境中,多個小組共同執行這些工作,有些工作可能需要更高的許可權。
為了獲得最佳的新使用者體驗,建議您使用 Azure 免費帳戶,讓您可以在這些快速入門中擁有資源擁有者權限。
我們也會使用 GitHub Codespaces 作為本快速入門的虛擬環境,讓您可以測試案例,而不需要在自己的電腦上安裝新的工具。 不過,如果您想要將 Azure IoT 作業部署到 Ubuntu 或 Azure Kubernetes Service (AKS) 上的本機叢集,請參閱 準備已啟用 Azure Arc 的 Kubernetes 叢集。
必要條件
開始之前,請準備下列先決條件:
Azure 訂用帳戶。 如果您沒有 Azure 訂用帳戶,請在開始之前建立免費帳戶。
GitHub 帳戶。
開發機器上已安裝 Visual Studio Code。 如需詳細資訊,請參閱下載 Visual Studio Code。
Microsoft.Authorization/roleAssignments/write 許可權在資源群組層級。
我們會解決什麼問題?
Azure IoT 操作是一套在 Kubernetes 叢集上執行的資料服務。 您希望這些叢集從雲端遠端管理,並能夠安全地與雲端資源和端點通訊。 在本快速入門中,我們會使用下列工作來解決這些疑慮:
- 在 GitHub Codespaces 中建立 Kubernetes 叢集。
- 將叢集連線至 Azure Arc 以進行遠端管理。
- 建立架構登錄。
- 將 Azure IoT 操作部署至您的叢集。
建立叢集
Azure IoT 作業可以部署到 Ubuntu 上的 K3、Azure Kubernetes Service (AKS) Edge Essentials 和 Azure 本機上的 AKS。 不過,為了快速方便起見,本快速入門會使用 GitHub Codespaces 來裝載您的叢集。 若要瞭解如何改為將 Azure IoT 作業部署到 Windows 或 Ubuntu 上的叢集,請參閱 準備已啟用 Azure Arc 的 Kubernetes 叢集。
注意
程式碼空間很容易快速設定,稍後卸除,但不適合效能評估或規模測試。 僅使用 GitHub Codespaces 進行探索。
Codespaces 環境足以完成快速入門步驟,但不支援進階設定。
在本節中,您會建立新的叢集。 如果您想要重複使用先前部署 Azure IoT 作業的叢集,請參閱清除資源以卸載 Azure IoT 作業中的步驟,再繼續進行。
Azure-Samples/explore-iot-operations Codespace 已預先設定了以下項目:
若要建立您的 Codespace 和叢集,請使用下列步驟:
在 GitHub Codespaces 中建立一個 Codespace。
為您的 Codespace 提供下列建議的祕密:
參數 值 SUBSCRIPTION_ID 您的 Azure 訂用帳戶識別碼。 RESOURCE_GROUP 將建立叢集的新 Azure 資源群組名稱。 LOCATION 靠近您的 Azure 區域。 如需目前支援的區域清單,請參閱支援的區域。 提示
您在此步驟中提供作為祕密的值會儲存在 GitHub 帳戶上,以供此 Codespace 和未來的 Codespace 使用。 它們會在 codespace 終端機中新增為環境變數,您可以在下一節的 CLI 命令中使用這些環境變數。
此外,此 Codespace 會建立環境變數
CLUSTER_NAME
,此環境變數會使用 codespace 名稱進行設定。選取 [建立新的 codespace]。
一旦 Codespace 就緒,請選取左上方的功能表按鈕,然後選取 [在 VS Code Desktop 中開啟]。
如果出現提示,請安裝適用於 Visual Studio Code 的 GitHub Codespaces 延伸模組,然後登入 GitHub。
在 Visual Studio Code 中,選取 [檢視]>[終端機]。
使用此終端機來執行管理叢集的所有 CLI 命令。
將叢集連線至 Azure Arc
將叢集連線至 Azure Arc:
在您的 Codespace 終端機中,登入 Azure CLI:
az login
提示
如果您在瀏覽器 (而非 VS Code Desktop) 中使用 GitHub Codespace 環境,則執行
az login
會傳回 localhost 錯誤。 若要修正錯誤,請:- 在 VS Code Desktop 中開啟 Codespace,然後回到瀏覽器終端機中,並重新執行
az login
。 - 或是,在您於瀏覽器上收到 localhost 錯誤後,從瀏覽器複製 URL,並在新的終端機索引標籤中執行
curl "<URL>"
。您應該會看到 JSON 回應,訊息為「您已登入 Microsoft Azure!」。
- 在 VS Code Desktop 中開啟 Codespace,然後回到瀏覽器終端機中,並重新執行
登入之後,Azure CLI 會顯示您的所有訂用帳戶,並以星號
*
表示您的預設訂用帳戶。 若要繼續進行預設訂用帳戶,請選擇取Enter
。 否則,請輸入您想要使用的 Azure 訂用帳戶數目。在您的訂用帳戶中註冊必要的資源提供者:
注意
每個訂用帳戶只需要執行此步驟一次。 若要註冊資源提供者,您需要
/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 group create 命令,在 Azure 訂用帳戶中建立資源群組來儲存所有資源:
az group create --location $LOCATION --resource-group $RESOURCE_GROUP
使用 az connectedk8s connect 命令為您的 Kubernetes 叢集啟用 Arc,並在 Azure 資源群組中管理此叢集:
az connectedk8s connect --name $CLUSTER_NAME --location $LOCATION --resource-group $RESOURCE_GROUP
提示
$CLUSTER_NAME
的值會自動設定為 Codespace 的名稱。 如果您想要使用不同的名稱,請取代環境變數。objectId
取得 Azure Arc 服務在您的租使用者中使用的 Microsoft Entra ID 應用程式,並將其儲存為環境變數。 執行下列命令,完全如寫入一樣,而不需要變更 GUID 值。export OBJECT_ID=$(az ad sp show --id bc313c14-388c-4e7d-a58e-70017303ee3b --query id -o tsv)
使用 az connectedk8s enable-features 命令,在您的叢集上啟用自訂位置支援。 此命令會使用 Azure Arc 服務所使用的 Microsoft Entra ID 應用程式
objectId
。 在部署 Kubernetes 叢集的電腦上執行此命令:az connectedk8s enable-features -n $CLUSTER_NAME -g $RESOURCE_GROUP --custom-locations-oid $OBJECT_ID --features cluster-connect custom-locations
建立記憶體帳戶和架構登錄
架構登錄是同步儲存在雲端和邊緣訊息定義的同步存放庫。 Azure IoT 作業需要叢集上的架構登錄。 架構登錄需要 Azure 記憶體帳戶,以取得儲存在雲端中的架構資訊。
在本節中建立架構登錄的命令需要 資源群組層級的 Microsoft.Authorization/roleAssignments/write 許可權。 此許可權可用來為架構登錄提供參與者角色,以便寫入記憶體帳戶。
在 Codespaces 終端機中執行下列 CLI 命令。
為您在本節中建立的資源設定環境變數。
預留位置 值 <STORAGE_ACCOUNT_NAME> 儲存體帳戶的名稱。 儲存體帳戶名稱長度必須介於 3 到 24 個字元之間,且只包含數位和小寫字母。 <SCHEMA_REGISTRY_NAME> 架構登錄的名稱。 <SCHEMA_REGISTRY_NAMESPACE> 架構登錄命名空間的名稱。 命名空間會唯一識別租使用者內的架構登錄。 STORAGE_ACCOUNT=<STORAGE_ACCOUNT_NAME> SCHEMA_REGISTRY=<SCHEMA_REGISTRY_NAME> SCHEMA_REGISTRY_NAMESPACE=<SCHEMA_REGISTRY_NAMESPACE>
建立已啟用階層命名空間的記憶體帳戶。
az storage account create --name $STORAGE_ACCOUNT --location $LOCATION --resource-group $RESOURCE_GROUP --enable-hierarchical-namespace
建立可連線到記憶體帳戶的架構登錄。 此命令也會在記憶體帳戶中建立稱為 架構 的 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 IoT 操作
在本節中,您會使用 Azure IoT Operations 元件的相依性來設定叢集,然後部署 Azure IoT 作業。
在 Codespaces 終端機中執行下列 CLI 命令。
初始化 Azure IoT 作業的叢集。
提示
init
每個叢集只需要執行一次命令。 如果您要重複使用已部署最新 Azure IoT 作業版本的叢集,您可以略過此步驟。az iot ops init --cluster $CLUSTER_NAME --resource-group $RESOURCE_GROUP
此命令可能需要幾分鐘的時間才能完成。 您可以在終端機中監看部署進度中的進度。
部署 Azure IoT 操作。
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) --broker-frontend-replicas 1 --broker-frontend-workers 1 --broker-backend-part 1 --broker-backend-workers 1 --broker-backend-rf 2 --broker-mem-profile Low
此命令可能需要幾分鐘的時間才能完成。 您可以在終端機中監看部署進度中的進度。
如果您收到錯誤,指出您的裝置必須經過管理才能存取您的資源,再次執行
az login
並確定您已使用瀏覽器以互動方式登入。
檢視叢集中的資源
部署完成後,您可以使用 kubectl 命令來觀察叢集上的變更,或者,因為叢集已啟用 Arc,您可以使用 Azure 入口網站。
若要檢視叢集上的 Pod,請執行下列命令:
kubectl get pods -n azure-iot-operations
若要在 Azure 入口網站上檢視資源,請使用下列步驟:
在 Azure 入口網站 中,移至包含 Azure IoT 作業實例的資源群組,或搜尋並選取 [Azure IoT 作業]。
選取 Azure IoT 操作執行個體的名稱。
在實例的 [ 概觀] 頁面上,選取 [ 資源摘要 ] 索引標籤,以檢視已部署至叢集之資源的布建狀態。
我們如何解決問題?
在本快速入門中,您設定已啟用 Arc 的 Kubernetes 叢集,以便與 Azure IoT 操作元件安全地通訊。 然後,您將這些元件部署至叢集。 在此測試案例中,您有一個在 Codespaces 中執行的 Kubernetes 叢集。 不過,在生產情節中,您可以使用相同的步驟,將工作負載部署到多個網站上的許多叢集。
清除資源
如果您繼續進行下一個快速入門,請保留所有資源。
如果您想要移除 Azure IoT 作業部署,但保留叢集,請使用 az iot ops delete 命令:
az iot ops delete --cluster $CLUSTER_NAME --resource-group $RESOURCE_GROUP
如果您想要刪除您為此快速入門建立的所有資源,請刪除您已部署 Azure IoT 作業的 Kubernetes 叢集,然後移除包含叢集的 Azure 資源群組。
如果您在這些快速入門中使用 Codespaces,請從 GitHub 刪除您的 Codespace。