Поделиться через


Советы и средства для устранения неполадок экземпляра Операций Интернета вещей Azure

В этой статье описывается, как использовать некоторые распространенные средства при обучении, изучении или устранении неполадок экземпляров Операций Интернета вещей Azure. Эти средства в дополнение к возможностям, предоставляемым портал Azure, Azure CLI, веб-интерфейсом операций и ресурсами наблюдаемости.

Средства Kubernetes

Компоненты Операций Интернета вещей Azure выполняются в стандартном кластере Kubernetes. Вы можете использовать средства командной kubectlk9s строки для взаимодействия с кластером и управления ими.

kubectl

kubectl — это средство командной строки Kubernetes для управления кластером. Он имеет множество возможностей, которые можно узнать в официальной документации kubernetes. В этой статье описываются распространенные способы kubectl использования при работе с операциями Интернета вещей Azure, такими как перечисление запущенных модулей pod и просмотр журналов.

Настройка kubectl подключения к экземпляру

В статье "Подготовка кластера Kubernetes с поддержкой Azure Arc" описывается настройка подключения к kubectl k3s при выполнении kubectl команд на том же компьютере, где развернут кластер Kubernetes.

Совет

Добавьте команду в export KUBECONFIG=~/.kube/configфайл .bashrc или .bash_profile , чтобы при каждом открытии нового окна терминала не нужно устанавливать KUBECONFIG переменную среды.

Если вы развернули экземпляр Операций Интернета вещей Azure в AKS-EE с поддержкой Arc, 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. В первом терминале выполните следующую команду, чтобы настроить прокси-сервер для подключения к кластеру. Обязательно замените значения для трех заполнителей:

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

    Оставьте этот терминал открытым во время выполнения kubectl команд во втором терминале.

  2. Во втором терминале можно выполнять kubectl команды в удаленном кластере. Например, чтобы вывести список модулей pod в azure-iot-operations пространстве имен:

    kubectl get pods -n azure-iot-operations
    

    Совет

    Вы также можете выполнять команды, например k9s, которые используют конфигурацию kubectl в этом терминале.

    Контекст kubectl остается удаленным кластером, пока не закройте первый терминал.

Дополнительные сведения см. в статье "Использование подключения кластера для безопасного подключения к кластерам Kubernetes с поддержкой Azure Arc".

Пространства имен

По умолчанию Операции Arc и Azure IoT используют следующие пространства имен в кластере Kubernetes:

  • azure-iot-operations для компонентов Операций Интернета вещей Azure.
  • azure-arc для компонентов Kubernetes с поддержкой Azure Arc.

Совет

Чтобы просмотреть все пространства имен в кластере, выполните следующую команду: kubectl get namespaces

Общие kubectl команды

Чтобы просмотреть все модули pod, выполняемые в azure-iot-operations пространстве имен, выполните следующую команду:

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, например pod aio-opc-opc.tcp-1-858b9ff67-dxwvb , выполните следующую команду:

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

Чтобы просмотреть описание определенного модуля pod , например aio-opc-opc.tcp-1-858b9ff67-dxwvb , выполните следующую команду:

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

В некоторых местах документация по операциям Интернета вещей Azure использует команду kubectl apply для применения файла манифеста Kubernetes для изменения конфигурации в кластере.

k9s

Программа k9s предлагает пользовательский интерфейс на основе терминала для управления кластером Kubernetes. Он использует kubectl конфигурацию для подключения к кластеру и предоставляет визуальный способ взаимодействия с кластером. В представлении по умолчанию перечислены все модули pod, работающие в кластере:

Снимок экрана: представление k9s по умолчанию.

При работе с операциями Интернета вещей Azure можно отфильтровать представление, чтобы отобразить только модули pod в azure-iot-operations пространстве имен.

  1. Введите : , чтобы открыть панель команд, а затем введите ns и нажмите клавишу ВВОД.

  2. В списке пространств имен выберите azure-iot-operations и нажмите клавишу ВВОД.

  3. Список модулей pod теперь отображает только модули pod в пространстве имен azure-iot-operations :

    Снимок экрана: список модулей pod, отфильтрованных в пространстве имен azure-iot-operations.

Совет

Теперь можно использовать ключи чисел для применения фильтров. На предыдущем снимке экрана показано, что 0 отображает все модули pod, а 1 — только модули pod в пространстве имен azure-iot-operations .

Сочетания клавиш можно использовать для просмотра сведений о модулях pod. Например:

  • Чтобы описать pod, выберите его в списке и нажмите клавишу D.

    Снимок экрана: описание в k9s запущенного модуля pod.

  • Чтобы просмотреть журналы pod, выберите его в списке и нажмите клавишу L.

    Снимок экрана: журнал запущенного модуля pod в k9s.

    Совет

    Ключи номеров можно использовать для перемещения по файлу журнала.

Чтобы просмотреть пользовательские типы ресурсов, другие модули pod в кластере:

  1. Нажмите клавиши CTRL-a , чтобы отобразить список настраиваемых типов ресурсов.

  2. Выберите настраиваемый тип ресурса, например устройства и нажмите Enter.

    Совет

    Чтобы найти настраиваемый тип ресурса по имени, введите / и начните вводить имя нужного типа.

  3. Выберите пользовательский ресурс и выберите одну из доступных операций. Например, можно просмотреть определение YAML профиля конечной точки устройства, выбрав его и нажав клавишу Y. Для некоторых ресурсов можно изменить конфигурацию.

В следующей таблице описаны некоторые пользовательские типы ресурсов, с которыми вы можете работать в операциях Интернета вещей Azure.

Настраиваемый тип ресурса Описание
devices Представляет конфигурацию для устройства.
assets Представляет конфигурацию ресурса.
brokers, , brokerlistersbrokerauthenticationsbrokerauthorizations Представляет конфигурацию для брокера MQTT.
dataflows, , dataflowendpointsdataflowprofiles Представляет конфигурацию потока данных.
secrets, , secretsyncssecretproviderclasses Представляет конфигурацию для управления секретами и секретами.

Средства MQTT

При изучении и тестировании брокера MQTT в экземпляре Операций Интернета вещей Azure можно использовать клиентские средства MQTT для взаимодействия с брокером. Однако по соображениям безопасности Операции Интернета вещей Azure не предоставляют брокер MQTT за пределами кластера. В качестве решения у вас есть следующие варианты:

Внимание

Эти три подхода подходы подходы подходят только для сред разработки и тестирования. Не следует использовать их в рабочей среде.

  • Подключитесь к прослушивателю по умолчанию внутри кластера. Этот параметр использует конфигурацию по умолчанию и не требует дополнительных обновлений. Вы ограничены небольшим набором клиентских средств MQTT.

  • NodePort Используйте службу для предоставления брокера MQTT за пределами кластера. Этот параметр требует обновления конфигурации брокера MQTT. Вы можете использовать любые клиентские средства MQTT, поддерживающие подключение к конкретному порту.

  • LoadBalancer Используйте службу для предоставления брокера MQTT за пределами кластера. Этот параметр требует обновления конфигурации брокера MQTT. Вы можете использовать любые клиентские средства MQTT, поддерживающие подключение к конкретному порту.

Подключение к прослушивателю по умолчанию в кластере

Чтобы подключиться к прослушивателю по умолчанию в кластере, можно развернуть модуль pod, на котором выполняются клиентские средства 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:

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 версии 5 в сообщениях, используйте этот -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)

Завершив использование модуля pod клиентских средств MQTT, его можно удалить из кластера:

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

Дополнительные сведения об этой конфигурации см. в статье "Подключение к прослушивателю по умолчанию в кластере".

NodePort Использование службы или LoadBalancer службы

Если выполнить действия по настройке порта узла или службы Load Balancer для предоставления брокера MQTT за пределами кластера, можно использовать любые клиентские средства MQTT, поддерживающие подключение к конкретному порту. В следующих примерах предполагается, что служба настроена без проверки подлинности, авторизации или TLS. Теперь вы можете использовать любимые клиентские средства MQTT для подключения к брокеру MQTT через порт 1883, если вы используете подсистему балансировки нагрузки или настроенный порт, если вы используете порт узла.

Например, чтобы запустить средство mqttui с открытым кодом на компьютере, на котором выполняется кластер Kubernetes, используйте следующую команду:

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%

Чтобы запустить средство MQTT Explorer с открытым кодом на компьютере, на котором выполняется кластер Kubernetes, используйте следующую конфигурацию:

Снимок экрана: конфигурация localhost explorer MQTT Explorer.

Чтобы запустить средство MQTT Explorer с открытым кодом на локальном компьютере, чтобы подключиться к компьютеру, на котором запущен кластер Kubernetes, используйте следующую конфигурацию:

Снимок экрана: конфигурация удаленного узла MQTT Explorer.

Убедитесь, что обозреватель MQTT имеет по крайней мере раздел, настроенный # :

Снимок экрана: конфигурация раздела по умолчанию для MQTT Explorer.

После подключения вы увидите сообщения в разделах, на которые вы подписаны, и опубликуете сообщения:

Снимок экрана: обозреватель MQTT, подписанный на разделы операций Интернета вещей Azure.