本文說明如何在您學習、探索或疑難解答 Azure IoT 作業實例時使用一些常見工具。 這些工具除了 Azure 入口網站、Azure CLI、作業體驗Web UI和可檢視性資源所提供的功能之外。
Kubernetes 工具
Azure IoT 作業元件會在標準 Kubernetes 叢集中執行。 您可以使用 kubectl 和 k9s CLI 工具來與叢集互動和管理。
kubectl
kubectl 是用來管理叢集的 Kubernetes 命令行工具。 其有許多功能,您可以在官方 Kubernetes 檔中瞭解。 本文說明當您使用 Azure IoT 作業時常見的 kubectl 用途,例如列出執行中的 Pod 和檢視記錄。
設定 kubectl 以連線到您的實例
準備已啟用 Azure Arc 的 Kubernetes 叢集一文說明如何在部署 Kubernetes 叢集的相同電腦上執行kubectl命令時,設定以連線到kubectl 叢集。
提示
將 export KUBECONFIG=~/.kube/config 命令新增至 .bashrc 或 .bash_profile 檔案,如此一來,您就不需要在每次開啟新的終端機視窗時設定 KUBECONFIG 環境變數。
如果您將 Azure IoT 作業實例部署到已啟用 Arc 的 AKS-EE,則 kubectl 會自動為您設定組態。 您可以 kubectl 直接從部署叢集之電腦上的命令行執行命令。
您也可以從本機用戶端電腦執行 kubectl 命令,而不是部署已啟用 Arc 的叢集的電腦:
在單次步驟中,使用 SSH 連線到您部署叢集的電腦,並執行下列命令。 請務必以您的名稱取代 <your-name> :
kubectl create serviceaccount <your-name> -n default
kubectl create clusterrolebinding <your-name>-binding --clusterrole cluster-admin --serviceaccount default:<your-name>
kubectl apply -f - <<EOF
apiVersion: v1
kind: Secret
metadata:
name: <your-name>-secret
annotations:
kubernetes.io/service-account.name: <your-name>
type: kubernetes.io/service-account-token
EOF
TOKEN=$(kubectl get secret <your-name>-secret -o jsonpath='{$.data.token}' | base64 -d | sed 's/$/\n/g')
echo $TOKEN
記下令牌。 當您在用戶端電腦上執行 kubectl 命令時,您可以使用此權杖進行驗證。 您現在可以中斷與執行 Kubernetes 叢集的電腦連線。
若要在 kubectl 用戶端電腦上使用 來聯機到叢集,請開啟兩個終端機:
在第一個終端機中,執行下列命令來設定 Proxy 以連線到您的叢集。 請務必取代三個佔位元的值:
az connectedk8s proxy -n <your-arc-enabled-cluster-name> -g <your-arc-enabled-cluster-resource-group> --token <token-from-previous-step>當您在第二個終端機中執行
kubectl命令時,讓此終端機保持開啟。在第二個終端機中,您可以對遠端叢集執行
kubectl命令。 例如,若要列出命名空間中的azure-iot-operationsPod:kubectl get pods -n azure-iot-operations提示
您也可以執行命令,例如
k9skubectl使用此終端機中的組態。內容
kubectl會保持設定為遠端叢集,直到您關閉第一個終端機為止。
若要深入瞭解,請參閱 使用叢集連線安全地連線到已啟用 Azure Arc 的 Kubernetes 叢集。
命名空間
根據預設,Arc 和 Azure IoT 作業會在 Kubernetes 叢集中使用下列命名空間:
-
azure-iot-operations適用於 Azure IoT 作業元件。 -
azure-arc適用於已啟用 Azure Arc 的 Kubernetes 元件。
提示
若要檢視叢集中的所有命名空間,請執行下列命令: kubectl get namespaces。
一般 kubectl 命令
若要檢視命名空間中 azure-iot-operations 執行的所有 Pod,請執行下列命令:
kubectl get pods -n azure-iot-operations
輸出看起來會像下列範例這樣:
NAME READY STATUS RESTARTS AGE
adr-schema-registry-0 2/2 Running 0 19m
adr-schema-registry-1 2/2 Running 0 19m
aio-akri-agent-777477bc68-72lrg 1/1 Running 7 (83m ago) 21d
aio-broker-authentication-0 1/1 Running 7 (83m ago) 21d
aio-broker-backend-1-0 1/1 Running 11 (82m ago) 21d
aio-broker-backend-1-1 1/1 Running 7 (83m ago) 21d
aio-broker-diagnostics-probe-0 1/1 Running 11 (83m ago) 21d
aio-broker-diagnostics-service-0 1/1 Running 7 (83m ago) 21d
aio-broker-fluent-bit-6bkf2 1/1 Running 0 16m
aio-broker-frontend-0 1/1 Running 12 (83m ago) 21d
aio-broker-health-manager-0 1/1 Running 14 (82m ago) 21d
aio-broker-operator-0 1/1 Running 7 (83m ago) 21d
aio-broker-upgrade-status-job-1.0.4-bwlcc 0/1 Completed 0 77m
aio-broker-webhook-admission-65d67f8ddc-jct9j 1/1 Running 0 82m
aio-dataflow-admission-webhook-84dd44c8bd-6pw58 1/1 Running 7 (83m ago) 21d
aio-dataflow-operator-0 1/1 Running 14 (83m ago) 21d
aio-dataflow-upgrade-status-job-1.0.5-msmf4 0/1 Completed 0 77m
aio-opc-asset-discovery-54649d46cf-kb6qs 1/1 Running 2 (83m ago) 17d
aio-opc-media-1-785748ff6c-qkhgl 1/1 Running 1 (83m ago) 14d
aio-opc-opc.tcp-1-858b9ff67-dxwvb 1/1 Running 4 (80m ago) 17d
aio-opc-supervisor-5d6b9bfc49-fgt7d 1/1 Running 2 (83m ago) 17d
aio-operator-7b9b585dc6-bvfpd 2/2 Running 0 19m
aio-usage-28946280-f42k8 0/1 Completed 0 14d
aio-usage-28946340-45grx 0/1 Completed 0 14d
aio-usage-28946400-znn7v 0/1 Completed 0 13d
aio-usage-28946460-nrw4z 0/1 Completed 0 13d
aio-usage-28966500-mrcmf 0/1 Completed 0 55m
若要檢視 特定 Pod 的記錄 ,例如 aio-opc-opc.tcp-1-858b9ff67-dxwvb Pod,請執行下列命令:
kubectl logs aio-opc-opc.tcp-1-858b9ff67-dxwvb -n azure-iot-operations
若要檢視特定 Pod 的人類可 讀取描述 ,例如 aio-opc-opc.tcp-1-858b9ff67-dxwvb Pod,請執行下列命令:
kubectl describe pod aio-opc-opc.tcp-1-858b9ff67-dxwvb -n azure-iot-operations
在某些地方,Azure IoT 作業檔會使用 kubectl apply 命令來套用 Kubernetes 指令清單檔案,以在叢集中進行組態變更。
k9s
k9s 公用程式提供終端式 UI 來管理 Kubernetes 叢集。 它會使用您的 kubectl 設定來連線到您的叢集,並提供與叢集互動的可視化方式。 其預設檢視會列出叢集中目前正在執行的所有 Pod:
當您使用 Azure IoT 作業時,您可以篩選檢視,只顯示命名空間中的 azure-iot-operations Pod。
輸入
:以開啟命令面板,然後按nsEnter。在命名空間清單中,選取
azure-iot-operations並按 Enter。Pod 清單現在只會顯示 azure-iot-operations 命名空間中的 Pod:
提示
您現在可以使用數位索引鍵來套用篩選。 上一個螢幕快照顯示 0 顯示所有 Pod,1只會顯示 azure-iot-operations 命名空間中的 Pod。
您可以使用快速鍵來檢視 Pod 的相關信息。 例如:
若要描述 Pod,請在清單中選取它,然後按 d。
若要檢視 Pod 的記錄,請在清單中選取它,然後按 l。
提示
您可以使用數位索引鍵來巡覽記錄檔。
若要檢視叢集中 Pod 的其他自訂資源類型:
按 Ctrl-a 以顯示自訂資源類型的清單。
選取自訂資源類型,例如 裝置 ,然後按 Enter。
提示
若要依名稱搜尋自訂資源類型,請輸入 / ,然後開始輸入您要尋找的類型名稱。
選取自定義資源,然後選擇其中一個可用的作業。 例如,您可以選取裝置端點配置檔並按 y 來檢視裝置端點設定檔的 YAML 定義。 針對某些資源,您可以編輯組態。
下表說明您在 Azure IoT 作業中可能使用的某些自訂資源類型:
| 自訂資源類型 | 描述 |
|---|---|
devices |
表示裝置的組態。 |
assets |
表示資產的組態。 |
brokers、 、 brokerlisters、 brokerauthenticationsbrokerauthorizations |
表示 MQTT 訊息代理程式組態。 |
dataflows、 、 dataflowendpointsdataflowprofiles |
表示數據流的組態。 |
secrets、 、 secretsyncssecretproviderclasses |
代表秘密和秘密管理的組態。 |
MQTT 工具
當您在 Azure IoT 作業實例中瞭解及測試 MQTT 訊息代理程式時,您可以使用 MQTT 用戶端工具來與訊息代理程式互動。 不過,基於安全性考慮,Azure IoT 作業不會在叢集外部公開 MQTT 訊息代理程式。 作為解決方法,您有下列選項:
警告
這三種方法僅適用於開發和測試環境。 在任何情況下,您應該在生產環境中使用它們。
線上到叢集內的預設接聽程式。 此選項會使用預設組態,而且不需要額外的更新。 您僅限於一組小型 MQTT 用戶端工具。
NodePort使用服務在叢集外部公開 MQTT 訊息代理程式。 這個選項會要求您更新 MQTT 訊息代理程式設定。 您可以使用任何支援連線到特定埠的 MQTT 用戶端工具。LoadBalancer使用服務在叢集外部公開 MQTT 訊息代理程式。 這個選項會要求您更新 MQTT 訊息代理程式設定。 您可以使用任何支援連線到特定埠的 MQTT 用戶端工具。
線上到叢集內的預設接聽程式
若要連線到叢集內的預設接聽程式,您可以部署執行 CLI 型 MQTT 用戶端工具的 Pod,例如 mosquitto_sub 和 mosquitto_pub。 下列命令會將這類 Pod 部署到您的叢集:
kubectl apply -f https://raw.githubusercontent.com/Azure-Samples/explore-iot-operations/main/samples/quickstarts/mqtt-client.yaml
執行 Pod 之後,您可以連線到 Pod 中的殼層:
kubectl exec --stdin --tty mqtt-client -n azure-iot-operations -- sh
使用此殼層來執行命令,例如 mosquitto_sub 與 mosquitto_pub MQTT 訊息代理程序互動。 例如,若要訂閱主題下 azure-iot-operations/data 的所有主題:
mosquitto_sub --host aio-broker --port 18883 --topic "azure-iot-operations/data/#" --verbose --cafile /var/run/certs/ca.crt -D CONNECT authentication-method 'K8S-SAT' -D CONNECT authentication-data $(cat /var/run/secrets/tokens/broker-sat)
請注意命令如何從 Pod 的檔案系統載入憑證檔案和令牌。 指令清單檔案會將 mqtt-client.yaml 這些檔案掛接至 Pod。
若要從 azure-iot-operations/data/thermostat 主題接收單一訊息,請新增 -C 1 選項:
mosquitto_sub --host aio-broker --port 18883 --topic "azure-iot-operations/data/thermostat" -C 1 --verbose --cafile /var/run/certs/ca.crt -D CONNECT authentication-method 'K8S-SAT' -D CONNECT authentication-data $(cat /var/run/secrets/tokens/broker-sat)
若要檢視訊息中的 MQTT v5 使用者屬性,請使用 -F %P 選項:
mosquitto_sub --host aio-broker --port 18883 --topic "azure-iot-operations/data/thermostat" -V mqttv5 -F %P --cafile /var/run/certs/ca.crt -D CONNECT authentication-method 'K8S-SAT' -D CONNECT authentication-data $(cat /var/run/secrets/tokens/broker-sat)
若要將訊息發佈至 azure-iot-operations/data/valve 主題:
mosquitto_pub --host aio-broker --port 18883 --topic "azure-iot-operations/data/valve" --message "open:15%" --id "controller" --cafile /var/run/certs/ca.crt -D CONNECT authentication-method 'K8S-SAT' -D CONNECT authentication-data $(cat /var/run/secrets/tokens/broker-sat)
當您完成使用 MQTT 用戶端工具 Pod 時,您可以從叢集刪除它:
kubectl delete -f https://raw.githubusercontent.com/Azure-Samples/explore-iot-operations/main/samples/quickstarts/mqtt-client.yaml
若要深入瞭解此設定,請參閱 連線到叢集內的預設接聽程式。
NodePort使用 或服務LoadBalancer
如果您遵循設定節點埠或負載平衡器服務以在叢集外部公開 MQTT 訊息代理程式的步驟,您可以使用任何支援連線到特定埠的 MQTT 用戶端工具。 下列範例假設您未設定任何驗證、授權或 TLS 的服務。 如果您使用的是負載平衡器或已設定的埠,您現在可以使用您慣用的 MQTT 用戶端工具,連線到埠 1883 上的 MQTT 訊息代理程式。
例如,若要在 Kubernetes 叢集執行所在的電腦上執行開放原始 碼 mqttui 工具,請使用下列命令:
mqttui --broker mqtt://localhost:1883
提示
如果您已設定負載平衡器和埠 1883 已在主計算機的公用 IP 位址上開啟,您可以使用下列命令從不同的電腦連線到 MQTT 訊息代理程式: mqttui --broker mqtt://<cluster-machine-public-ip>:1883
您可以使用 mqttui 工具來訂閱主題、發佈訊息,以及檢視流經訊息代理程式的訊息:
若要在特定主題上顯示訊息,例如 azure-iot-operations/data/thermostat,請使用下列命令:
mqttui --broker mqtt://localhost:1883 azure-iot-operations/data/thermostat
若要將訊息發佈至 azure-iot-operations/data/valve 主題,請使用下列命令:
mqttui publish --broker mqtt://localhost:1883 azure-iot-operations/data/valve open:15%
若要在 Kubernetes 叢集執行所在的電腦上執行開放原始碼 MQTT Explorer 工具,請使用下列設定:
若要在本機計算機上執行開放原始碼 MQTT Explorer 工具,以連線到 Kubernetes 叢集執行所在的機器,請使用下列設定:
請確定 MQTT 總管至少 # 已設定主題:
線上之後,您可以在您訂閱和發佈訊息的主題中看到訊息: