Skip to content

Commit 13df9e3

Browse files
committed
Add ADR: Requirements for container registry
This commit adds the document that should select an appropriate container registry implementation that meets all defined requirements and makes an architectural decision on what implementation is fully SCS-compliant and recommended by the SCS. This commit adds the document structure and is focused to the OSS health check part. Signed-off-by: Matej Feder <[email protected]>
1 parent aba24be commit 13df9e3

File tree

1 file changed

+232
-0
lines changed

1 file changed

+232
-0
lines changed
Lines changed: 232 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,232 @@
1+
---
2+
title: Requirements for container registry
3+
type: Decision Record
4+
status: Draft
5+
track: KaaS
6+
---
7+
8+
# Introduction
9+
10+
A container registry is a repository or collection of repositories used to store and
11+
access container images. Container registries are used by the teams to store the
12+
results of build processes and to maintain freely available images. They're acting as
13+
the intermediary for sharing container images between systems. They could be connected
14+
directly to the container orchestration platforms like Docker and Kubernetes.
15+
16+
There are 2 types of container registries: public and private. Public registries are
17+
commonly used by individuals and smaller teams. However, once teams begin to scale up,
18+
this can bring more complex security issues, e.g. privacy, and access control.
19+
A private container registry often comes with security scanning capabilities,
20+
role-based access control, and advanced management. These private registries could be
21+
either hosted remotely or on-premises.
22+
23+
# Motivation
24+
25+
Our motivation is that there are use cases, where cloud service providers (CSP) would
26+
like to be able to offer customers to store and access their container images using
27+
the SCS-compliant private container registry. The specific use cases should be discussed,
28+
but overall the CSPs could offer a private container registry as a service or the CSPs
29+
could offer a recipe for customers to deploy the private registry themselves utilizing
30+
the CSP infrastructure. In both cases, the private container registry should be
31+
SCS-compliant and should fulfill a set of needed requirements e.g. for security and
32+
privacy.
33+
34+
The idea here and the purpose of this document is to specify what requirements a
35+
specific technical container registry implementation (i.e. software solution) needs to
36+
fulfill in the context of SCS.
37+
38+
The purpose of this document is also to select an appropriate container registry
39+
implementation that meets all defined requirements and makes an architectural
40+
decision on what implementation is fully SCS-compliant and recommended by the SCS.
41+
42+
# Design considerations
43+
44+
There are numerous features to look for when evaluating a container registry solution.
45+
Our decision process goes through two main stages.
46+
47+
1. [OSS health check](#oss-health-check)
48+
2. [Required and desirable features check](#required-and-desirable-features-check)
49+
50+
The open-source software (OSS) health check does the first filter stage. This stage is
51+
crucial in the context of SCS and container registry implementation should pass it to
52+
promote itself to the second consideration stage. The second stage does an overview over
53+
the feature set of open source container registry implementations and map out
54+
requirements (and nice-to-haves) against it to have a well-documented decision.
55+
56+
Note: Keep in mind that at the time of writing this document, we’ve made our best effort
57+
to survey the container registry landscape based on publicly available materials.
58+
If you find something outdated (with respect to the time of writing this document) or
59+
outright erroneous, please submit a PR or raise an issue, and we’ll fix it right away.
60+
61+
## OSS health check
62+
63+
This section evaluates the health of the open-source projects that were selected from
64+
the currently available solutions. SCS-compliant software must fulfill all OSS health
65+
checks defined by the [OSS-Health](https://github.com/SovereignCloudStack/standards/blob/main/Design-Docs/OSS-Health.md)
66+
document. The main health checks are:
67+
- Four Opens (code is fully open source, community is open and diverse, development
68+
process is open, design process is open)
69+
- Maturity
70+
- Security
71+
- Activity
72+
- Lock-in risk assessment
73+
74+
Each selected OSS project is evaluated based on the above checks, and it is classified
75+
to one of three categories as follows:
76+
77+
- :heavy_check_mark: The project passed all OSS health checks and will be considered
78+
further as a valid candidate.
79+
80+
- :grey_question: The project passed almost all OSS health checks.
81+
There is a place for improvement, but the missing points are not crucial from the OSS
82+
health check perspective. The project will be considered further as a valid candidate.
83+
84+
- :x: The project does not pass the OSS health checks. Some OSS health check
85+
showstoppers have been found (e.g. open core software, not actively maintained).
86+
The project is filtered at this stage and won't be considered further.
87+
88+
Refer to the list of evaluated projects with their classified categories and comments.
89+
90+
- :heavy_check_mark: [Harbor][harbor]
91+
- Harbor project meets all "four opens"
92+
- Source code is open and available under the [Apache 2 license](https://github.com/goharbor/harbor/blob/main/LICENSE)
93+
- Community is [open](https://github.com/goharbor/harbor#community, structured and
94+
well organized via [workgroups](https://github.com/goharbor/community) and
95+
various communications channels e.g. Slack, mailing lists, etc.
96+
(#harbor Slack channel contains 3k+ members)
97+
- The development process is open via GitHub issues and well described in the
98+
[contributing](https://github.com/goharbor/harbor/blob/main/CONTRIBUTING.md)
99+
document
100+
- The design process is open via GitHub issues. Proposals are [public](https://github.com/goharbor/community/tree/main/proposals).
101+
The decision process is well described as well. The project's roadmap is
102+
available in the [roadmap](https://github.com/goharbor/harbor/blob/main/ROADMAP.md) document
103+
- Maturity is on the CNCF [graduation](https://www.cncf.io/projects/harbor/) level.
104+
CNCF graduated project is considered stable, widely adopted and production-ready
105+
- Security
106+
- The security disclosure and response policy is well described in the project's
107+
[security](https://github.com/goharbor/harbor/blob/main/SECURITY.md) document
108+
- The code is reviewed within a standard PR process
109+
- Activity
110+
- 250+ contributors, 4k+ forks, 13k+ GitHub stars
111+
- The project has been [adopted](https://github.com/goharbor/harbor/blob/main/ADOPTERS.md)
112+
by many companies that run Harbor in their production environments
113+
- The project collaborates with other communities and projects
114+
(see [Partners of Harbor](https://goharbor.io/community/) section of the
115+
project's website)
116+
- The project is visible and actively contributes to various conferences, e.g.
117+
[FOSDEM 22](https://goharbor.io/blog/harbor-at-fosdem-2022/),
118+
[KubeCon Europe](https://www.youtube.com/watch?v=MGNtPHQYP14), etc.
119+
- Lock-in risk assessment
120+
- The project's [maintainers](https://github.com/goharbor/community/blob/main/MAINTAINERS.md)
121+
document shows that there are a sufficient number of core
122+
maintainers/contributors that differ over various companies, therefore the single
123+
point of failure is not a case here
124+
125+
- :heavy_check_mark: [Dragonfly][dragonfly]
126+
- Dragonfly project meets all "four opens"
127+
- Source code is open and available under the [Apache 2 license](https://github.com/dragonflyoss/Dragonfly2/blob/main/LICENSE)
128+
- Community is [open](https://github.com/dragonflyoss/Dragonfly2#community)
129+
organized via multiple channels e.g. Slack, mailing lists, etc.
130+
(#dragonfly Slack channel contains ~50 members)
131+
- The development process is open via GitHub issues and well described in the
132+
[contributing](https://github.com/dragonflyoss/Dragonfly2/blob/main/CONTRIBUTING.md) document
133+
- The design process is open via GitHub issues. The project's roadmap is available in
134+
the project's [webpage](https://d7y.io/docs/others/roadmap/#2022-roadmap)
135+
- Maturity is on the CNCF [incubating](https://www.cncf.io/projects/dragonfly/) level
136+
CNCF incubating project is considered stable and used in production by users with
137+
the healthy pool of contributors
138+
- Security
139+
- The security disclosure is handled via a dedicated email address
140+
- The code is reviewed within a standard PR process
141+
- Activity
142+
- 30+ contributors, 100+ forks, 1k+ GitHub stars
143+
- The project has been [adopted](https://github.com/dragonflyoss/Dragonfly2/blob/main/ADOPTERS.md)
144+
by many companies that run Harbor in their production environments
145+
- The project is visible and actively contributes to various conferences,
146+
e.g. [KubeCon North America](https://www.youtube.com/watch?v=LcxBgmmeA80),
147+
[KubeCon Europe](https://www.youtube.com/watch?v=MGNtPHQYP14), etc.
148+
- Lock-in risk assessment
149+
- The list of the project's [maintainers](https://github.com/dragonflyoss/Dragonfly2/blob/main/MAINTAINERS.md
150+
includes contributors from various companies and the [companies contributing dashboard](https://dragonfly.devstats.cncf.io/d/7/companies-contributing-in-repository-groups)
151+
shows that ~10 companies are actively contributing to a repository group
152+
153+
- :grey_question: [Project Quay][projectquay]
154+
- Project Quay meets all "four opens"
155+
- Source code is open and available under the [Apache 2 license](https://github.com/quay/quay/blob/master/LICENSE)
156+
- Community is [open](https://github.com/quay/quay#community) organized via mailing
157+
list and IRC
158+
- Development process is open via [JBoss JIRA](https://issues.redhat.com/projects/PROJQUAY/issues)
159+
issues and well described in the [governance](https://github.com/quay/quay/blob/master/GOVERNANCE.md) document
160+
- Design process is open via [JBoss JIRA](https://issues.redhat.com/projects/PROJQUAY/issues)
161+
issues. The project's roadmap is available on the project's [webpage](https://www.projectquay.io/#contribute)
162+
- Maturity
163+
- Project Quay is an open-source project that starts [~9 years ago](https://github.com/quay/quay/commit/0349af754204375d74ac5833713b607398981ff7).
164+
It powers Red Hat enterprise products Red Hat Quay and Quay.io, which are used in
165+
a productive way by many. Therefore, the project's maturity is at the good level
166+
- Security
167+
- The security disclosure is handled via a dedicated email address
168+
- The code is reviewed within a standard PR process
169+
- Activity
170+
- 50+ contributors, 200+ forks, 2k+ GitHub stars
171+
- The project has been used by many [companies](https://www.projectquay.io) that
172+
run Quay in their production environments
173+
- Lock-in risk assessment
174+
- The project's owners/maintainers list is not publicly available and is stored in
175+
the [downstream repository](https://github.com/quay/quay-docs#how-do-i-set-up).
176+
Therefore, it is hard to distinguish the risk of project failure caused by low
177+
diversity across the companies. This should be improved
178+
179+
- :x: [Keppel](https://github.com/sapcc/keppel)
180+
- The project seems to be not widely used in a productive way and also the activity
181+
around is currently not on a good level (5+ contributors). The development
182+
process as well as the design process seem to be open, but not documented yet
183+
184+
- :x: [Nexus](https://github.com/sonatype/nexus-public)
185+
- Nexus is an **open core** software that offers paid [pro version](https://www.sonatype.com/products/repository-oss-vs-pro-features) with advanced features
186+
187+
- :x: [JFrog](https://jfrog.com/community/open-source/)
188+
- JFrog Artifactory is shipped as an **open core** [software](https://jfrog.com/community/open-source/)
189+
with limited features. The software is primarily offered as a paid [pro version](https://jfrog.com/pricing/#devops-onprem)
190+
191+
- :x: [Kraken](https://github.com/uber/kraken)
192+
- It seems that the project is not actively maintained as is discussed in the related
193+
project's [issue](https://github.com/uber/kraken/issues/313)
194+
195+
- :x: [Portus](https://github.com/SUSE/Portus)
196+
- It seems that the project is not actively maintained as is discussed in the related
197+
project's [issue](https://github.com/SUSE/Portus/issues/2352)
198+
199+
## Required and desirable features check
200+
201+
This section does an overview of the feature set of open source container registry
202+
implementations (which passed the OSS health stage above) and map out requirements
203+
(and nice-to-haves) against it. SCS-compliant software must be robust enough, to be able
204+
to operate under heavy load (e.g. high availability (HA) mode, federation, etc.) and
205+
the crucial feature is security.
206+
We defined a set of required features that the container registry implementation must
207+
have and also a set of desirable (nice to have) features are defined and evaluated here.
208+
209+
210+
**Required features**
211+
212+
TODO
213+
214+
## Conclusion
215+
216+
A wide range of open-source container registry projects (Quay, Harbor, Dragonfly,
217+
Keppel, Portus, Kraken, etc.) has been carefully evaluated based on the two main
218+
factors that reviewed their open-source health as well as their range of supported
219+
features.
220+
221+
TODO
222+
223+
# Decision
224+
225+
_Decision_
226+
227+
228+
<!-- Frequently used references -->
229+
230+
[harbor]: https://github.com/goharbor/harbor
231+
[dragonfly]: https://github.com/dragonflyoss/Dragonfly2
232+
[projectquay]: https://github.com/quay/quay

0 commit comments

Comments
 (0)