Enable OPC UA on StarlingX¶
This guide describes how to enable OPC UA on StarlingX.
Background¶
As a cloud infrastructure software stack for the edge, Industrial IoT (IIoT) is an important use case for StarlingX.
OPC UA (Open Platform Communications Unified Architecture) is a data exchange standard for industrial communication, which integrates all functionalities from the existing OPC Classic specifications. It is an indispensable part of Industry 4.0. For StarlingX, it is very valuable to support OPC UA.
In this article, we’d like to share our practice of enabling OPC UA on StarlingX.
Build a container image with OPC UA server/client¶
There are quite a few open source OPC UA implementations available. Our work in this article is based on the project open62541, which is a popular and free OPC UA implementation written in C&C++ language.
The example below shows the dockerfile used to build the container image. The latest open62541 binary release v1.1 was installed.
From ubuntu:18.04
RUN apt-get update
RUN apt-get install -y wget
WORKDIR /opt
# install open62541 release package
RUN mkdir temp
RUN wget -qO- https://github.com/open62541/open62541/releases/download/v1.1/open62541-linux64.tar.gz | tar -xvz -C temp
RUN mv ./temp/open62541-linux64/bin/* /usr/bin/
RUN mv ./temp/open62541-linux64/include/* /usr/local/include/
RUN mv ./temp/open62541-linux64/lib/* /usr/lib/
RUN mv ./temp/open62541-linux64/share/open62541/tools .
RUN rm -r temp
ENV OPCUA_SERVER_IP "opcua-service.kube-system"
ENV OPCUA_SERVER_PORT "4840"
COPY run_ua_client.sh .
COPY run_ua_server.sh .
COPY ua_client .
run_ua_client.sh
and run_ua_server.sh
are two simple scripts to launch
OPC UA server and OPC UA client. The objective of this work is to enable and
verify OPC UA on StarlingX platform. For simplicity, we chose the sample OPC UA
server provided by the open62541 release instead of developing our own OPC UA
server. The sample client of open62541 hardcoded the server address and port as
localhost:4840
. We made some changes so it will accept two
arguments: server address and server port.
The content of run_ua_server.sh
:
#! /bin/sh
echo "start opc ua server ..."
ua_server_ctt.exe
The content of run_ua_client.sh
:
#! /bin/sh
n=1
while true
do
sleep 5
echo "start opc ua client for the $n time ..."
./ua_client $OPCUA_SERVER_IP $OPCUA_SERVER_PORT
n=$((n+1))
done
Deploy OPC UA server/client¶
In this step, we will demonstrate how to deploy OPC UA server and client with the container image built in the previous step on StarlingX platform.
Here we assume the container image with the name stx-opcua-base
has been
already pulled from a registry which StarlingX can access and uploaded into
StarlingX local registry.
We have two yaml files shown below for OPC UA server and client respectively.
apiVersion: v1
kind: Pod
metadata:
name: opcua-server
labels:
app: opcua-server
namespace: kube-system
spec:
hostNetwork: false
imagePullSecrets:
- name: registry-local-secret
containers:
- name: opcua-server
image: registry.local:9001/stx-opcua-base
command: ["/opt/run_ua_server.sh"]
---
apiVersion: v1
kind: Service
metadata:
name: opcua-service
namespace: kube-system
spec:
selector:
app: opcua-server
ports:
- protocol: TCP
port: 4840
targetPort: 4840
apiVersion: v1
kind: Pod
metadata:
name: opcua-client
labels:
app: opcua-client
namespace: kube-system
spec:
hostNetwork: false
imagePullSecrets:
- name: registry-local-secret
containers:
- name: opcua-client
image: registry.local:9001/stx-opcua-base
command: ["/opt/run_ua_client.sh"]
Once applied the two yaml files by the Kubernetes command
kubectl apply -f opcua-server.yaml
and
kubectl apply -f opcua-client.yaml
,
two pods will be created. Then we can check the status of the two pods.
controller-1:~$ kubectl -n kube-system get po | grep opcua
opcua-client 1/1 Running 0 15m
opcua-server 1/1 Running 0 15m
We also can use below commands to check the output of OPC UA server and client. The client was repeatedly reading some information from the server.
kubectl -n kube-system logs opcua-server
kubectl -n kube-system logs opcua-client
Summary¶
In this work, we took open62541 as an example to show how to enable OPC UA server and clients on StarlingX platform. In the future, we may explore how to operate more efficiently with OPC UA on StarlingX platform.