Udostępnij przez


Porady i narzędzia do rozwiązywania problemów z wystąpieniem operacji usługi Azure IoT

W tym artykule opisano sposób używania niektórych typowych narzędzi podczas nauki, eksplorowania lub rozwiązywania problemów z wystąpieniami operacji usługi Azure IoT. Te narzędzia są dodatkiem do możliwości udostępnianych przez witrynę Azure Portal, interfejs wiersza polecenia platformy Azure, interfejs wiersza polecenia platformy Azure, interfejs użytkownika sieci Web oraz zasoby umożliwiające obserwowanie.

Narzędzia platformy Kubernetes

Składniki operacji usługi Azure IoT działają w standardowym klastrze Kubernetes. Narzędzia interfejsu kubectl wiersza polecenia i k9s umożliwiają interakcję z klastrem i zarządzanie nim.

kubectl

kubectl to narzędzie wiersza polecenia platformy Kubernetes do zarządzania klastrem. Ma wiele możliwości, które można uzyskać w oficjalnej dokumentacji platformy Kubernetes. W tym artykule opisano typowe zastosowania używane w kubectl przypadku pracy z operacjami usługi Azure IoT, takimi jak wyświetlanie uruchomionych zasobników i wyświetlanie dzienników.

Konfigurowanie kubectl nawiązywania połączenia z wystąpieniem

W artykule Prepare your Azure Arc-enabled Kubernetes cluster (Przygotowywanie klastra Kubernetes z włączoną usługą Azure Arc) opisano sposób konfigurowania kubectl połączenia z klastrem k3s podczas uruchamiania kubectl poleceń na tej samej maszynie, na której wdrożono klaster Kubernetes.

Napiwek

export KUBECONFIG=~/.kube/config Dodaj polecenie do pliku bashrc lub .bash_profile, aby nie trzeba było ustawiać KUBECONFIG zmiennej środowiskowej za każdym razem, gdy otworzysz nowe okno terminalu.

Jeśli wystąpienie operacji usługi Azure IoT zostało wdrożone w usłudze AKS-EE z obsługą usługi Arc, kubectl konfiguracja zostanie automatycznie skonfigurowana. Polecenia można uruchamiać kubectl bezpośrednio z wiersza polecenia na maszynie, na której wdrożono klaster.

Można również uruchamiać kubectl polecenia z komputera klienckiego lokalnego, a nie z maszyny, na której wdrożono klaster z obsługą usługi Arc:

W ramach jednorazowego kroku użyj protokołu SSH, aby nawiązać połączenie z maszyną, na której wdrożono klaster, i uruchom następujące polecenia. Pamiętaj, aby zastąpić <your-name> ciąg nazwą:

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

Zanotuj token. Ten token służy do uwierzytelniania podczas uruchamiania kubectl poleceń na komputerze klienckim. Teraz możesz odłączyć się od maszyny z uruchomionym klastrem Kubernetes.

Aby nawiązać połączenie z klastrem za pomocą kubectl maszyny klienckiej, otwórz dwa terminale:

  1. W pierwszym terminalu uruchom następujące polecenie, aby skonfigurować serwer proxy w celu nawiązania połączenia z klastrem. Pamiętaj, aby zastąpić wartości dla trzech symboli zastępczych:

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

    Pozostaw ten terminal otwarty podczas uruchamiania kubectl poleceń w drugim terminalu.

  2. W drugim terminalu można uruchamiać kubectl polecenia względem klastra zdalnego. Aby na przykład wyświetlić listę zasobników w azure-iot-operations przestrzeni nazw:

    kubectl get pods -n azure-iot-operations
    

    Napiwek

    Możesz również uruchamiać polecenia, takie jak k9s, które używają konfiguracji w tym terminalu kubectl .

    Kontekst kubectl pozostaje ustawiony na klaster zdalny do momentu zamknięcia pierwszego terminalu.

Aby dowiedzieć się więcej, zobacz Używanie połączenia klastra w celu bezpiecznego nawiązywania połączenia z klastrami Kubernetes z włączoną usługą Azure Arc.

Przestrzenie nazw

Domyślnie operacje Arc i Azure IoT używają następujących przestrzeni nazw w klastrze Kubernetes:

  • azure-iot-operations dla składników operacji usługi Azure IoT.
  • azure-arc dla składników platformy Kubernetes z obsługą usługi Azure Arc.

Napiwek

Aby wyświetlić wszystkie przestrzenie nazw w klastrze, uruchom następujące polecenie: kubectl get namespaces.

Typowe kubectl polecenia

Aby wyświetlić wszystkie zasobniki uruchomione w azure-iot-operations przestrzeni nazw, uruchom następujące polecenie:

kubectl get pods -n azure-iot-operations

Dane wyjściowe wyglądają jak w poniższym przykładzie:

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

Aby wyświetlić dzienniki dla określonego zasobnika, takiego jak aio-opc-opc.tcp-1-858b9ff67-dxwvb , uruchom następujące polecenie:

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

Aby wyświetlić czytelny dla człowieka opis określonego zasobnika, takiego jak aio-opc-opc.tcp-1-858b9ff67-dxwvb , uruchom następujące polecenie:

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

W niektórych miejscach dokumentacja operacji usługi Azure IoT używa polecenia kubectl apply w celu zastosowania pliku manifestu kubernetes w celu wprowadzenia zmiany konfiguracji w klastrze.

k9s

Narzędzie k9s oferuje interfejs użytkownika oparty na terminalu do zarządzania klastrem Kubernetes. Używa konfiguracji kubectl do nawiązywania połączenia z klastrem i zapewnia wizualny sposób interakcji z klastrem. Widok domyślny zawiera listę wszystkich zasobników aktualnie uruchomionych w klastrze:

Zrzut ekranu przedstawiający domyślny widok k9s.

Podczas pracy z operacjami usługi Azure IoT można filtrować widok, aby wyświetlić tylko zasobniki w azure-iot-operations przestrzeni nazw.

  1. Wpisz : polecenie , aby otworzyć panel poleceń, a następnie wpisz ns i naciśnij Enter.

  2. Na liście przestrzeni nazw wybierz azure-iot-operations i naciśnij Enter.

  3. Lista zasobników zawiera teraz tylko zasobniki w przestrzeni nazw azure-iot-operations :

    Zrzut ekranu przedstawiający listę k9s zasobników filtrowanych do przestrzeni nazw azure-iot-operations.

Napiwek

Teraz możesz użyć kluczy liczbowych do zastosowania filtrów. Na poprzednim zrzucie ekranu pokazano, że 0 pokazuje wszystkie zasobniki, a 1 zawiera tylko zasobniki w przestrzeni nazw azure-iot-operations.

Możesz użyć skrótów, aby wyświetlić informacje o zasobnikach. Na przykład:

  • Aby opisać zasobnik, wybierz go na liście i naciśnij d.

    Zrzut ekranu przedstawiający opis w k9s uruchomionego zasobnika.

  • Aby wyświetlić dzienniki zasobnika, wybierz go na liście i naciśnij l.

    Zrzut ekranu przedstawiający dziennik uruchomionego zasobnika w k9s.

    Napiwek

    Możesz użyć kluczy liczbowych, aby poruszać się po pliku dziennika.

Aby wyświetlić niestandardowe typy zasobów inne zasobniki w klastrze:

  1. Naciśnij Ctrl-a, aby wyświetlić listę niestandardowych typów zasobów.

  2. Wybierz typ zasobu niestandardowego, taki jak urządzenia i naciśnij Enter.

    Napiwek

    Aby wyszukać niestandardowy typ zasobu według nazwy, wpisz / , a następnie zacznij wpisywać nazwę szukanego typu.

  3. Wybierz zasób niestandardowy i wybierz jedną z dostępnych operacji. Możesz na przykład wyświetlić definicję YAML profilu punktu końcowego urządzenia, wybierając go i naciskając y. W przypadku niektórych zasobów można edytować konfigurację.

W poniższej tabeli opisano niektóre typy zasobów niestandardowych, z których można pracować w operacjach usługi Azure IoT:

Niestandardowy typ zasobu opis
devices Reprezentuje konfigurację urządzenia.
assets Reprezentuje konfigurację zasobu.
brokers, , brokerlisters, , brokerauthenticationsbrokerauthorizations Reprezentują konfigurację brokera MQTT.
dataflows, , dataflowendpointsdataflowprofiles Reprezentuje konfigurację przepływu danych.
secrets, , secretsyncssecretproviderclasses Reprezentują konfigurację dla wpisów tajnych i zarządzania wpisami tajnymi.

Narzędzia MQTT

Gdy poznasz i przetestujesz brokera MQTT w wystąpieniu operacji usługi Azure IoT, możesz użyć narzędzi klienckich MQTT do interakcji z brokerem. Jednak ze względów bezpieczeństwa operacje usługi Azure IoT nie uwidacznia brokera MQTT poza klastrem. W ramach pracy dostępne są następujące opcje:

Uwaga

Te trzy podejścia są odpowiednie tylko dla środowisk programistycznych i testowych. W żadnym wypadku nie należy ich używać w środowisku produkcyjnym.

  • Połącz się z odbiornikiem domyślnym wewnątrz klastra. Ta opcja używa konfiguracji domyślnej i nie wymaga dodatkowych aktualizacji. Ograniczasz się do małego zestawu narzędzi klienckich MQTT.

  • NodePort Użyj usługi, aby uwidocznić brokera MQTT poza klastrem. Ta opcja wymaga zaktualizowania konfiguracji brokera MQTT. Możesz użyć dowolnych narzędzi klienckich MQTT, które obsługują nawiązywanie połączenia z określonym portem.

  • LoadBalancer Użyj usługi, aby uwidocznić brokera MQTT poza klastrem. Ta opcja wymaga zaktualizowania konfiguracji brokera MQTT. Możesz użyć dowolnych narzędzi klienckich MQTT, które obsługują nawiązywanie połączenia z określonym portem.

Nawiązywanie połączenia z odbiornikiem domyślnym w klastrze

Aby nawiązać połączenie z odbiornikiem domyślnym w klastrze, możesz wdrożyć zasobnik, który uruchamia oparte na interfejsie wiersza polecenia narzędzia klienckie MQTT, takie jak mosquitto_sub i mosquitto_pub. Następujące polecenie wdraża taki zasobnik w klastrze:

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

Po uruchomieniu zasobnika można nawiązać połączenie z powłoką w zasobniku:

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

Użyj tej powłoki do uruchamiania poleceń, takich jak mosquitto_sub i mosquitto_pub do interakcji z brokerem MQTT. Aby na przykład zasubskrybować wszystkie tematy w temacie 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)

Zwróć uwagę, że polecenie ładuje plik certyfikatu i token z systemu plików zasobnika. Plik manifestu mqtt-client.yaml instaluje te pliki w zasobniku.

Aby odebrać pojedynczy komunikat z tematu azure-iot-operations/data/thermostat , dodaj -C 1 opcję:

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)

Aby wyświetlić właściwości użytkownika MQTT v5 w komunikatach, użyj -F %P opcji:

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)

Aby opublikować komunikat w temacie 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)

Po zakończeniu korzystania z zasobnika narzędzi klienckich MQTT można go usunąć z klastra:

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

Aby dowiedzieć się więcej na temat tej konfiguracji, zobacz Nawiązywanie połączenia z odbiornikiem domyślnym w klastrze.

NodePort Korzystanie z usługi lub LoadBalancer

Jeśli wykonasz kroki konfigurowania portu węzła lub usługi równoważenia obciążenia w celu uwidocznienia brokera MQTT poza klastrem, możesz użyć dowolnych narzędzi klienckich MQTT, które obsługują nawiązywanie połączenia z określonym portem. W poniższych przykładach założono, że skonfigurowano usługę bez uwierzytelniania, autoryzacji ani protokołu TLS. Teraz możesz użyć ulubionych narzędzi klienckich MQTT do nawiązania połączenia z brokerem MQTT na porcie 1883, jeśli używasz modułu równoważenia obciążenia lub skonfigurowanego portu, jeśli używasz portu węzła.

Aby na przykład uruchomić narzędzie mqttui typu open source na maszynie, na której działa klaster Kubernetes, użyj następującego polecenia:

mqttui --broker mqtt://localhost:1883

Napiwek

Jeśli skonfigurowano moduł równoważenia obciążenia i port 1883 jest otwarty na publicznym adresie IP maszyny hosta, możesz użyć następującego polecenia, aby nawiązać połączenie z brokerem MQTT z innej maszyny: mqttui --broker mqtt://<cluster-machine-public-ip>:1883

Za pomocą mqttui narzędzia można subskrybować tematy, publikować komunikaty i wyświetlać komunikaty przepływające przez brokera:

Zrzut ekranu przedstawiający narzędzie MQTTUI z wyświetlonymi wszystkimi tematami.

Aby wyświetlić komunikaty w określonym temacie, takim jak azure-iot-operations/data/thermostat, użyj następującego polecenia:

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

Aby opublikować komunikat w temacie azure-iot-operations/data/valve , użyj następującego polecenia:

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

Aby uruchomić narzędzie MQTT Explorer typu open source na maszynie, na której działa klaster Kubernetes, użyj następującej konfiguracji:

Zrzut ekranu przedstawiający konfigurację hosta lokalnego eksploratora MQTT.

Aby uruchomić narzędzie MQTT Explorer typu open source na komputerze lokalnym w celu nawiązania połączenia z maszyną, na której działa klaster Kubernetes, użyj następującej konfiguracji:

Zrzut ekranu przedstawiający konfigurację hosta zdalnego eksploratora MQTT Explorer.

Upewnij się, że w Eksploratorze # MQTT skonfigurowano co najmniej temat:

Zrzut ekranu przedstawiający domyślną konfigurację tematu eksploratora MQTT.

Po nawiązaniu połączenia możesz zobaczyć komunikaty w tematach subskrybowanych i publikowanych wiadomości:

Zrzut ekranu przedstawiający tematy dotyczące operacji usługi Azure IoT w Eksploratorze MQTT.

Wskazówki

Poniżej przedstawiono kilka dodatkowych wskazówek, które ułatwiają pracę z Twoim wystąpieniem Azure IoT Operations:

Znajdź niestandardową lokalizację swojej instancji operacyjnej Azure IoT

Aby znaleźć niestandardową lokalizację skojarzoną z wystąpieniem Azure IoT Operations, użyj następującego polecenia:

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

Lokalizację niestandardową można również znaleźć w Azure Portal na stronie przeglądu wystąpienia w polu Lokalizacja rozszerzona.