Skip to main content
Version: 0.x

Getting Started with FITA

This section explains how to use FITA to add a Far-Edge device to the Kubernetes cluster and how to deploy workloads on them. Before detailing these procedures you need to install FITA and IoTNetEMU.

Requirements

Before running FITA, you need to ensure some dependencies are available. These are:

Kubernetes Cluster

FITA does not have any direct dependency on any Kubernetes distribution, requiring only a working cluster with at least one node. There are several options you can used to ease the setup of a cluster:

Additionally, we require DNS support in the cluster and a working metrics-server.

While any of the options meet the requirements for FITA, the guides on this page are built and tested with MicroK8s. A small configuration guide for MicroK8s can be found here.

For other distributions or solutions, refer to their documentation.

Install and Configure MicroK8S

Here we show a quick guide highlighting the minimal MicroK8s configurations to support FITA.

  1. Install MicroK8s following this guide
  2. Enable DNS addon
microk8s enable dns
  1. Enable metrics-server
microk8s metrics-server
  1. Enable the built-in registry
microk8s registry
  1. Create an alias for kubectl
alias kubectl='microk8s kubectl'
warning

IoTNetEMU modifies the network interfaces of the host. If it is launched in the same node as the one running MicroK8s, additional configurations are need to ensure the network changes do not interfere with the cluster.

To disable MicroK8s network change monitoring, add the --advertise-address 0.0.0.0 option to /var/snap/microk8s/current/args/kube-apiserver and restart MicroK8s. Refer to this page for more information.

Other Kubernetes distributions might have similar issues. Refer to their documentation.

Installing FITA

FITA is deployed using Helm. Depending on your setup, it may already be available in your system. If not, refer to this guide.

To install FITA:

  1. Create Kubernetes namespace for FITA
kubectl create namespace fita
  1. Deploy FITA to the fita namespace
microk8s helm install fita oci://ghcr.io/fraunhoferportugal/fita --version 0.1.0 -n fita
  1. Wait for all container images to be deployed
  2. Validate that the FITA pod is running correctly
kubectl get pods -n fita

Which should output:

NAME                         READY   STATUS    RESTARTS   AGE
fita-fita-5cfd8bd5ff-5tcz5 4/4 Running 0 37s

Installing IoTNetEMU

IoTNetEMU is a Python framework that integrates several open-source emulation and simulation tools to create a more realistic testing and development scenario for IoT applications. It allows developers to easily validate and test an application using simple configurations and actual code with minimal adaptations.

FITA leverages IoTNetEMU to emulate Far-Edge devices running the embServe runtime, removing the need for real devices and allowing large scale testing with minimal effort.

IoTNetEMU is distributed as a Docker image and hosted in a public registry. To install IoTNetEMU:

  • Create a folder to store IoTNetEMU configuration files:
mkdir ~/.iotnetemu
  • Create the IoTNetEMU Docker container:
docker container create --name iotnetemu --entrypoint /bin/bash --network host --privileged -v /dev/pts/:/dev/pts/ -v ~/.iotnetemu:/iotnetemu/workspace -it ghcr.io/fraunhoferportugal/fita/components/iotnetemu
  • Start the container:
docker container start -a -i iotnetemu
  • Validate that the container is working properly with the built-in sample:
root@<host>:/# iotnetemu --workspace /iotnetemu/samples/embserve-linux-bridge
  • You should get the following output, where 5 nodes are started:
2025-09-09 15:47:30,004 [INFO] Setting up node node1
2025-09-09 15:47:30,005 [INFO] Setting up node node2
2025-09-09 15:47:30,005 [INFO] Setting up node node3
2025-09-09 15:47:30,006 [INFO] Setting up node node4
2025-09-09 15:47:30,008 [INFO] Setting up node node5
2025-09-09 15:47:30,012 [INFO] Skipping build for node1
2025-09-09 15:47:30,013 [INFO] Creating interfaces for node node1
2025-09-09 15:47:30,017 [INFO] Skipping build for node2
2025-09-09 15:47:30,018 [INFO] Creating interfaces for node node2
2025-09-09 15:47:30,019 [INFO] Skipping build for node3
2025-09-09 15:47:30,019 [INFO] Creating interfaces for node node3
2025-09-09 15:47:30,023 [INFO] Skipping build for node4
2025-09-09 15:47:30,025 [INFO] Creating interfaces for node node4
2025-09-09 15:47:30,029 [INFO] Skipping build for node5
2025-09-09 15:47:30,029 [INFO] Creating interfaces for node node5
2025-09-09 15:47:30,030 [INFO] Setup done, starting...
2025-09-09 15:47:30,031 [INFO] Starting node node1
2025-09-09 15:47:30,031 [INFO] Starting node node2
2025-09-09 15:47:30,031 [INFO] Starting node node3
2025-09-09 15:47:30,032 [INFO] Starting node node4
2025-09-09 15:47:30,032 [INFO] Starting node node5
2025-09-09 15:47:30,136 [INFO] Saved /dev/pts/14 path on /iotnetemu/samples/embserve-linux-bridge/build/node1/pts for node node1
2025-09-09 15:47:30,138 [INFO] Saved /dev/pts/17 path on /iotnetemu/samples/embserve-linux-bridge/build/node2/pts for node node2
2025-09-09 15:47:30,140 [INFO] Saved /dev/pts/15 path on /iotnetemu/samples/embserve-linux-bridge/build/node4/pts for node node4
2025-09-09 15:47:30,140 [INFO] Saved /dev/pts/18 path on /iotnetemu/samples/embserve-linux-bridge/build/node3/pts for node node3
2025-09-09 15:47:30,142 [INFO] Saved /dev/pts/16 path on /iotnetemu/samples/embserve-linux-bridge/build/node5/pts for node node5
2025-09-09 15:47:33,062 [INFO] Creating interfaces using linux network
2025-09-09 15:47:33,155 [INFO] linux network setup done
2025-09-09 15:47:33,155 [INFO] All done, sleeping...
info

IoTNetEMU creates networks interfaces dynamically, which requires access to the host network to ensure the emulated devices can communicate with external hosts.

For more details regarding IoTNetEMU and its configurations, refer to here.


Now that FITA and the Far-edge device emulator is setup, we can go to Add Far-edge Device in Kubernetes Cluster, which explains with an hands-on example how are Far-edge devices added and represented in the Kubernetes cluster. Deploy Workload on Far-edge Devices continues the hands-on example for the deployment of Far-edge device workloads.

Advanced usage, such as the implementation of custom Far-edge workloads and the integration of Far-edge workloads with workloads running on other nodes of the cluster is explained in Create embServe Workload, Multi-platform images and Seamless interaction with workloads in Far-Edge and regular devices, respectively.

You can further explore FITA using the examples provided in the demo section.