Compartir a través de


Sugerencias y herramientas para solucionar problemas de la instancia de Azure IoT Operations

En este artículo se describe cómo usar algunas herramientas comunes al aprender, explorar o solucionar problemas de las instancias de Azure IoT Operations. Estas herramientas se agregan a las funcionalidades proporcionadas por Azure Portal, la CLI de Azure, la interfaz de usuario web de experiencia de operaciones y recursos de observabilidad.

Herramientas de Kubernetes

Los componentes de Azure IoT Operations se ejecutan en un clúster de Kubernetes estándar. Puede usar las herramientas de la CLI de kubectl y k9s para interactuar con el clúster y administrarlo.

kubectl

kubectl es la herramienta de línea de comandos de Kubernetes para administrar el clúster. Tiene muchas funcionalidades que puede obtener información sobre en la documentación oficial de kubernetes. En este artículo se describen los usos comunes para kubectl cuando se trabaja con operaciones de Azure IoT, como enumerar los pods en ejecución y ver los registros.

Configuración de kubectl para conectarse a la instancia

En el artículo Preparación del clúster de Kubernetes habilitado para Azure Arc se describe cómo configurar kubectl para conectarse al clúster de k3s al ejecutar comandos kubectl en la misma máquina donde implementó el clúster de Kubernetes.

Sugerencia

Agregue el comando export KUBECONFIG=~/.kube/config al archivo de .bashrc o .bash_profile para que no tenga que establecer la variable de entorno KUBECONFIG cada vez que abra una nueva ventana de terminal.

Si ha implementado la instancia de Azure IoT Operations en una instancia de AKS-EE habilitada para Arc, la configuración de kubectl se configura automáticamente. Puede ejecutar comandos kubectl directamente desde la línea de comandos de la máquina donde implementó el clúster.

También es posible ejecutar comandos kubectl desde la máquina cliente local en lugar de la máquina donde implementó el clúster habilitado para Arc:

Como paso único, use SSH para conectarse a la máquina donde implementó el clúster y ejecutar los siguientes comandos. Asegúrese de reemplazar <your-name> por su nombre:

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

Anote el token. Este token se usa para autenticarse al ejecutar comandos kubectl en el equipo cliente. Ahora puede desconectarse de la máquina que ejecuta el clúster de Kubernetes.

Para usar kubectl en el equipo cliente para conectarse al clúster, abra dos terminales:

  1. En el primer terminal, ejecute el siguiente comando para configurar un proxy para conectarse al clúster. Asegúrese de reemplazar los valores de los tres marcadores de posición:

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

    Deje abierto este terminal mientras ejecuta comandos kubectl en el segundo terminal.

  2. En el segundo terminal, puede ejecutar los comandos kubectl en el clúster remoto. Por ejemplo, para enumerar los pods en el espacio de nombres azure-iot-operations:

    kubectl get pods -n azure-iot-operations
    

    Sugerencia

    También puede ejecutar comandos, como k9s, que usan la configuración de kubectl en este terminal.

    El contexto de kubectl permanece establecido en el clúster remoto hasta que se cierra el primer terminal.

Para más información, consulte Uso de la conexión de clúster para conectarse de forma segura a clústeres de Kubernetes habilitados para Azure Arc.

Espacios de nombres

De forma predeterminada, Arc y Azure IoT Operations usan los siguientes espacios de nombres en el clúster de Kubernetes:

  • azure-iot-operations para los componentes de Azure IoT Operations.
  • azure-arc para los componentes de Kubernetes habilitados para Azure Arc.

Sugerencia

Para ver todos los espacios de nombres del clúster, ejecute el siguiente comando: kubectl get namespaces.

Comandos kubectl comunes

Para ver todos los pods que se ejecutan en el espacio de nombres azure-iot-operations, ejecute el siguiente comando:

kubectl get pods -n azure-iot-operations

La salida se parece al ejemplo siguiente:

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

Para ver los registros de para un pod específico, como el aio-opc-opc.tcp-1-858b9ff67-dxwvb pod, ejecute el siguiente comando:

kubectl logs aio-opc-opc.tcp-1-858b9ff67-dxwvb -n azure-iot-operations

Para ver una descripción de legible de un pod específico, como el aio-opc-opc.tcp-1-858b9ff67-dxwvb pod, ejecute el siguiente comando:

kubectl describe pod aio-opc-opc.tcp-1-858b9ff67-dxwvb -n azure-iot-operations

En algunos lugares, la documentación de operaciones de Azure IoT usa la comando kubectl apply para aplicar un archivo de manifiesto de Kubernetes para realizar un cambio de configuración en el clúster.

k9s

La utilidad k9s ofrece una interfaz de usuario basada en terminal para administrar el clúster de Kubernetes. Usa la configuración de kubectl para conectarse al clúster y proporciona una manera visual de interactuar con el clúster. Su vista predeterminada muestra todos los pods que se ejecutan actualmente en el clúster:

Captura de pantalla que muestra la vista k9s predeterminada.

Al trabajar con operaciones de Azure IoT, puede filtrar la vista para mostrar solo los pods en el espacio de nombres azure-iot-operations.

  1. Escriba : para abrir el panel de comandos y escriba ns y presione Entrar.

  2. En la lista de espacios de nombres, seleccione azure-iot-operations y presione Entrar.

  3. La lista de pods ahora muestra solo los pods del espacio de nombres azure-iot-operations:

    Captura de pantalla que muestra la lista k9s de pods filtrados al espacio de nombres azure-iot-operations.

Sugerencia

Ahora puede usar las claves de número para aplicar filtros. En la captura de pantalla anterior se muestra que 0 muestra todos los pods y 1 muestra solo los pods del espacio de nombres azure-iot-operations.

Puede usar teclas de método abreviado para ver información sobre los pods. Por ejemplo:

  • Para describir un pod, selecciónelo en la lista y presione d.

    Captura de pantalla que muestra una descripción en k9s de un pod en ejecución.

  • Para ver los registros de un pod, selecciónelo en la lista y presione l.

    Captura de pantalla que muestra el registro de un pod en ejecución en k9s.

    Sugerencia

    Puede usar las claves de número para navegar por el archivo de registro.

Para ver los tipos de recursos personalizados, otros pods del clúster:

  1. Presione Ctrl-a para mostrar la lista de tipos de recursos personalizados.

  2. Seleccione el tipo de recurso personalizado, como dispositivos y presione Entrar.

    Sugerencia

    Para buscar un tipo de recurso personalizado por nombre, escriba / y, a continuación, empiece a escribir el nombre del tipo que busca.

  3. Seleccione un recurso personalizado y elija una de las operaciones disponibles. Por ejemplo, puede ver la definición de YAML de un perfil de punto de conexión de dispositivo seleccionándolo y presionando y. Para algunos recursos, puede editar la configuración.

En la tabla siguiente se describen algunos de los tipos de recursos personalizados con los que puede trabajar en Azure IoT Operations:

Tipo de recurso personalizado Descripción
devices Representa la configuración de un dispositivo.
assets Representa la configuración de un recurso.
brokers, brokerlisters, , brokerauthentications, brokerauthorizations Representa la configuración de un agente MQTT.
dataflows, , dataflowendpoints, dataflowprofiles Representa la configuración de un flujo de datos.
secrets, , secretsyncs, secretproviderclasses Representa la configuración de secretos y administración de secretos.

Herramientas de MQTT

Al aprender y probar el agente MQTT en la instancia de Azure IoT Operations, puede usar herramientas de cliente MQTT para interactuar con el agente. Sin embargo, por motivos de seguridad, Azure IoT Operations no expone el agente MQTT fuera del clúster. Como solución alternativa, tiene las siguientes opciones:

Precaución

Estos tres enfoques solo son adecuados para entornos de desarrollo y pruebas. En ningún caso debe usarlos en un entorno de producción.

  • Conexión al cliente de escucha predeterminado dentro del clúster. Esta opción usa la configuración predeterminada y no requiere actualizaciones adicionales. Está limitado a un pequeño conjunto de herramientas de cliente MQTT.

  • Use un servicio NodePort para exponer el agente MQTT fuera del clúster. Esta opción requiere que actualice la configuración del agente MQTT. Puede usar cualquier herramienta de cliente MQTT que admita la conexión a un puerto específico.

  • Use un servicio LoadBalancer para exponer el agente MQTT fuera del clúster. Esta opción requiere que actualice la configuración del agente MQTT. Puede usar cualquier herramienta de cliente MQTT que admita la conexión a un puerto específico.

Conexión al cliente de escucha predeterminado dentro del clúster

Para conectarse al agente de escucha predeterminado dentro del clúster, puede implementar un pod que ejecute herramientas de cliente MQTT basadas en la CLI, como mosquitto_sub y mosquitto_pub. El comando siguiente implementa este pod en el clúster:

kubectl apply -f https://raw.githubusercontent.com/Azure-Samples/explore-iot-operations/main/samples/quickstarts/mqtt-client.yaml

Después de ejecutar el pod, puede conectarse a un shell en el pod:

kubectl exec --stdin --tty mqtt-client -n azure-iot-operations -- sh

Use este shell para ejecutar comandos como mosquitto_sub y mosquitto_pub para interactuar con el agente MQTT. Por ejemplo, para suscribirse a todos los temas del tema 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)

Observe cómo el comando carga un archivo de certificado y un token desde el sistema de archivos del pod. El archivo de manifiesto mqtt-client.yaml monta estos archivos en el pod.

Para recibir un único mensaje del tema de azure-iot-operations/data/thermostat, agregue la opción -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)

Para ver las propiedades de usuario de MQTT v5 en los mensajes, use la opción -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)

Para publicar un mensaje en el tema 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)

Cuando termine de usar el pod de herramientas de cliente MQTT, puede eliminarlo del clúster:

kubectl delete -f https://raw.githubusercontent.com/Azure-Samples/explore-iot-operations/main/samples/quickstarts/mqtt-client.yaml

Para obtener más información sobre esta configuración, consulte Conexión al agente de escucha predeterminado dentro del clúster.

Uso de un servicio de NodePort o LoadBalancer

Si sigue los pasos para configurar un puerto de nodo o servicio de equilibrador de carga para exponer el agente MQTT fuera del clúster, puede usar cualquier herramienta de cliente MQTT que admita la conexión a un puerto específico. En los ejemplos siguientes se supone que configuró el servicio sin autenticación, autorización ni TLS. Ahora puede usar sus herramientas de cliente MQTT favoritas para conectarse al agente MQTT en el puerto 1883 si usa un equilibrador de carga o el puerto configurado si usa un puerto de nodo.

Por ejemplo, para ejecutar la herramienta de código abierto mqttui en la máquina donde se ejecuta el clúster de Kubernetes, use el siguiente comando:

mqttui --broker mqtt://localhost:1883

Sugerencia

Si configuró un equilibrador de carga y el puerto 1883 está abierto en la dirección IP pública del equipo host, puede usar el siguiente comando para conectarse al agente MQTT desde otra máquina: mqttui --broker mqtt://<cluster-machine-public-ip>:1883

Puede usar la herramienta mqttui para suscribirse a temas, publicar mensajes y ver los mensajes que fluyen a través del agente:

Captura de pantalla que muestra la herramienta MQTTUI que muestra todos los temas.

Para mostrar los mensajes en un tema específico, como azure-iot-operations/data/thermostat, use el siguiente comando:

mqttui --broker mqtt://localhost:1883 azure-iot-operations/data/thermostat

Para publicar un mensaje en el tema de azure-iot-operations/data/valve, use el siguiente comando:

mqttui publish --broker mqtt://localhost:1883 azure-iot-operations/data/valve open:15%

Para ejecutar la herramienta de MQTT Explorer de código abierto en la máquina donde se ejecuta el clúster de Kubernetes, use la siguiente configuración:

Captura de pantalla que muestra la configuración de localhost del Explorador MQTT.

Para ejecutar la herramienta de MQTT Explorer de código abierto en la máquina local para conectarse a la máquina donde se ejecuta el clúster de Kubernetes, use la siguiente configuración:

Captura de pantalla que muestra la configuración del host remoto de MQTT Explorer.

Asegúrese de que MQTT Explorer tenga al menos el tema de # configurado:

Captura de pantalla que muestra la configuración predeterminada del tema MQTT Explorer.

Después de conectarse, puede ver mensajes en los temas que ha suscrito y publicar mensajes:

Captura de pantalla que muestra los temas MQTT Explorer suscritos a Azure IoT Operations.

Sugerencias

Estas son algunas sugerencias adicionales que le ayudarán a trabajar con la instancia de Azure IoT Operations:

Búsqueda de la ubicación personalizada de la instancia de Azure IoT Operations

Para buscar la ubicación personalizada asociada a la instancia de Azure IoT Operations, use el siguiente comando:

az iot ops show --name <YOUR_INSTANCE_NAME> --resource-group <YOUR_RESOURCE_GROUP> --query "extendedLocation.name" --output tsv

También puede encontrar la ubicación personalizada en Azure Portal en la página de información general de la instancia en el campo Ubicación extendida .