Specification
Organization types
There are three basic organization types:
- Provider: an organization that provides edge nodes
- Deployer: an organization that installs nodes at the edge
- User: an organization that deploys applications to edge nodes
Note that a deployer could be its own provider, the user could also be the deployer, etc.
Workspace
For gitops, the starting point is git repositories. The following lists the three primary repositories and the objects usually found in them.
- Provider repository.
- Node
- Node type
- Shipment
- Deployer repository.
- Placement
- Placement rule
- Schedule
- Schedule plan
- User repository
- Helm registry
- Helm release
It is not required that the objects be in separate repositories. This organization is only a recommendation.
Objects
We follow the Kubernetes format for defining API objects. The general format is as follows:
apiVersion: edgecell.io/v1
kind: # the object type
metadata:
name: # identifier for this object
namespace: # in which the name is unique
uuid: # globally unique id
labels:
foo: bar # queriable name-value pairs
annotations:
goo: mar # see k8s docs for difference between labels and annotations
spec:
someproperty: somevalue # the spec is the object itself
status:
We use the format of Kubernetes objects because it is familiar and easy to use. These object types do not actually directly apply to a Kubernetes cluster.
Elements
- apiVersion: Publisher and version of the object schema. Must be
edgecell.io/v1
- kind: the object type. See the child pages in this section.
- labels: name-value pairs used to query and select objects
- annotations: human readable values to provide details on objects
- spec: the specification properties of the object
- status: the status properties of the object
Object IDs
We refer to object with the combination of the namespace and name. If the namespace is mcdougals
and the name
is pilot-1
then the object ID is mcdougals/pilot-1
.
The combination of namespace and name should be unique. The combination of namespace, name and kind must be unique.
The Edgecell VSCode extensions track and link the IDs across your workspace and check for duplicates and missing objects.
The tools automatically generate a UUID for each object, which is useful for some infrastructure, but a user does not need to worry with them.
References
More can be read here: