This blog was originally published at project-flotta.io as part of my Google Summer of Code contribution in 2022.
Edge Example App is an app for Flotta Edge devices, with a workload that will be deployed on the device that has two main features:
Sensing the Internet (which helps to construct devices network topology). <= this article
Read CPU temperature (which indicates how much load the device is handling).
As Project Flotta's goal is to manage workloads deployed on small-footprint devices and deal with network connectivity issues, this app provides a way of collecting network information that will be exported to the edge cluster. This App Along with the Web UI Interface, provides a good view of the network topology and the devices that are connected to the Internet.
How this app works
Taking the simple way of getting network information, this app collects its information about the network by sending a packet on the IP network to the Edge Cluster, calculating the time taken for each hop the packet makes during its route to the destination, this much like traceroute in the network but done on the device.
As a workload app, this app benefits from Flotta Edge devices architecture, collecting its information and saving it to a file on the device and letting the device worker send it to the edge cluster, this way
How to use this app
Use the following manifests to deploy the app to your device:
First, apply your secrets and
apiVersion: v1 kind: Secret metadata: name: s3secret namespace: default type: Opaque data: AWS_ACCESS_KEY_ID: <your-aws-access-key-id> AWS_SECRET_ACCESS_KEY: <your-aws-secret-key>
apiVersion: v1 kind: ConfigMap metadata: name: dc1-syslog namespace: default data: Address: dc1.syslog.project-flotta.io:601 Protocol: tcp apiVersion: v1 kind: ConfigMap metadata: name: secure-syslog namespace: default data: Address: secure.dc1.syslog.project-flotta.io:601 Protocol: tcp apiVersion: v1 kind: ConfigMap metadata: name: s3config namespace: default data: BUCKET_HOST: s3://flotta-data-bucket BUCKET_NAME: flotta-data-bucket BUCKET_PORT: "443" BUCKET_REGION: us-east-1
Second, apply the device by this manifest (or update it if it already exists):
apiVersion: management.project-flotta.io/v1alpha1 kind: EdgeDevice metadata: name: <your-device-name> namespace: default labels: app: <some-label-here> spec: requestTime: "2022-07-14T04:55:44Z" logCollection: dc1-syslog: bufferSize: 10 # 10 megabytes of size kind: syslog syslogConfig: name: dc1-syslog secure-syslog: bufferSize: 100 # 100 megabytes of size kind: syslog syslogConfig: name: secure-syslog storage: s3: configMapName: "s3config" secretName: "s3secret"
Note: these files explained in the Docs
Finally, apply the app to the device:
apiVersion: management.project-flotta.io/v1alpha1 kind: EdgeWorkload metadata: name: <workload-name> spec: logCollection: dc1-syslog deviceSelector: matchLabels: app: <device-label> # same as the device label data: egress: - source: export target: example-edge-device type: pod pod: spec: containers: - name: edge-example-workload image: docker.io/ahmadateya/flotta-edge-example-workload:latest securityContext: capabilities: add: ["ALL"]
in part 2, we will see how the Web App presents the network topology and the devices that are connected to the Internet.