Documentation for version: v0.2.0
The concepts chapter provides an overview of all aspects of Flotta. See the getting started guides section if you are looking for an entry point introduction to Flotta.
The operator is responsible for handling all Custom Resources definitions from project-flotta. All the resources that the operator manages can be found on CRD spec or using the following command:
kubectl api-resources --api-group="management.project-flotta.io"
By default, all CRDs are created/updated or by the operator or by any Kubernetes user. Edge devices are not capable of dealing with Kubernetes objects.
By default, all Edgedevices connect to the Flotta Edge API, where they can retrieve the config and push information. This API is defined here
Connectivity beetween the EdgeDevice to the API is using a Mutual TLS connection, where we have two kinds of certificates.
Communication from Edgedevice to the API is like this:
An Edgedevice can be multiple things, from a tiny RPI Zero to a big X86 server. For flotta, an Edgedevie is an Operating system where device-agent and Yggdrasil are running, and some container workloads can be run by this daemon.
The communication from the edgedevice to the Kubernetes server is not required, so all communication is to the Flotta Edge API. At the same time, there are no things like CNI, CSI interfaces for getting it lightweight.
What project-flotta focused is that edgedevices can have one or multiple specs:
The EdgeDevice is a CRD that it’s defined here
Is a client daemon that establishes a receiving queue for instructions to be sent to the system via a broker. For us, the broker is HTTP, and it’s the Flotta Edge API.
Device Agent is a worker for Yggdrasil, and it’s the agent that deploys all podman, systemd, logs for all workloads, and deals with the Commmunication to the Flotta Edge API.
EdgeDevice Signed Request is a specific CRD type. When AUTO_APPROVAL is set to false, when device tries to register, but before it, and Edge Administrator needs to approve where the device will land and what kind of configuration it’ll have.
When a platform has thousands of different devices, a configuration group is needed to have similar configurations across different devices. A Device Set is one kind of CRD that allows users to define this configuration.
Example:
apiVersion: management.project-flotta.io/v1alpha1
kind: EdgeDeviceSet
metadata:
name: set-1
spec:
heartbeat:
periodSeconds: 5
metrics:
system:
interval: 600
osInformation:
automaticallyUpgrade: true
When a user wants to run a workload on a edgedevice, we use the CRD Edgeworkload. With this deployment option, you can run containers on any edgedevice.
EdgeWorkload has the same configuration as the Pod Specification, plus some other entries that are specific to Flotta project. This is an example workload manifest.
apiVersion: management.project-flotta.io/v1alpha1
kind: EdgeWorkload
metadata:
name: x86-logs
namespace: ny
spec:
deviceSelector:
matchLabels:
device.cpu-architecture: x86_64
type: pod
pod:
spec:
containers:
- name: random-server
image: quay.io/project-flotta/nginx:1.21.6