Skip to content
This repository has been archived by the owner on Mar 7, 2024. It is now read-only.

Latest commit

 

History

History
143 lines (97 loc) · 12.7 KB

README.md

File metadata and controls

143 lines (97 loc) · 12.7 KB

Table of Contents

What is EdgeNet?

EdgeNet is a free and open-source cloud orchestration software extension that brings industry-standard cloud software Kubernetes to the network edge.

It is important to distinguish EdgeNet software and EdgeNet Testbed. If you are a user of EdgeNet Testbed please refer to the Testbed's website. This documentation is intended for users and developers of EdgeNet software (will be referred to as simply EdgeNet).

The EdgeNet's source code is hosted in the official Github repository.

Prerequisites

To effectively understand how to use EdgeNet in your Kubernetes cluster, it is required to have a basic understanding of Kubernetes. For more information on how Kubernetes operates, you can refer to the Kubernetes documentation.

Installation

To deploy EdgeNet to your Kubernetes cluster, we recommend following the advanced installation tutorial. To use the command line tool fedmanctl we recommend following the fedmanctl installation tutorial.

If you want to remove EdgeNet from your cluster, refer to the removing EdgeNet from a Kubernetes cluster tutorial.

Tutorials

We have provided some of the tutorials below for using different functionalities:

We have also added tutorials for fedmanctl command line tool. They can be accessed here:

Old EdgeNet tutorials can be accessed under the /doc/tutorials/old folder. See the old tutorial's Readme.

Components

We have devised 4 major categories of features that EdgeNet offers and grouped the corresponding CRDs. However, this classification does not fully differentiate CRDs. For instance, the Selective Deployment CRD takes the role in both federation and location-based node selection categories.

Here are the categories and their associated CRDs:

Fedmanctl

To facilitate federation capabilities, our EdgeNet project incorporates a command line utility called fedmanctl. This utility serves the purpose of enabling the federation of workload and manager Kubernetes clusters.

Currently, fedmanctl is undergoing active development, focusing primarily on implementing the core components related to federation features. While it is a work in progress, essential functionalities have already been incorporated. For the basic use case of federating a workload Kubernetes cluster, please consult the fedmanctl federation tutorial.

fedmanctl comprises two modules known as workload and manager. The workload module encompasses subcommands that initialize the federation capabilities of EdgeNet and generate a token for the manager cluster. This token contains sensitive information that grants external access to the workload cluster's API server. On the other hand, the manager subcommands are responsible for establishing a link between the workload cluster and the manager cluster using the token.

In the future, additional subcommands may be developed to establish connections between manager Kubernetes clusters.

Concepts

Extending Kubernetes

To extend Kubernetes API, EdgeNet makes use of Kubernetes CRDs (custom resource definitions). CRDs allow us to define custom API objects to be manipulated by the Kubernetes API. These components and their properties are explained in components seciton.

A controller in Kubernetes listens for changes in an object. Then it tries to converge the desired state of the object with the current state. It is also possible to implement custom controllers that may contain business logic for custom objects. EdgeNet employs its custom controllers can be found under the pkg/controllers folder and uses the design of Kubernetes' sample-controller example. Additionally, custom controllers usually run inside the cluster in a production environment. The images of these custom controllers can be found on EdgeNet's DockerHub page.

Multitenancy

The architecture of the EdgeNet custom resources and controllers runs in the control plane along with other Kubernetes components. To ensure better isolation of workloads, we advise using Kata Containers as the container runtime, but this is optional and any container runtime can be configured when creating the Kubernetes cluster. You can refer to official Kubernetes documentation on how to create Kubernetes clusters for more information.

EdgeNet uses the tenant custom resource to represent a tenant where each tenant is a customer that contracts for services on behalf of one or more users. EdgeNet provides multitenancy support to Kubernetes clusters it has installed. This means a tenant and its workloads cannot access resources, or objects reserved for other tenants or their workloads.

In some cases, we want to ensure the resources are reserved for a specific tenant. This requirement is satisfied by a mechanism called slicing, which is assigned to tenants by creating slice claims. There are two types to create two types of slices; Node-level slices allow the reservation of whole nodes just for a single tenant. Sub-node-level slices, on the other hand, allow granular resources on a selected node to be reserved.

Slicing

There is also the subnamespace mechanism implemented in EdgeNet to ensure tenants create non-flat namespaces with specific resource quotas. The resource limitations are also propagated when a new subnamespace is added. This can be seen in the figure below. r represents the root namespace which has a specified quota of 100 units. Note that, r doesn't have a quota directly since it is an abstraction. However, each other namespace exists in the flat namespaces of Kubernetes thus, they also have a quota assigned to them. For example, when the two subnamespaces aa and ab are added to the subnamespace a, the 60-unit resource is divided by 3 to 20, 25, and 15 units.

D

Lastly, the tenants can have tenant resource quotas. Which puts a limit to a tenant's useable resource quota.

Location-Based Node Selection

EdgeNet utilizes a custom resource known as selective deployment to facilitate the specification of a deployment's geographic area. This feature enables users to precisely define the geographical boundaries within which their deployment operates. To support this mechanism, it is essential to determine the geographic locations of the nodes involved.

To achieve this, EdgeNet employs a node labeler, which is responsible for assigning geographical labels to each node. The node labeler plays a crucial role in accurately identifying and categorizing the nodes based on their physical locations. By labeling the nodes accordingly, EdgeNet can effectively manage the selective deployment of resources and ensure that workloads are distributed within the specified geographic area.

The combination of the selective deployment custom resource and the node labeler enhances EdgeNet's capabilities in achieving targeted and geographically constrained deployments. This enables users to have greater control over the geographical distribution of their resources and optimize their system's performance based on specific requirements or constraints.

Federation of Multiple EdgeNet Clusters

The incorporation of federation support within EdgeNet empowers multiple clusters to collaborate and distribute workloads efficiently. This feature aims to facilitate the creation of a flexible system by enabling clusters from different providers. By leveraging the federation capabilities, EdgeNet users can harness the advantages of geographically distributed resources and optimize their workload management.

However, it is important to note that the federation features are currently in the development phase and have not yet reached their full potential in the release-1.0 version of EdgeNet. The development team is actively working to enhance and refine these features to ensure their reliability and effectiveness.

Development and Contributing

If you are familiar with the Standard Go Project Layout used by other Kubernetes-related projects, you will easily be able to navigate the EdgeNet repository.

To get a sense of where we are heading, please see our planned features board. We follow an agile development approach, with two-week sprints, each one leading to a new psroduction version of the code. Our current sprint is one of the milestones, and you can see more near-term issues in our project backlog.

To start work, clone the latest release branch. If you add a new piece of code, please make sure you have prefaced it with the standard copyright notice and license information found in other places in the code. If you have an idea or an implementation you would like us to look at, please create a pull request for @bsenel to review.

Contributing Guides

Please refer to the contributing guides before creating a pull request.

Architectural Design Proposals (ADRs)

For architectural design proposal please create a ADR located under /doc/adrs/.

Unit Tests Guides

We make sure the code works correctly by having high-quality unit tests. You can find the unit test guides for creating unit tests.

Branches

  • The master branch reflects the currently-deployed version of EdgeNet.
  • The latest release branch is where we prepare the next EdgeNet release. Please use this branch for all of the pull requests.