Skip to content

Commit

Permalink
Update to proposal
Browse files Browse the repository at this point in the history
Added 3 new use cases
Signed-off-by: Roald Brunell <[email protected]>
  • Loading branch information
OneFlyingBanana authored and bupd committed Aug 14, 2024
1 parent ddfe8b7 commit 42b7647
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 10 deletions.
Binary file added proposals/images/harbor-satellite/use-case-1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added proposals/images/harbor-satellite/use-case-2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added proposals/images/harbor-satellite/use-case-3.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
52 changes: 42 additions & 10 deletions proposals/new/harbor-satellite-proposal.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
# Proposal: `Harbor Satellite`

Authors: Vadim Bauer / [Vad1mo](https://github.com/Vad1mo), Csaba Almasi, Philip Laine, Roald Brunell / [OneFlyingBanana](https://github.com/OneFlyingBanana), (David Huseby, ...?)

<!--Discussion: `Link to discussion issue, if applicable`-->
Authors: Vadim Bauer / [Vad1mo](https://github.com/Vad1mo), Csaba Almasi, Philip Laine, David Huseby / [dhuseby](https://github.com/dhuseby), Roald Brunell / [OneFlyingBanana](https://github.com/OneFlyingBanana)

## Abstract

Expand Down Expand Up @@ -31,7 +29,7 @@ Deploying a complete Harbor instance on edge devices in poor/no coverage areas c
- Harbor wasn't designed to run on edge devices.(e.g. Multiple processes, no unattended mode)
- Harbor could behave unexpectedly in poor/no connectivity environments.
- Managing hundreds or thousands of container registries is not operationally feasible with Harbor
- (What is the difference to a registry mirror?)
- Harbor would be too similar to a simple registry mirror

Harbor Satellite aims to be resilient, lightweight and will be able to keep functioning independently from Harbor instances.

Expand All @@ -41,17 +39,51 @@ Compatibility with all container registries or edge devices can't be guaranteed.

## Implementation

Harbor Satellite will run in a single container and will be divided in the following components :
### Overall Architecture

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?).

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

<p align="center"><em>Harbor Satellite Diagram</em></p>
<p align="center"><em>Basic Harbor Satellite Diagram</em></p>

## Open issues (if applicable)
### Specific Use Cases

Harbor Satellite may be implemented following 1 or several of 3 different architectures depending on its use cases :

1. **Replicating from a remote registry to a local registry.**
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.

![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.

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

Harbor Satellite aims to manage, coordinate and schedule containers using a Kubernetes cluster.
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.

Harbor Satellite also aims to use and benefit from Spegel, a registry mirror designed to optimize the pulling of container images within a Kubernetes cluster.
![Use Case #3](../images/harbor-satellite/use-case-3.png)
<p align="center"><em>Use case #3</em></p>

### Consumer 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 :

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.
3. By **directly referencing** the registry.
4. By **directly referencing** the registry and using Kubernetes' mutating webhooks to point to the correct registry.

## Open issues (if applicable)

T.B.D.

0 comments on commit 42b7647

Please sign in to comment.