Szybki start: dodawanie zasobów OPC UA do klastra usługi Azure IoT Operations Preview
Ważne
Usługa Azure IoT Operations Preview — włączona przez usługę Azure Arc jest obecnie dostępna w wersji zapoznawczej. Nie należy używać tego oprogramowania w wersji zapoznawczej w środowiskach produkcyjnych.
Po udostępnieniu ogólnie dostępnej wersji należy wdrożyć nową instalację operacji usługi Azure IoT. Nie będzie można uaktualnić instalacji w wersji zapoznawczej.
Zobacz Dodatkowe warunki użytkowania wersji zapoznawczych platformy Microsoft Azure, aby zapoznać się z postanowieniami prawnymi dotyczącymi funkcji platformy Azure, które są w wersji beta lub wersji zapoznawczej albo w inny sposób nie zostały jeszcze wydane jako ogólnie dostępne.
W tym przewodniku Szybki start ręcznie dodasz zasoby OPC UA do klastra usługi Azure IoT Operations Preview. Te zasoby publikują komunikaty w brokerze MQTT w klastrze operacji usługi Azure IoT. Zazwyczaj użytkownik OT wykonuje te kroki.
Zasób to urządzenie fizyczne lub jednostka logiczna reprezentująca urządzenie, maszynę, system lub proces. Na przykład zasób fizyczny może być pompą, silnikiem, zbiornikiem lub linią produkcyjną. Zdefiniowany zasób logiczny może mieć właściwości, przesyłać strumieniowo dane telemetryczne lub generować zdarzenia.
Serwery OPC UA to aplikacje oprogramowania komunikujące się z elementami zawartości. Tagi OPC UA to punkty danych uwidaczniane przez serwery OPC UA. Tagi OPC UA mogą udostępniać dane historyczne dotyczące stanu, wydajności, jakości lub stanu zasobów w czasie rzeczywistym.
W tym przewodniku Szybki start użyjesz internetowego interfejsu użytkownika środowiska operacji do utworzenia zasobów. Możesz również użyć interfejsu wiersza polecenia platformy Azure, aby wykonać niektóre z tych zadań.
Wymagania wstępne
Masz wystąpienie usługi Azure IoT Operations Preview wdrożone w klastrze Kubernetes. Przewodnik Szybki start: uruchamianie usługi Azure IoT Operations w wersji zapoznawczej w usłudze GitHub Codespaces z językiem K3s zawiera proste instrukcje wdrażania wystąpienia operacji usługi Azure IoT, którego można użyć na potrzeby przewodników Szybki start.
Aby zalogować się do internetowego interfejsu użytkownika środowiska operacji, musisz mieć konto Microsoft Entra ID z co najmniej uprawnieniami współautora dla grupy zasobów zawierającej wystąpienie usługi Kubernetes — Azure Arc . Aby dowiedzieć się więcej, zobacz Interfejs użytkownika sieci Web środowiska operacji.
Jeśli nie określono inaczej, możesz uruchomić polecenia konsoli w tym przewodniku Szybki start w środowisku Bash lub PowerShell.
Jaki problem rozwiążemy?
Dane udostępniane przez serwery OPC UA mogą mieć złożoną strukturę i mogą być trudne do zrozumienia. Operacje usługi Azure IoT umożliwiają modelowanie zasobów OPC UA jako tagów, zdarzeń i właściwości. Modelowanie ułatwia zrozumienie danych i używanie ich w procesach podrzędnych, takich jak broker MQTT i przepływy danych.
Wdrażanie symulatora OPC PLC
Ten przewodnik Szybki start używa symulatora OPC PLC do generowania przykładowych danych. Aby wdrożyć symulator OPC PLC, uruchom następujące polecenie:
kubectl apply -f https://raw.githubusercontent.com/Azure-Samples/explore-iot-operations/main/samples/quickstarts/opc-plc-deployment.yaml
Poniższy fragment kodu przedstawia zastosowany plik YAML:
apiVersion: apps/v1
kind: Deployment
metadata:
name: opc-plc-deployment
namespace: azure-iot-operations
labels:
app.kubernetes.io/component: opcplc-000000
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/component: opcplc-000000
template:
metadata:
labels:
app.kubernetes.io/component: opcplc-000000
spec:
containers:
- name: opc-plc
image: mcr.microsoft.com/iotedge/opc-plc:latest
args:
- "--ph=opcplc-000000"
- "--cdn=opcplc-000000"
- "--ut"
- "--trustowncert" # Can we remove?
- "--sn=25"
- "--sr=10"
- "--fn=2000"
- "--veryfastrate=1000"
- "--gn=5"
- "--pn=50000"
- "--maxsessioncount=100"
- "--maxsubscriptioncount=100"
- "--maxqueuedrequestcount=2000"
- "--ses"
- "--alm"
- "--at=FlatDirectory"
- "--drurs"
- "--ll-debug"
ports:
- containerPort: 50000
volumeMounts:
- name: opc-plc-tls
mountPath: /app/pki/own
- name: opc-plc-tls
mountPath: /app/pki/trusted # Trust own cert
volumes:
- name: opc-plc-tls
secret:
secretName: opc-plc-tls
---
apiVersion: v1
kind: Service
metadata:
name: opcplc-000000
namespace: azure-iot-operations
spec:
type: ClusterIP
selector:
app.kubernetes.io/component: opcplc-000000
ports:
- port: 50000
protocol: TCP
targetPort: 50000
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: opc-plc-certificate
namespace: azure-iot-operations
spec:
secretName: opc-plc-tls
duration: 2160h # 90d
renewBefore: 360h # 15d
issuerRef:
name: aio-opc-opcuabroker-default-root-ca-issuer
kind: Issuer
commonName: OpcPlc
dnsNames:
- opcplc-000000
- opcplc-000000.azure-iot-operations.svc.cluster.local
- opcplc-000000.azure-iot-operations
uris:
- urn:OpcPlc:opcplc-000000
usages:
- digital signature
- key encipherment
- data encipherment
- server auth
- client auth
privateKey:
algorithm: RSA
size: 2048
encodeUsagesInRequest: true
isCA: false
Uwaga
Ta konfiguracja nie jest bezpieczna. Nie używaj tej konfiguracji w środowisku produkcyjnym.
Logowanie do środowiska operacji
Aby utworzyć punkty końcowe zasobów, zasoby i subskrybować tagi i zdarzenia OPC UA, użyj środowiska operacji.
Przejdź do środowiska operacji w przeglądarce i zaloguj się przy użyciu poświadczeń identyfikatora Entra firmy Microsoft.
Wybierz witrynę
Witryna to zbiór wystąpień operacji usługi Azure IoT. Witryny zazwyczaj grupują wystąpienia według lokalizacji fizycznej i ułatwiają użytkownikom OT lokalizowanie zasobów i zarządzanie nimi. Administrator IT tworzy lokacje i przypisuje do nich wystąpienia operacji usługi Azure IoT. Ponieważ pracujesz z nowym wdrożeniem, nie ma jeszcze żadnych witryn. Klaster utworzony w poprzednim przewodniku Szybki start można znaleźć, wybierając pozycję Nieprzypisane wystąpienia. W środowisku operacji wystąpienie reprezentuje klaster, w którym wdrożono operacje usługi Azure IoT.
Wybierz wystąpienie
Wybierz wystąpienie, w którym wdrożono operacje usługi Azure IoT w poprzednim przewodniku Szybki start:
Napiwek
Jeśli nie widzisz żadnych wystąpień, być może nie jesteś we właściwej dzierżawie identyfikatora Entra firmy Microsoft. Dzierżawę można zmienić z menu w prawym górnym rogu w środowisku operacji.
Dodawanie punktu końcowego zasobu
Po wdrożeniu operacji usługi Azure IoT w poprzednim artykule dołączono wbudowany symulator OPC PLC. W tym kroku dodasz punkt końcowy zasobu, który umożliwia nawiązywanie połączenia z symulatorem OPC PLC.
Aby dodać punkt końcowy zasobu:
Wybierz pozycję Punkty końcowe zasobu, a następnie pozycję Utwórz punkt końcowy zasobu:
Wprowadź następujące informacje o punkcie końcowym:
Pole Wartość Nazwa punktu końcowego zasobu opc-ua-connector-0
Adres URL serwera OPC UA opc.tcp://opcplc-000000:50000
Tryb uwierzytelniania użytkownika Anonymous
Aby zapisać definicję, wybierz pozycję Utwórz.
Ta konfiguracja umożliwia wdrożenie nowego punktu końcowego zasobu wywoływanego
opc-ua-connector-0
w klastrze. Możesz użyćkubectl
polecenia , aby wyświetlić punkty końcowe zasobu:kubectl get assetendpointprofile -n azure-iot-operations
Zarządzanie zasobami
Po wybraniu wystąpienia w środowisku operacji zostanie wyświetlona lista dostępnych zasobów na stronie Zasoby . Jeśli jeszcze nie ma żadnych zasobów, ta lista jest pusta:
Tworzenie składnika majątku
Aby utworzyć zasób, wybierz pozycję Utwórz zasób. Następnie wprowadź następujące informacje o zasobie:
Pole | Wartość |
---|---|
Punkt końcowy elementu zawartości | opc-ua-connector-0 |
Nazwa zasobu | thermostat |
opis | A simulated thermostat asset |
Usuń istniejące właściwości niestandardowe i dodaj następujące właściwości niestandardowe. Należy zachować ostrożność przy użyciu dokładnych nazw właściwości, ponieważ szablon usługi Power BI w późniejszym przewodniku Szybki start wykonuje dla nich zapytania:
Nazwa właściwości | Szczegóły właściwości |
---|---|
batch | 102 |
klient | Contoso |
indywidualnej | Kocioł |
isSpare | prawda |
lokalizacja | Seattle |
Wybierz przycisk Dalej , aby przejść do strony Dodawanie tagów .
Tworzenie tagów OPC UA
Dodaj dwa tagi OPC UA na stronie Dodawanie tagów . Aby dodać każdy tag, wybierz pozycję Dodaj tag lub csv , a następnie wybierz pozycję Dodaj tag. Wprowadź szczegóły tagu pokazane w poniższej tabeli:
Identyfikator węzła | Nazwa tagu | Tryb obserwacji |
---|---|---|
ns=3; s=FastUInt10 | temperature | Brak |
ns=3; s=FastUInt100 | Tag 10 | Brak |
Tryb obserwacji jest jedną z następujących wartości: None
, , Counter
Gauge
, Histogram
lub Log
.
Możesz wybrać pozycję Zarządzaj ustawieniami domyślnymi, aby zmienić domyślny interwał próbkowania i rozmiar kolejki dla każdego tagu.
Wybierz przycisk Dalej, aby przejść do strony Dodawanie zdarzeń, a następnie przycisk Dalej, aby przejść do strony Przegląd.
Wykonaj przegląd
Przed wybraniem pozycji Utwórz przejrzyj szczegóły zasobu i tagu i wprowadź potrzebne zmiany:
Ta konfiguracja wdraża nowy zasób wywoływany thermostat
w klastrze. Możesz użyć kubectl
polecenia , aby wyświetlić zasoby:
kubectl get assets -n azure-iot-operations
Sprawdzanie, czy dane przepływają
Sprawdź, czy dane przepływają do brokera MQTT przy użyciu narzędzia mosquitto_sub . W tym przykładzie uruchomisz narzędzie mosquitto_sub w klastrze Kubernetes:
Uruchom następujące polecenie, aby wdrożyć zasobnik zawierający narzędzia mosquitto_pub i mosquitto_sub przydatne do interakcji z brokerem MQTT w klastrze:
kubectl apply -f https://raw.githubusercontent.com/Azure-Samples/explore-iot-operations/main/samples/quickstarts/mqtt-client.yaml
Poniższy fragment kodu przedstawia zastosowany plik YAML:
# Important: do not use in production environments # Creates a pod with mosquitto-clients and mqttui utilities in your cluster apiVersion: v1 kind: Pod metadata: name: mqtt-client # The namespace must match the IoT MQ BrokerListener's namespace # Otherwise use the long hostname: aio-broker.azure-iot-operations.svc.cluster.local namespace: azure-iot-operations spec: # Use the "mqtt-client" service account which comes with default deployment # Otherwise create it with `kubectl create serviceaccount mqtt-client -n azure-iot-operations` serviceAccountName: mqtt-client containers: # Install mosquitto and mqttui utilities on Alpine linux - image: alpine name: mqtt-client command: ["sh", "-c"] args: ["apk add mosquitto-clients mqttui && sleep infinity"] resources: limits: cpu: 500m memory: 200Mi requests: cpu: 100m memory: 100Mi volumeMounts: - name: broker-sat mountPath: /var/run/secrets/tokens - name: trust-bundle mountPath: /var/run/certs volumes: - name: broker-sat projected: sources: - serviceAccountToken: path: broker-sat audience: aio-internal # Must match audience in BrokerAuthentication expirationSeconds: 86400 - name: trust-bundle configMap: name: azure-iot-operations-aio-ca-trust-bundle # Default root CA cert
Uwaga
Ta konfiguracja nie jest bezpieczna. Nie używaj tej konfiguracji w środowisku produkcyjnym.
Po uruchomieniu zasobnika mqtt-client uruchom następujące polecenie, aby utworzyć środowisko powłoki w utworzonym zasobniku:
kubectl exec --stdin --tty mqtt-client -n azure-iot-operations -- sh
W powłoce powłoki Bash w zasobniku mqtt-client uruchom następujące polecenie, aby nawiązać połączenie z brokerem MQTT przy użyciu narzędzia mosquitto_sub subskrybowanego do tematu
data/thermostat
:mosquitto_sub --host aio-broker --port 18883 --topic "azure-iot-operations/data/#" -v --debug --cafile /var/run/certs/ca.crt -D CONNECT authentication-method 'K8S-SAT' -D CONNECT authentication-data $(cat /var/run/secrets/tokens/broker-sat)
To polecenie będzie nadal uruchamiane i wyświetla komunikaty po nadejściu tematu
data/thermostat
do momentu naciśnięcia Ctrl+C , aby go zatrzymać.
Aby sprawdzić, czy dodany zasób termostatu publikuje dane, wyświetl dane telemetryczne w temacie azure-iot-operations/data
:
Client $server-generated/05a22b94-c5a2-4666-9c62-837431ca6f7e received PUBLISH (d0, q0, r0, m0, 'azure-iot-operations/data/thermostat', ... (152 bytes))
{"temperature":{"SourceTimestamp":"2024-07-29T15:02:17.1858435Z","Value":4558},"Tag 10":{"SourceTimestamp":"2024-07-29T15:02:17.1858869Z","Value":4558}}
Client $server-generated/05a22b94-c5a2-4666-9c62-837431ca6f7e received PUBLISH (d0, q0, r0, m0, 'azure-iot-operations/data/thermostat', ... (152 bytes))
{"temperature":{"SourceTimestamp":"2024-07-29T15:02:18.1838125Z","Value":4559},"Tag 10":{"SourceTimestamp":"2024-07-29T15:02:18.1838523Z","Value":4559}}
Client $server-generated/05a22b94-c5a2-4666-9c62-837431ca6f7e received PUBLISH (d0, q0, r0, m0, 'azure-iot-operations/data/thermostat', ... (152 bytes))
{"temperature":{"SourceTimestamp":"2024-07-29T15:02:19.1834363Z","Value":4560},"Tag 10":{"SourceTimestamp":"2024-07-29T15:02:19.1834879Z","Value":4560}}
Client $server-generated/05a22b94-c5a2-4666-9c62-837431ca6f7e received PUBLISH (d0, q0, r0, m0, 'azure-iot-operations/data/thermostat', ... (152 bytes))
{"temperature":{"SourceTimestamp":"2024-07-29T15:02:20.1861251Z","Value":4561},"Tag 10":{"SourceTimestamp":"2024-07-29T15:02:20.1861709Z","Value":4561}}
Client $server-generated/05a22b94-c5a2-4666-9c62-837431ca6f7e received PUBLISH (d0, q0, r0, m0, 'azure-iot-operations/data/thermostat', ... (152 bytes))
{"temperature":{"SourceTimestamp":"2024-07-29T15:02:21.1856798Z","Value":4562},"Tag 10":{"SourceTimestamp":"2024-07-29T15:02:21.1857211Z","Value":4562}}
Jeśli nie ma przepływanych danych, uruchom ponownie zasobnik aio-opc-opc.tcp-1
:
Znajdź nazwę
aio-opc-opc.tcp-1
zasobnika przy użyciu następującego polecenia:kubectl get pods -n azure-iot-operations
Nazwa zasobnika wygląda następująco:
aio-opc-opc.tcp-1-849dd78866-vhmz6
.Uruchom ponownie zasobnik
aio-opc-opc.tcp-1
, używając polecenia, które wygląda jak w poniższym przykładzie.aio-opc-opc.tcp-1
Użyj nazwy zasobnika z poprzedniego kroku:kubectl delete pod aio-opc-opc.tcp-1-849dd78866-vhmz6 -n azure-iot-operations
Przykładowe tagi dodane w poprzednim przewodniku Szybki start generują komunikaty z zasobu, które wyglądają jak w poniższym przykładzie:
{
"temperature": {
"SourceTimestamp": "2024-08-02T13:52:15.1969959Z",
"Value": 2696
},
"Tag 10": {
"SourceTimestamp": "2024-08-02T13:52:15.1970198Z",
"Value": 2696
}
}
Jak rozwiązaliśmy ten problem?
W tym przewodniku Szybki start dodano punkt końcowy zasobu, a następnie zdefiniowano zasób i tagi. Dane modelu zasobów i tagów z serwera OPC UA ułatwiają korzystanie z danych w brokerze MQTT i innych procesach podrzędnych. Użyj zasobu termostatu zdefiniowanego w następnym przewodniku Szybki start.
Czyszczenie zasobów
Jeśli przejdziesz do następnego przewodnika Szybki start, zachowaj wszystkie zasoby.
Jeśli chcesz usunąć wdrożenie operacji usługi Azure IoT, ale zachować klaster, użyj polecenia az iot ops delete :
az iot ops delete --cluster $CLUSTER_NAME --resource-group $RESOURCE_GROUP
Jeśli chcesz usunąć wszystkie zasoby utworzone na potrzeby tego przewodnika Szybki start, usuń klaster Kubernetes, w którym wdrożono operacje usługi Azure IoT, a następnie usuń grupę zasobów platformy Azure zawierającą klaster.
Jeśli na potrzeby tych przewodników Szybki start użyto usługi Codespaces, usuń środowisko Codespace z usługi GitHub.