Receive
The aim of this chart is to deploy all the receive workflows. This chart was developed to be as generic as possible by providing appropriate parameters to customise what it deploys. It is implemented as a StatefulSet to provide stable DNS-based IP addresses. This chart helps with reducing the number of helm charts that need to be maintained for SDP deployments.
Currently, it works with the vis-receive workflow. We will be carrying out further testing and adding functionality if required to make it compatible with other receive workflows.
Deploying receive
Start minikube:
minikube start --vm-driver=virtualbox
There are few setups we need to do before running the workflow.
As an example we will use cbf-sdp visibility. First need to download the sim-vis.ms.tar.gz
from the
CBF-SDP Emulator Repository.
Extract the file:
tar -xf sim-vis.ms.tar
Create a persistent volume, to do that create a file called pvc.yaml
and add the following:
kind: PersistentVolume
apiVersion: v1
metadata:
name: pv-local
labels:
type: local
spec:
storageClassName: local
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "<path to sim-vis.ms"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: local-pvc
spec:
storageClassName: local
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
selector:
matchLabels:
type: local
Note - Make sure to update the hostPath.
Create receive namespace:
kubectl create namespace receive
Create persistent volume by executing the following command:
kubectl create -f pvc.yaml -n receive
After cloning the SDP Helm Deployer Charts repository,
cd ska-sdp-helmdeploy-charts/charts
To add all the required parameters to start the cbf receiver, need to create a temporary yaml file.
Create test.yaml
file and add the following:
command:
- emu-recv
- -o
- payload.method=icd
- -o
- reader.num_chan=0
- -o
- reader.num_repeats=1
- -o
- reader.num_timestamps=0
- -o
- reader.start_chan=0
- -o
- reception.num_ports=1
- -o
- reception.outputfilename=/mnt/data/output.ms
- -o
- reception.receiver_port_start=41000
- -o
- transmission.channels_per_stream=4
- -o
- transmission.rate=147500
- -o
- reception.datamodel=/mnt/data/sim-vis.ms
duration: 20
image: nexus.engageska-portugal.pt/ska-docker/cbf_sdp_emulator
length: 10
model:
name: sim-vis.ms
payload:
method: icd
pvc:
name: local-pvc
path: /mnt/data
reader:
num_chan: 0
num_repeats: 1
num_timestamps: 0
start_chan: 0
reception:
num_ports: 1
outputfilename: output.ms
receiver_port_start: '41000'
recv_emu: emu-recv
replicas: 1
results:
push: false
transmission:
channels_per_stream: 4
rate: '147500'
version: latest
Install the chart:
helm install recv receive -n receive -f test.yaml
The deployment can be monitored using k9s or by running:
kubectl get all -n receive
NAME READY STATUS RESTARTS AGE
pod/recv-receive-0 1/1 Running 0 24s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/receive ClusterIP None <none> <none> 24s
NAME READY AGE
statefulset.apps/recv-receive 1/1 24s
which shows the receive pod and the network service. Once the receive pod enters the running state, we can check if the container has been deployed correctly by running:
kubectl logs <podname> -n receive
which, if the receive application has been successfully launched should show:
1|2021-08-23T15:29:13.790Z|INFO|MainThread|__init__|utils.py#74||Attempting to build model from /mnt/data/sim-vis.ms
Successful readonly open of default-locked table /mnt/data/sim-vis.ms: 22 columns, 1330 rows
...
1|2021-08-23T15:29:13.905Z|INFO|MainThread|_create_ms|msutils.py#471||Creating MS at output.ms for 4 stations and 4 channels starting at 149.900 MHz
Successful read/write open of default-locked table /output.ms/OBSERVATION: 9 columns, 0 rows
...
1|2021-08-23T15:29:13.945Z|INFO|MainThread|__init__|spead2_receivers.py#85||Creating stream with 1 UDP readers to receive data for 4 channels
...
1|2021-08-23T15:29:13.946Z|INFO|MainThread|_setup_streams|spead2_receivers.py#99||Started udp_reader on port 41000