共用方式為


針對 Azure IoT 作業實例進行疑難解答的秘訣和工具

本文說明如何在您學習、探索或疑難解答 Azure IoT 作業實例時使用一些常見工具。 這些工具除了 Azure 入口網站、Azure CLI、作業體驗Web UI和可檢視性資源所提供的功能之外。

Kubernetes 工具

Azure IoT 作業元件會在標準 Kubernetes 叢集中執行。 您可以使用 kubectlk9s 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 用戶端電腦上使用 來聯機到叢集,請開啟兩個終端機:

  1. 在第一個終端機中,執行下列命令來設定 Proxy 以連線到您的叢集。 請務必取代三個佔位元的值:

    az connectedk8s proxy -n <your-arc-enabled-cluster-name> -g <your-arc-enabled-cluster-resource-group> --token <token-from-previous-step>
    

    當您在第二個終端機中執行 kubectl 命令時,讓此終端機保持開啟。

  2. 在第二個終端機中,您可以對遠端叢集執行 kubectl 命令。 例如,若要列出命名空間中的 azure-iot-operations Pod:

    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:

顯示預設 k9s 檢視的螢幕快照。

當您使用 Azure IoT 作業時,您可以篩選檢視,只顯示命名空間中的 azure-iot-operations Pod。

  1. 輸入 : 以開啟命令面板,然後按 nsEnter

  2. 在命名空間清單中,選取 azure-iot-operations 並按 Enter

  3. Pod 清單現在只會顯示 azure-iot-operations 命名空間中的 Pod:

    顯示已篩選至 azure-iot-operations 命名空間之 Pod k9s 清單的螢幕快照。

提示

您現在可以使用數位索引鍵來套用篩選。 上一個螢幕快照顯示 0 顯示所有 Pod,1只會顯示 azure-iot-operations 命名空間中的 Pod。

您可以使用快速鍵來檢視 Pod 的相關信息。 例如:

  • 若要描述 Pod,請在清單中選取它,然後按 d

    顯示執行中 Pod k9s 描述的螢幕快照。

  • 若要檢視 Pod 的記錄,請在清單中選取它,然後按 l

    顯示 k9s 中執行中 Pod 記錄的螢幕快照。

    提示

    您可以使用數位索引鍵來巡覽記錄檔。

若要檢視叢集中 Pod 的其他自訂資源類型:

  1. Ctrl-a 以顯示自訂資源類型的清單。

  2. 選取自訂資源類型,例如 裝置 ,然後按 Enter

    提示

    若要依名稱搜尋自訂資源類型,請輸入 / ,然後開始輸入您要尋找的類型名稱。

  3. 選取自定義資源,然後選擇其中一個可用的作業。 例如,您可以選取裝置端點配置檔並按 y 來檢視裝置端點設定檔的 YAML 定義。 針對某些資源,您可以編輯組態。

下表說明您在 Azure IoT 作業中可能使用的某些自訂資源類型:

自訂資源類型 描述
devices 表示裝置的組態。
assets 表示資產的組態。
brokers、 、 brokerlistersbrokerauthenticationsbrokerauthorizations 表示 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_submosquitto_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_submosquitto_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 工具來訂閱主題、發佈訊息,以及檢視流經訊息代理程式的訊息:

顯示顯示所有主題之 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 localhost 設定的螢幕快照。

若要在本機計算機上執行開放原始碼 MQTT Explorer 工具,以連線到 Kubernetes 叢集執行所在的機器,請使用下列設定:

顯示 MQTT Explorer 遠端主機設定的螢幕快照。

請確定 MQTT 總管至少 # 已設定主題:

顯示 MQTT Explorer 預設主題設定的螢幕快照。

線上之後,您可以在您訂閱和發佈訊息的主題中看到訊息:

顯示已訂閱 Azure IoT 作業主題之 MQTT Explorer 的螢幕快照。