Skip to content

Commit

Permalink
Add general overview docs (#23)
Browse files Browse the repository at this point in the history
Signed-off-by: Rastislav Szabo <rastislav@kubermatic.com>
  • Loading branch information
rastislavs committed Jul 8, 2021
1 parent 4c2770d commit e9b2e2e
Show file tree
Hide file tree
Showing 7 changed files with 205 additions and 1 deletion.
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,8 @@ project.
Registry and Project resources are declaratively configured as separate files.
For examples, see the `examples` directory.

For more details, feel free to review the content of the [Documentaion folder](doc/README.md).

## Usage

### Applying the configuration
Expand Down
37 changes: 37 additions & 0 deletions doc/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# Registryman Documentation

## Concepts
Registryman (Registry Manager) allows configuration of container image registry
projects, project members and project replication rules in a declarative way (by
virtue of k8s custom resources / YAML files) on top of multiple types of container image registries.

Registryman can manage configuration of multiple registries at once and supports building hierarchical
registry solutions, consisting of:

- **Global Registry Hub**, which acts as a single source of truth for centralized image & vulnerability management,
- **Multiple Local Registries** potentially located in different regions to have the images in close location to users.

The Registryman ensures automatic replication of images between the Global and Local registries based on
the intent described using Registryman API.

An example of such deployment is shown on the following picture:

![global-registry-overview.svg](./img/global-registry-overview.svg "Overview")

To summarize the concepts shown on the picture:

- the setup consists of a single Global Registry Hub and multiple Local Registries,
- configuration and policies for projects across the whole setup can be managed using Registryman,
- Registryman ensures that projects, project members and project replication rules configuration is always synchronized across the setup,
- the users of global projects can push the images into the Global Registry Hub,
- images of the global projects will be automatically synchronized to all Local Registries,
- image consumers can pull the image from any Local (or Global) registry, e.g. based on their physical location,
- local project can exist within the Local Registries, they can be managed via Registryman, but are not replicated anywhere.

## Implementation Details
For more implementation details, you can review the following documents:

- [Registries and Projects](projects.md)
- [Data Model](datamodel.md)
- [Reconciliation](reconciliation.md)
- [Actions](actions.md)
File renamed without changes.
File renamed without changes
3 changes: 3 additions & 0 deletions doc/img/global-registry-overview.svg
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
162 changes: 162 additions & 0 deletions doc/img/global-registry-overview.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,162 @@
<?xml version="1.0" encoding="UTF-8"?>
<mxfile host="app.diagrams.net" modified="2021-07-08T07:46:20.087Z" agent="5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36" etag="EqsdCCGeGNaagmiDBsY_" version="14.8.3" type="google">
<diagram id="tF2UfFmr8TfE03G0T6Vt" name="Page-1">
<mxGraphModel dx="1182" dy="771" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="1ff9dEKrnvB0S2o5wIUf-63" style="edgeStyle=none;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.75;entryDx=0;entryDy=0;startArrow=classic;startFill=1;endArrow=classic;endFill=1;strokeWidth=1;dashed=1;dashPattern=1 1;" parent="1" source="1ff9dEKrnvB0S2o5wIUf-2" target="1ff9dEKrnvB0S2o5wIUf-62" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="1ff9dEKrnvB0S2o5wIUf-2" value="Global Registry Hub&amp;nbsp;" style="rounded=0;whiteSpace=wrap;html=1;align=right;verticalAlign=top;gradientColor=#ffffff;shadow=1;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="410" y="210" width="230" height="130" as="geometry" />
</mxCell>
<mxCell id="1ff9dEKrnvB0S2o5wIUf-11" value="Project A" style="rounded=0;whiteSpace=wrap;html=1;dashed=1;verticalAlign=top;" parent="1" vertex="1">
<mxGeometry x="430" y="260" width="80" height="60" as="geometry" />
</mxCell>
<mxCell id="1ff9dEKrnvB0S2o5wIUf-12" value="Project B" style="rounded=0;whiteSpace=wrap;html=1;dashed=1;verticalAlign=top;" parent="1" vertex="1">
<mxGeometry x="540" y="260" width="80" height="60" as="geometry" />
</mxCell>
<mxCell id="1ff9dEKrnvB0S2o5wIUf-13" value="Local Registry EU&amp;nbsp;" style="rounded=0;whiteSpace=wrap;html=1;align=right;verticalAlign=top;gradientColor=#ffffff;shadow=1;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="250" y="430" width="230" height="200" as="geometry" />
</mxCell>
<mxCell id="1ff9dEKrnvB0S2o5wIUf-14" value="Project A" style="rounded=0;whiteSpace=wrap;html=1;dashed=1;verticalAlign=top;" parent="1" vertex="1">
<mxGeometry x="270" y="470" width="80" height="60" as="geometry" />
</mxCell>
<mxCell id="1ff9dEKrnvB0S2o5wIUf-15" value="Project B" style="rounded=0;whiteSpace=wrap;html=1;dashed=1;verticalAlign=top;" parent="1" vertex="1">
<mxGeometry x="380" y="470" width="80" height="60" as="geometry" />
</mxCell>
<mxCell id="1ff9dEKrnvB0S2o5wIUf-19" value="" style="whiteSpace=wrap;html=1;aspect=fixed;shadow=0;verticalAlign=top;fillColor=#ffe6cc;strokeColor=#d79b00;" parent="1" vertex="1">
<mxGeometry x="440" y="290" width="20" height="20" as="geometry" />
</mxCell>
<mxCell id="1ff9dEKrnvB0S2o5wIUf-20" value="" style="whiteSpace=wrap;html=1;aspect=fixed;shadow=0;verticalAlign=top;fillColor=#ffe6cc;strokeColor=#d79b00;" parent="1" vertex="1">
<mxGeometry x="280" y="500" width="20" height="20" as="geometry" />
</mxCell>
<mxCell id="1ff9dEKrnvB0S2o5wIUf-22" value="" style="whiteSpace=wrap;html=1;aspect=fixed;shadow=0;verticalAlign=top;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1">
<mxGeometry x="480" y="290" width="20" height="20" as="geometry" />
</mxCell>
<mxCell id="1ff9dEKrnvB0S2o5wIUf-23" value="" style="whiteSpace=wrap;html=1;aspect=fixed;shadow=0;verticalAlign=top;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1">
<mxGeometry x="320" y="500" width="20" height="20" as="geometry" />
</mxCell>
<mxCell id="1ff9dEKrnvB0S2o5wIUf-25" value="" style="whiteSpace=wrap;html=1;aspect=fixed;shadow=0;verticalAlign=top;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="570" y="290" width="20" height="20" as="geometry" />
</mxCell>
<mxCell id="1ff9dEKrnvB0S2o5wIUf-26" value="" style="whiteSpace=wrap;html=1;aspect=fixed;shadow=0;verticalAlign=top;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="410" y="500" width="20" height="20" as="geometry" />
</mxCell>
<mxCell id="1ff9dEKrnvB0S2o5wIUf-28" value="Local Project" style="rounded=0;whiteSpace=wrap;html=1;dashed=1;verticalAlign=top;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;" parent="1" vertex="1">
<mxGeometry x="270" y="550" width="80" height="60" as="geometry" />
</mxCell>
<mxCell id="1ff9dEKrnvB0S2o5wIUf-37" value="Local Registry Asia&amp;nbsp;" style="rounded=0;whiteSpace=wrap;html=1;align=right;verticalAlign=top;gradientColor=#ffffff;shadow=1;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="580" y="430" width="230" height="200" as="geometry" />
</mxCell>
<mxCell id="1ff9dEKrnvB0S2o5wIUf-38" value="Project A" style="rounded=0;whiteSpace=wrap;html=1;dashed=1;verticalAlign=top;" parent="1" vertex="1">
<mxGeometry x="600" y="470" width="80" height="60" as="geometry" />
</mxCell>
<mxCell id="1ff9dEKrnvB0S2o5wIUf-39" value="Project B" style="rounded=0;whiteSpace=wrap;html=1;dashed=1;verticalAlign=top;" parent="1" vertex="1">
<mxGeometry x="710" y="470" width="80" height="60" as="geometry" />
</mxCell>
<mxCell id="1ff9dEKrnvB0S2o5wIUf-40" value="" style="whiteSpace=wrap;html=1;aspect=fixed;shadow=0;verticalAlign=top;fillColor=#ffe6cc;strokeColor=#d79b00;" parent="1" vertex="1">
<mxGeometry x="610" y="500" width="20" height="20" as="geometry" />
</mxCell>
<mxCell id="1ff9dEKrnvB0S2o5wIUf-41" value="" style="whiteSpace=wrap;html=1;aspect=fixed;shadow=0;verticalAlign=top;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1">
<mxGeometry x="650" y="500" width="20" height="20" as="geometry" />
</mxCell>
<mxCell id="1ff9dEKrnvB0S2o5wIUf-42" value="" style="whiteSpace=wrap;html=1;aspect=fixed;shadow=0;verticalAlign=top;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="740" y="500" width="20" height="20" as="geometry" />
</mxCell>
<mxCell id="1ff9dEKrnvB0S2o5wIUf-43" value="Local Project" style="rounded=0;whiteSpace=wrap;html=1;dashed=1;verticalAlign=top;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;" parent="1" vertex="1">
<mxGeometry x="600" y="550" width="80" height="60" as="geometry" />
</mxCell>
<mxCell id="1ff9dEKrnvB0S2o5wIUf-44" value="" style="whiteSpace=wrap;html=1;aspect=fixed;shadow=0;verticalAlign=top;fillColor=#e1d5e7;strokeColor=#9673a6;" parent="1" vertex="1">
<mxGeometry x="300" y="580" width="20" height="20" as="geometry" />
</mxCell>
<mxCell id="1ff9dEKrnvB0S2o5wIUf-45" value="" style="whiteSpace=wrap;html=1;aspect=fixed;shadow=0;verticalAlign=top;fillColor=#f8cecc;strokeColor=#b85450;" parent="1" vertex="1">
<mxGeometry x="630" y="580" width="20" height="20" as="geometry" />
</mxCell>
<mxCell id="1ff9dEKrnvB0S2o5wIUf-47" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;dashed=1;" parent="1" source="1ff9dEKrnvB0S2o5wIUf-46" target="1ff9dEKrnvB0S2o5wIUf-11" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="1ff9dEKrnvB0S2o5wIUf-49" value="PUSH" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="1ff9dEKrnvB0S2o5wIUf-47" vertex="1" connectable="0">
<mxGeometry x="0.0937" y="1" relative="1" as="geometry">
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="1ff9dEKrnvB0S2o5wIUf-48" value="PULL" style="edgeStyle=none;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;endArrow=none;endFill=0;startArrow=classic;startFill=1;dashed=1;" parent="1" source="1ff9dEKrnvB0S2o5wIUf-46" target="1ff9dEKrnvB0S2o5wIUf-14" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="1ff9dEKrnvB0S2o5wIUf-46" value="Global &lt;br&gt;Registry User" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;outlineConnect=0;shadow=0;" parent="1" vertex="1">
<mxGeometry x="50" y="470" width="30" height="60" as="geometry" />
</mxCell>
<mxCell id="1ff9dEKrnvB0S2o5wIUf-53" value="PUSH" style="edgeStyle=none;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.4;entryY=1.017;entryDx=0;entryDy=0;entryPerimeter=0;dashed=1;startArrow=none;startFill=0;endArrow=classic;endFill=1;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="622" y="720" as="sourcePoint" />
<mxPoint x="622" y="611.02" as="targetPoint" />
<Array as="points" />
</mxGeometry>
</mxCell>
<mxCell id="1ff9dEKrnvB0S2o5wIUf-52" value="Local&lt;br&gt;Registry User" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;outlineConnect=0;shadow=0;" parent="1" vertex="1">
<mxGeometry x="620" y="730" width="30" height="60" as="geometry" />
</mxCell>
<mxCell id="1ff9dEKrnvB0S2o5wIUf-54" style="edgeStyle=none;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.4;entryY=1.017;entryDx=0;entryDy=0;entryPerimeter=0;dashed=1;startArrow=classic;startFill=1;endArrow=none;endFill=0;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="642" y="720" as="sourcePoint" />
<mxPoint x="642" y="621.02" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="1ff9dEKrnvB0S2o5wIUf-55" value="PULL" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="1ff9dEKrnvB0S2o5wIUf-54" vertex="1" connectable="0">
<mxGeometry x="-0.1295" y="-2" relative="1" as="geometry">
<mxPoint y="-1" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="1ff9dEKrnvB0S2o5wIUf-59" value="" style="endArrow=classic;startArrow=classic;html=1;strokeWidth=2;entryX=0.25;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" parent="1" source="1ff9dEKrnvB0S2o5wIUf-13" target="1ff9dEKrnvB0S2o5wIUf-2" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="360" y="550" as="sourcePoint" />
<mxPoint x="410" y="500" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="1ff9dEKrnvB0S2o5wIUf-61" value="SYNC" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="1ff9dEKrnvB0S2o5wIUf-59" vertex="1" connectable="0">
<mxGeometry x="0.2569" y="-3" relative="1" as="geometry">
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="1ff9dEKrnvB0S2o5wIUf-60" value="SYNC" style="endArrow=classic;startArrow=classic;html=1;strokeWidth=2;exitX=0.75;exitY=1;exitDx=0;exitDy=0;" parent="1" source="1ff9dEKrnvB0S2o5wIUf-2" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="590" y="371" as="sourcePoint" />
<mxPoint x="670" y="430" as="targetPoint" />
<Array as="points" />
</mxGeometry>
</mxCell>
<mxCell id="1ff9dEKrnvB0S2o5wIUf-62" value="Security&lt;br&gt;Scanner" style="shape=image;html=1;verticalAlign=top;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;imageAspect=0;aspect=fixed;image=https://cdn1.iconfinder.com/data/icons/feather-2/24/shield-128.png;shadow=0;gradientColor=none;" parent="1" vertex="1">
<mxGeometry x="740" y="241" width="48" height="48" as="geometry" />
</mxCell>
<mxCell id="1ff9dEKrnvB0S2o5wIUf-66" style="edgeStyle=none;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;dashed=1;dashPattern=1 4;startArrow=classic;startFill=1;endArrow=classic;endFill=1;strokeWidth=1;fillColor=#f5f5f5;strokeColor=#666666;" parent="1" source="1ff9dEKrnvB0S2o5wIUf-65" target="1ff9dEKrnvB0S2o5wIUf-2" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="1ff9dEKrnvB0S2o5wIUf-67" style="edgeStyle=none;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0;entryDx=0;entryDy=0;dashed=1;dashPattern=1 4;startArrow=classic;startFill=1;endArrow=classic;endFill=1;strokeWidth=1;fillColor=#f5f5f5;strokeColor=#666666;" parent="1" source="1ff9dEKrnvB0S2o5wIUf-65" target="1ff9dEKrnvB0S2o5wIUf-37" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="1ff9dEKrnvB0S2o5wIUf-68" style="edgeStyle=none;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;dashed=1;dashPattern=1 4;startArrow=classic;startFill=1;endArrow=classic;endFill=1;strokeWidth=1;fillColor=#f5f5f5;strokeColor=#666666;" parent="1" source="1ff9dEKrnvB0S2o5wIUf-65" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="344" y="430" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="1ff9dEKrnvB0S2o5wIUf-65" value="&lt;font style=&quot;font-size: 11px&quot;&gt;&lt;br&gt;Config + Policy&lt;br&gt;Reconciliation&lt;/font&gt;" style="ellipse;shape=umlControl;whiteSpace=wrap;html=1;shadow=0;verticalAlign=top;" parent="1" vertex="1">
<mxGeometry x="180" y="230" width="80" height="90" as="geometry" />
</mxCell>
<mxCell id="1ff9dEKrnvB0S2o5wIUf-72" style="edgeStyle=none;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.025;entryY=0.522;entryDx=0;entryDy=0;entryPerimeter=0;dashed=1;dashPattern=1 4;startArrow=none;startFill=0;endArrow=classic;endFill=1;strokeWidth=1;" parent="1" source="1ff9dEKrnvB0S2o5wIUf-71" target="1ff9dEKrnvB0S2o5wIUf-65" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="1ff9dEKrnvB0S2o5wIUf-71" value="Config Policies" style="shape=umlFrame;whiteSpace=wrap;html=1;shadow=0;verticalAlign=top;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;width=70;height=40;" parent="1" vertex="1">
<mxGeometry x="20" y="240" width="110" height="70" as="geometry" />
</mxCell>
<mxCell id="1ff9dEKrnvB0S2o5wIUf-74" style="edgeStyle=none;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;dashed=1;dashPattern=1 4;startArrow=none;startFill=0;endArrow=classic;endFill=1;strokeWidth=1;" parent="1" source="1ff9dEKrnvB0S2o5wIUf-73" target="1ff9dEKrnvB0S2o5wIUf-71" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="1ff9dEKrnvB0S2o5wIUf-73" value="Project Admins" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;outlineConnect=0;shadow=0;" parent="1" vertex="1">
<mxGeometry x="60" y="90" width="30" height="60" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>
2 changes: 1 addition & 1 deletion doc/reconciliation.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ and then compares it to the expected state.

The architecture or registryman is shown below.

![architecture.svg](./architecture.svg "Architecture")
![architecture.svg](./img/architecture.svg "Architecture")

### The main packages

Expand Down

0 comments on commit e9b2e2e

Please sign in to comment.