你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
本文介绍如何使用一些常用工具来学习、探索或排查 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
命令时,如何配置 以连接到 k3skubectl
群集。
提示
将 export KUBECONFIG=~/.kube/config
命令添加到 .bashrc 或 .bash_profile 文件,这样就无需在每次打开新的终端窗口时设置 环境变量。KUBECONFIG
如果将 Azure IoT 操作实例部署到已启用 Arc 的 AKS-EE,系统会为你自动设置 kubectl
配置。 可以在部署群集的计算机上直接从命令行运行 kubectl
命令。
此外,还可以从本地客户端计算机(而不是部署了已启用 Arc 的群集的计算机)运行 kubectl
命令:
作为一次性步骤,使用 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
连接到群集,请打开两个终端:
在第一个终端中,运行以下命令,将代理配置为连接到群集。 请务必替换三个占位符的值:
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-operations
命名空间中的 Pod:kubectl get pods -n azure-iot-operations
提示
还可以运行在此终端中使用
k9s
配置的命令,例如kubectl
。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。
键入
:
打开命令面板,然后键入ns
,接着按 Enter 键。在命名空间列表中,选择
azure-iot-operations
,然后按 Enter 键。Pod 列表现在只显示 azure-iot-operations 命名空间中的 Pod:
提示
现在可以使用数字键来应用筛选器。 前面的屏幕截图显示,0 显示所有 Pod,1 只显示 azure-iot-operations 命名空间中的 Pod。
可以使用快捷键查看 Pod 的信息。 例如:
要描述 Pod,请在列表中选择它,然后按 d。
要查看 Pod 日志,请在列表中选择它,然后按 l。
提示
可以使用数字键来浏览日志文件。
要查看群集中 Pod 以外的自定义资源类型,请执行以下操作:
按 Ctrl-a 显示自定义资源类型列表。
选择自定义资源类型,例如 assetendpointprofiles,然后按 Enter 键。
提示
若要按名称搜索自定义资源类型,请键入 /,然后开始键入要查找的类型的名称。
选择自定义资源,并选择其中一个可用的操作。 例如,可以通过选择资产终结点配置文件并按 y 来查看其 YAML 定义。 对于某些资源,可以编辑其配置。
下表展示了可在 Azure IoT 操作中使用的一些自定义资源类型:
自定义资源类型 | 说明 |
---|---|
assetendpointprofiles |
表示资产终结点的配置。 |
assets |
表示资产的配置。 |
brokers 、brokerlisters 、brokerauthentications 、brokerauthorizations |
表示 MQTT 代理的配置。 |
dataflows 、dataflowendpoints 、dataflowprofiles |
表示数据流的配置。 |
secrets 、secretsyncs 、secretproviderclasses |
表示机密和机密管理的配置。 |
MQTT 工具
在 Azure IoT 操作实例中了解和测试 MQTT 代理时,可以使用 MQTT 客户端工具与代理交互。 但是,出于安全原因,Azure IoT 操作不会在群集外部公开 MQTT 代理。 可以选择通过以下方法来解决:
注意
这三种方法仅适用于开发和测试环境。 在任何情况下,都不应在生产环境中使用。
连接到群集内的默认侦听器。 此选项使用默认配置,无需额外的更新。 只能使用一小部分 MQTT 客户端工具。
使用
NodePort
服务在群集外部公开 MQTT 代理。 此方法需要更新 MQTT 代理的配置。 可以使用支持连接到特定端口的任何 MQTT 客户端工具。使用
LoadBalancer
服务在群集外部公开 MQTT 代理。 此方法需要更新 MQTT 代理的配置。 可以使用支持连接到特定端口的任何 MQTT 客户端工具。
连接到群集内的默认侦听器
若要连接到群集内的默认侦听器,可以部署一个 Pod 来运行基于 CLI 的 MQTT 客户端工具(如 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 中的 shell:
kubectl exec --stdin --tty mqtt-client -n azure-iot-operations -- sh
使用此 shell 可以运行 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 资源管理器工具,请使用以下配置:
要在本地计算机上运行开源 MQTT 资源管理器工具以连接到运行 Kubernetes 群集的计算机,请使用以下配置:
确保 MQTT 资源管理器至少配置了 #
主题:
连接后,可以在订阅的主题中查看消息并发布消息: