Skip to content

Commit

Permalink
Update harbor-satellite-proposal.md
Browse files Browse the repository at this point in the history
Updated :
- Overall architecture
- Typical use cases for each architecture
- Better description of Container Runtime Configuration
Signed-off-by: Roald Brunell <[email protected]>
  • Loading branch information
OneFlyingBanana authored and bupd committed Aug 14, 2024
1 parent 42b7647 commit f419e1d
Showing 1 changed file with 15 additions and 7 deletions.
22 changes: 15 additions & 7 deletions proposals/new/harbor-satellite-proposal.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,9 @@ Compatibility with all container registries or edge devices can't be guaranteed.

Harbor Satellite, at its most basic, will run in a single container and will be divided in the following 2 components :

- **Satellite Core** : pulling/pushing images from/to Harbor (using go-libp2p?) and pulling/pushing images from/to the local registry (using Skopeo and/or Crane?).
- **Registry Proxy** : storing required OCI artifacts locally (using zotregistry or docker registry?).
- **Satellite** : Is responsible for moving artifacts from upstream (using Skopeo/Crane/Other), identifying the source and reading the list of images that needs to be replicated. Satellite will also be able to modify and manage the container runtimes. configuration in sync so that container runtime does not fetch images from remote.
- **OCI Registry** : Is responsible for storing required OCI artifacts locally (using zotregistry or docker registry).
- **Ground Control** : Is a component of Harbor and is responsible for serving a Harbor Satellite with the list of images it needs.

![Basic Harbor Satellite Diagram](../images/harbor-satellite/harbor-satellite-diagram.svg)

Expand All @@ -58,26 +59,33 @@ Harbor Satellite may be implemented following 1 or several of 3 different archit
In this basic use case, the stateless satellite component will handle pulling images from a remote registry and then pushing them to the local OCI compliant registry. This local registry will then be accessible to other local edge devices who can pull required images directly from it.
_(A direct access from edge device to the remote registry is still possible when network conditions permit it)._
The satellite component may also handle updating container runtime configurations and fetching image lists from Ground Control, a part of Harbor.
The stateful local regsitry will also need to handle storing and managing data on local volumes.
The stateful local regsitry will also need to handle storing and managing data on local volumes.
A typical use case would work as follows :
_In an edge computing environment where IoT devices are deployed to a location with limited or no internet connnectivity, these devices need to run containerised images but cannot pull from a central Harbor registry. A local Harbor Satellite instance can be deployed and take up this role while Internet connectivity is unreliable and distribute all required images. Once a reliable connection is re-established, the Harbor Satellite instance will be able to pull required images from its central Harbor registry and thus store up to date images locally._

![Use Case #1](../images/harbor-satellite/use-case-1.png)
<p align="center"><em>Use case #1</em></p>

2. **Replicating from a remote regsitry to a local Spegel Registry**
The stateless satellite component send pull instructions to Spegel instances running with each node of a Kubernetes cluster. The node will then directly pull images from a remote registry and share it with other local nodes, removing the need for each of them to individually pull an image from a remote registry.
The stateless satellite component send pull instructions to Spegel instances running with each node of a Kubernetes cluster. The node will then directly pull images from a remote registry and share it with other local nodes, removing the need for each of them to individually pull an image from a remote registry.
The network interfaces (boundaries) represented in this use case should and will be the same as those represented in use case #1
A typical use case would work as follows :
_In a larger scale edge computing environment with a significant amount of IoT devices needing to run containerised applications, a single local registry in might not be able to handle the increased amount of demands from edge devices. The solution is to deploy several registries to several nodes who are able to automatically replicate images across each other thanks to Spegel instances running together with each node. The Satellite component will use the same interface to instruct each node when, where and how to pull new images that need to be replicated across the cluster._

![Use Case #2](../images/harbor-satellite/use-case-2.png)
<p align="center"><em>Use case #2</em></p>

3. **Proxying from a remote regsitry over the local registry**
The stateless satellite component will be in charge of configuring the local OCI compliant registry, which will be running in proxy mode only. This local registry will then handle pulling necessary images from the remote registry and serving them up for use by local edge devices.
The stateless satellite component will be in charge of configuring the local OCI compliant registry, which will be running in proxy mode only. This local registry will then handle pulling necessary images from the remote registry and serving them up for use by local edge devices.
A typical use case would work as follows :
_When, for a number of possible different reasons, the remote registry side of the diagram would not be able to produce a list of images to push down to the Harbor Satellite, the Satellite would then act as a proxy and forward all requests from edge devices to the remote registry. This ensures the availability of necessary images without the need for a pre-compiled list of images_

![Use Case #3](../images/harbor-satellite/use-case-3.png)
<p align="center"><em>Use case #3</em></p>

### Consumer Configuration
### Container Runtime Configuration

In each of these use cases, we need to ensure that consumers will be able to access the registry and pull images from it. To solve this issue, we propose 4 solutions :
In each of these use cases, we need to ensure that IoT edge devices needing to run containers will be able to access the registry and pull images from it. To solve this issue, we propose 4 solutions :

1. By using **containerd** or **CRI-O** and configuring a mirror within them.
2. By setting up an **HTTP Proxy** to manage and optimize pull requests to the registry.
Expand Down

0 comments on commit f419e1d

Please sign in to comment.