Skip to content

Commit 8c11cc3

Browse files
committed
add registry and registry-gui tmplate
1 parent e211ed9 commit 8c11cc3

File tree

1 file changed

+327
-0
lines changed

1 file changed

+327
-0
lines changed

template/registry.yaml

Lines changed: 327 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,327 @@
1+
apiVersion: app.sealos.io/v1
2+
kind: Template
3+
metadata:
4+
name: registry
5+
spec:
6+
title: 'registry'
7+
url: 'https://distribution.github.io/distribution'
8+
gitRepo: 'https://github.com/distribution/distribution'
9+
author: 'sealos'
10+
description: 'registry is an implementation of the OCI Distribution Specification. gui-registry is a web UI for registry, default registry username and password is root/root .
11+
example:
12+
registry the external network address is https://registry.cloud.sealos.io , gui-registry the external network address is https://gui-registry.cloud.sealos.io:
13+
push image:
14+
docker login nfzuflxg.cloud.sealos.io # username: root, password: root
15+
docker tag nginx:latest registry.cloud.sealos.io/nginx:latest # tag image
16+
docker push registry.cloud.sealos.io/nginx:latest # push image to registry
17+
web management:
18+
Access address:https://gui-registry.cloud.sealos.io
19+
username: root # registry username
20+
password: root # registry password
21+
'
22+
readme: 'https://raw.githubusercontent.com/distribution/distribution/main/README.md'
23+
icon: 'https://avatars.githubusercontent.com/u/78096003?s=48&v=4'
24+
templateType: inline
25+
defaults:
26+
app_host:
27+
type: string
28+
value: ${{ random(8) }}
29+
gui_host:
30+
type: string
31+
value: ${{ random(8) }}
32+
app_name:
33+
type: string
34+
value: registry-${{ random(8) }}
35+
inputs:
36+
---
37+
apiVersion: apps/v1
38+
kind: StatefulSet
39+
metadata:
40+
name: ${{ defaults.app_name }}
41+
annotations:
42+
originImageName: registry
43+
deploy.cloud.sealos.io/minReplicas: '1'
44+
deploy.cloud.sealos.io/maxReplicas: '1'
45+
labels:
46+
cloud.sealos.io/app-deploy-manager: ${{ defaults.app_name }}
47+
app: ${{ defaults.app_name }}
48+
spec:
49+
replicas: 1
50+
revisionHistoryLimit: 1
51+
selector:
52+
matchLabels:
53+
app: ${{ defaults.app_name }}
54+
minReadySeconds: 10
55+
serviceName: registry
56+
template:
57+
metadata:
58+
labels:
59+
app: ${{ defaults.app_name }}
60+
spec:
61+
terminationGracePeriodSeconds: 10
62+
containers:
63+
- name: ${{ defaults.app_name }}
64+
image: registry
65+
env: []
66+
resources:
67+
requests:
68+
cpu: 50m
69+
memory: 25Mi
70+
limits:
71+
cpu: 500m
72+
memory: 256Mi
73+
ports:
74+
- containerPort: 5000
75+
imagePullPolicy: Always
76+
volumeMounts:
77+
- name: vn-etcvn-dockervn-registryvn-configvn-yml
78+
mountPath: /etc/docker/registry/config.yml
79+
subPath: ./etc/docker/registry/config.yml
80+
- name: vn-etcvn-registryvn-registry-htpasswd
81+
mountPath: vn-etcvn-registryvn-registry_htpasswd
82+
subPath: ./vn-etcvn-registryvn-registry_htpasswd
83+
- name: vn-varvn-libvn-registry
84+
mountPath: /var/lib/registry
85+
volumes:
86+
- name: vn-etcvn-dockervn-registryvn-configvn-yml
87+
configMap:
88+
name: ${{ defaults.app_name }}
89+
items:
90+
- key: vn-etcvn-dockervn-registryvn-configvn-yml
91+
path: ./etc/docker/registry/config.yml
92+
- name: vn-etcvn-registryvn-registry-htpasswd
93+
configMap:
94+
name: ${{ defaults.app_name }}
95+
items:
96+
- key: vn-etcvn-registryvn-registry_htpasswd
97+
path: ./vn-etcvn-registryvn-registry_htpasswd
98+
volumeClaimTemplates:
99+
- metadata:
100+
annotations:
101+
path: /var/lib/registry
102+
value: '1'
103+
name: vn-varvn-libvn-registry
104+
spec:
105+
accessModes:
106+
- ReadWriteOnce
107+
resources:
108+
requests:
109+
storage: 1Gi
110+
111+
---
112+
apiVersion: v1
113+
kind: ConfigMap
114+
metadata:
115+
name: ${{ defaults.app_name }}
116+
data:
117+
vn-etcvn-dockervn-registryvn-configvn-yml: |-
118+
version: 0.1
119+
log:
120+
fields:
121+
service: registry
122+
storage:
123+
filesystem:
124+
rootdirectory: /var/lib/registry
125+
delete:
126+
enabled: true
127+
http:
128+
addr: :5000
129+
debug:
130+
addr: :5001
131+
prometheus:
132+
enabled: true
133+
path: /metrics
134+
headers:
135+
X-Content-Type-Options: [nosniff]
136+
Access-Control-Allow-Origin: ['https://${{ defaults.gui_host }}.${{ SEALOS_CLOUD_DOMAIN }}']
137+
Access-Control-Allow-Methods: ['HEAD', 'GET', 'OPTIONS', 'DELETE']
138+
Access-Control-Allow-Headers: ['Authorization', 'Accept', 'Cache-Control']
139+
Access-Control-Max-Age: [1728000]
140+
Access-Control-Allow-Credentials: [true]
141+
Access-Control-Expose-Headers: ['Docker-Content-Digest']
142+
proxy:
143+
on: true
144+
health:
145+
storagedriver:
146+
enabled: true
147+
interval: 10s
148+
threshold: 3
149+
auth:
150+
htpasswd:
151+
realm: "Registry Realm"
152+
path: /vn-etcvn-registryvn-registry_htpasswd
153+
vn-etcvn-registryvn-registry_htpasswd: root:$2y$05$CXZgu7SFjg4UsH1JsFyi0OtLtPv0ghFbL/BYLAURxuWrJK.61fRL2
154+
155+
---
156+
apiVersion: v1
157+
kind: Service
158+
metadata:
159+
name: ${{ defaults.app_name }}
160+
labels:
161+
cloud.sealos.io/app-deploy-manager: ${{ defaults.app_name }}
162+
spec:
163+
ports:
164+
- port: 5000
165+
selector:
166+
app: ${{ defaults.app_name }}
167+
168+
---
169+
apiVersion: networking.k8s.io/v1
170+
kind: Ingress
171+
metadata:
172+
name: ${{ defaults.app_name }}
173+
labels:
174+
cloud.sealos.io/app-deploy-manager: ${{ defaults.app_name }}
175+
cloud.sealos.io/app-deploy-manager-domain: ${{ defaults.app_host }}
176+
annotations:
177+
kubernetes.io/ingress.class: nginx
178+
nginx.ingress.kubernetes.io/proxy-body-size: 32m
179+
nginx.ingress.kubernetes.io/server-snippet: |
180+
client_header_buffer_size 64k;
181+
large_client_header_buffers 4 128k;
182+
nginx.ingress.kubernetes.io/ssl-redirect: 'false'
183+
nginx.ingress.kubernetes.io/backend-protocol: HTTP
184+
nginx.ingress.kubernetes.io/rewrite-target: /$2
185+
nginx.ingress.kubernetes.io/client-body-buffer-size: 64k
186+
nginx.ingress.kubernetes.io/proxy-buffer-size: 64k
187+
nginx.ingress.kubernetes.io/configuration-snippet: |
188+
if ($request_uri ~* \.(js|css|gif|jpe?g|png)) {
189+
expires 30d;
190+
add_header Cache-Control "public";
191+
}
192+
spec:
193+
rules:
194+
- host: ${{ defaults.app_host }}.${{ SEALOS_CLOUD_DOMAIN }}
195+
http:
196+
paths:
197+
- pathType: Prefix
198+
path: /()(.*)
199+
backend:
200+
service:
201+
name: ${{ defaults.app_name }}
202+
port:
203+
number: 5000
204+
tls:
205+
- hosts:
206+
- ${{ defaults.app_host }}.${{ SEALOS_CLOUD_DOMAIN }}
207+
secretName: ${{ SEALOS_CERT_SECRET_NAME }}
208+
---
209+
apiVersion: v1
210+
kind: Service
211+
metadata:
212+
name: gui-${{ defaults.app_name }}
213+
labels:
214+
cloud.sealos.io/app-deploy-manager: gui-${{ defaults.app_name }}
215+
spec:
216+
ports:
217+
- port: 80
218+
selector:
219+
app: gui-${{ defaults.app_name }}
220+
---
221+
apiVersion: apps/v1
222+
kind: Deployment
223+
metadata:
224+
name: gui-${{ defaults.app_name }}
225+
annotations:
226+
originImageName: joxit/docker-registry-ui:2.5.6-debian
227+
deploy.cloud.sealos.io/minReplicas: '1'
228+
deploy.cloud.sealos.io/maxReplicas: '1'
229+
labels:
230+
cloud.sealos.io/app-deploy-manager: gui-${{ defaults.app_name }}
231+
app: gui-${{ defaults.app_name }}
232+
spec:
233+
replicas: 1
234+
revisionHistoryLimit: 1
235+
selector:
236+
matchLabels:
237+
app: gui-${{ defaults.app_name }}
238+
strategy:
239+
type: RollingUpdate
240+
rollingUpdate:
241+
maxUnavailable: 0
242+
maxSurge: 1
243+
template:
244+
metadata:
245+
labels:
246+
app: gui-${{ defaults.app_name }}
247+
spec:
248+
containers:
249+
- name: gui-${{ defaults.app_name }}
250+
image: joxit/docker-registry-ui:2.5.6-debian
251+
env:
252+
- name: REGISTRY_TITLE
253+
value: Sealos-Registry-GUI
254+
- name: SINGLE_REGISTRY
255+
value: 'true'
256+
- name: DELETE_IMAGES
257+
value: 'true'
258+
- name: SHOW_CONTENT_DIGEST
259+
value: 'true'
260+
- name: NGINX_PROXY_PASS_URL
261+
value: http://${{ defaults.app_name }}.${{ SEALOS_NAMESPACE }}.svc.cluster.local:5000
262+
- name: SHOW_CATALOG_NB_TAGS
263+
value: 'true'
264+
- name: CATALOG_MIN_BRANCHES
265+
value: '1'
266+
- name: CATALOG_MAX_BRANCHES
267+
value: '1'
268+
- name: TAGLIST_PAGE_SIZE
269+
value: '100'
270+
- name: REGISTRY_SECURED
271+
value: 'false'
272+
- name: CATALOG_ELEMENTS_LIMIT
273+
value: '1000'
274+
resources:
275+
requests:
276+
cpu: 50m
277+
memory: 25Mi
278+
limits:
279+
cpu: 500m
280+
memory: 256Mi
281+
ports:
282+
- containerPort: 80
283+
imagePullPolicy: Always
284+
volumeMounts: []
285+
volumes: []
286+
---
287+
apiVersion: networking.k8s.io/v1
288+
kind: Ingress
289+
metadata:
290+
name: gui-${{ defaults.app_name }}
291+
labels:
292+
cloud.sealos.io/app-deploy-manager: gui-${{ defaults.app_name }}
293+
cloud.sealos.io/app-deploy-manager-domain: ${{ defaults.gui_host }}
294+
annotations:
295+
kubernetes.io/ingress.class: nginx
296+
nginx.ingress.kubernetes.io/proxy-body-size: 32m
297+
nginx.ingress.kubernetes.io/server-snippet: |
298+
client_header_buffer_size 64k;
299+
large_client_header_buffers 4 128k;
300+
nginx.ingress.kubernetes.io/ssl-redirect: 'false'
301+
nginx.ingress.kubernetes.io/backend-protocol: HTTP
302+
nginx.ingress.kubernetes.io/rewrite-target: /$2
303+
nginx.ingress.kubernetes.io/client-body-buffer-size: 64k
304+
nginx.ingress.kubernetes.io/proxy-buffer-size: 64k
305+
nginx.ingress.kubernetes.io/proxy-send-timeout: '300'
306+
nginx.ingress.kubernetes.io/proxy-read-timeout: '300'
307+
nginx.ingress.kubernetes.io/configuration-snippet: |
308+
if ($request_uri ~* \.(js|css|gif|jpe?g|png)) {
309+
expires 30d;
310+
add_header Cache-Control "public";
311+
}
312+
spec:
313+
rules:
314+
- host: ${{ defaults.gui_host }}.${{ SEALOS_CLOUD_DOMAIN }}
315+
http:
316+
paths:
317+
- pathType: Prefix
318+
path: /()(.*)
319+
backend:
320+
service:
321+
name: gui-${{ defaults.app_name }}
322+
port:
323+
number: 80
324+
tls:
325+
- hosts:
326+
- ${{ defaults.gui_host }}.${{ SEALOS_CLOUD_DOMAIN }}
327+
secretName: ${{ SEALOS_CERT_SECRET_NAME }}

0 commit comments

Comments
 (0)