Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
065f6c5
Bump helm/chart-releaser-action from 1.6.0 to 1.7.0
dependabot[bot] Jan 21, 2025
5af937b
Bump marocchino/sticky-pull-request-comment from 2.2.0 to 2.9.2
dependabot[bot] Apr 10, 2025
e73d9e8
Update gargagecollect cronjob
Mercbot7 Apr 14, 2025
88ccbc1
Update values.yaml to match cronjob updates and minor spacing fixes
Mercbot7 Apr 14, 2025
f4811a4
Merge pull request #162 from twuni/dependabot/github_actions/marocchi…
joshsizer Apr 14, 2025
d6224c8
refactor logic for lapels and annotations and fix resources
Mercbot7 Apr 14, 2025
64d7c68
Merge pull request #155 from twuni/dependabot/github_actions/helm/cha…
joshsizer Apr 14, 2025
9bba24a
reorder merge for proper preference
Mercbot7 Apr 15, 2025
113ddd1
Merge pull request #164 from Mercbot7/update-garbagecollect-cronjob
joshsizer Apr 15, 2025
53e594b
🏁 v2.3.0 Release
joshsizer Apr 16, 2025
14fc7bb
Update README.md for garbageCollect
Mercbot7 Apr 16, 2025
127e415
Merge pull request #166 from Mercbot7/update-readme-for-cronjob-updates
joshsizer Apr 16, 2025
791c161
Merge pull request #165 from joshsizer/release-2.3.0
joshsizer Apr 17, 2025
e3a6eb4
Updated chart to accept configPath to fix distribution's 3.0.0 breaki…
Clovel Jun 3, 2025
ec17067
Add the ability to force path style for s3 storage
TheAceMan Jun 3, 2025
458381c
Merge pull request #169 from TheAceMan/main
joshsizer Jun 7, 2025
8b8e964
Add the ability to skip verifying the TLS cert for s3 storage
TheAceMan Jun 7, 2025
60cac04
Merge pull request #168 from Clovel/feature/config-path
joshsizer Jun 8, 2025
d344f36
Change name to match the config variable
TheAceMan Jun 9, 2025
55527bf
Fix spacing
TheAceMan Jun 9, 2025
8ff1707
Bump marocchino/sticky-pull-request-comment from 2.9.2 to 2.9.3
dependabot[bot] Jun 23, 2025
4e6b389
Merge pull request #174 from twuni/dependabot/github_actions/marocchi…
joshsizer Jun 28, 2025
0f196d6
Merge pull request #171 from TheAceMan/main
joshsizer Jun 28, 2025
8662c4f
🏁 v3.0.0 Release
weisjohn Jul 29, 2025
ab431e8
Merge pull request #178 from weisjohn/main
joshsizer Jul 29, 2025
43ed263
Update repo URL in README
canterberry Sep 10, 2025
8d4e020
Add repo migration and deprecation notice to README
canterberry Sep 10, 2025
803018a
Merge pull request #182 from twuni/readme-install-via-gh-pages
canterberry Nov 3, 2025
f6da008
Merge upstream main into kpp-main-scott
srager13 Sep 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/helm_release.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ jobs:
git config user.email "$GITHUB_ACTOR@users.noreply.github.com"

- name: Install chart-releaser
uses: helm/chart-releaser-action@v1.6.0
uses: helm/chart-releaser-action@v1.7.0
with:
install_only: true

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/pr_diff.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ jobs:
echo 'HELM_DIFF<<EOF' >> $GITHUB_ENV
echo "$(diff -ur before after)" >> $GITHUB_ENV
echo 'EOF' >> $GITHUB_ENV
- uses: marocchino/sticky-pull-request-comment@39c5b5dc7717447d0cba270cd115037d32d28443
- uses: marocchino/sticky-pull-request-comment@d2ad0de260ae8b0235ce059e63f2949ba9e05943
with:
message: |
Running a `helm template` smoketest on commit ${{ github.ref }} results in the following diff against `${{ github.base_ref }}`:
Expand Down
4 changes: 2 additions & 2 deletions Chart.yaml
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
apiVersion: v1
description: A Helm chart for Docker Registry
name: docker-registry
version: 2.2.3
appVersion: 2.8.1
version: 3.0.0
appVersion: 3.0.0
home: https://hub.docker.com/_/registry/
icon: https://helm.twun.io/docker-registry.png
maintainers:
Expand Down
26 changes: 23 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,27 @@ This chart will do the following:

* Implement a Docker registry deployment

## ⚠️ Repo Migration and Deprecation Notice

The following change only affects attempts to install or update the chart via the https://helm.twun.io repo.

The https://helm.twun.io repo has been migrated to https://twuni.github.io/docker-registry.helm.

To update your configuration, remove and re-add the repo with the new URL:

```console
helm repo remove twuni
helm repo add twuni https://twuni.github.io/docker-registry.helm
```

The deprecated repo URL, https://helm.twun.io, may become unavailable as early as **October 16, 2025**.

## Installing the Chart

First, add the repo:

```console
helm repo add twuni https://helm.twun.io
helm repo add twuni https://twuni.github.io/docker-registry.helm
```

To install the chart, use the following:
Expand Down Expand Up @@ -57,8 +72,8 @@ their default values.
| `service.sessionAffinityConfig` | service session affinity config | `nil` |
| `replicaCount` | k8s replicas | `1` |
| `updateStrategy` | update strategy for deployment | `{}` |
| `podAnnotations` | Annotations for pod | `{}` |
| `podLabels` | Labels for pod | `{}` |
| `podAnnotations` | Annotations for deployment pod, and `garbageCollect` pod unless set explicitly there. See `garbageCollect` | `{}` |
| `podLabels` | Labels for deployment pod, and `garbageCollect` pod unless set explicitly there. See `garbageCollect` | `{}` |
| `podDisruptionBudget` | Pod disruption budget | `{}` |
| `resources.limits.cpu` | Container requested CPU | `nil` |
| `resources.limits.memory` | Container requested memory | `nil` |
Expand All @@ -79,12 +94,15 @@ their default values.
| `secrets.swift.password` | Password for Swift configuration | `nil` |
| `secrets.haSharedSecret` | Shared secret for Registry | `nil` |
| `configData` | Configuration hash for docker | `nil` |
| `configPath` | Configuration mount point in docker, `/etc/docker/registry` for registry version 2, `/etc/distribution` for version 3 | `/etc/docker/registry` |
| `s3.region` | S3 region | `nil` |
| `s3.regionEndpoint` | S3 region endpoint | `nil` |
| `s3.bucket` | S3 bucket name | `nil` |
| `s3.rootdirectory` | S3 prefix that is applied to allow you to segment data | `nil` |
| `s3.encrypt` | Store images in encrypted format | `nil` |
| `s3.secure` | Use HTTPS | `nil` |
| `s3.forcepathstyle` | Use path-style addressing, needed for some s3 compatible storage (minio) | `nil` |
| `s3.skipverify` | Allows connection to s3 storage using TLS with untrusted/self-signed certificate | `nil` |
| `swift.authurl` | Swift authurl | `nil` |
| `swift.container` | Swift container | `nil` |
| `proxy.enabled` | If true, registry will function as a proxy/mirror | `false` |
Expand Down Expand Up @@ -119,6 +137,8 @@ their default values.
| `garbageCollect.enabled` | If true, will deploy garbage-collector cronjob | `false` |
| `garbageCollect.deleteUntagged` | If true, garbage-collector will delete manifests that are not currently referenced via tag | `true` |
| `garbageCollect.schedule` | CronTab schedule, please use standard crontab format | `0 1 * * *` |
| `garbageCollect.podAnnotations` | CronJob pod Annotations. If left empty and chart `podAnnotations` are set, will use those. If both are set, these take precedence for the `garbageCollect` pods. | `{}` |
| `garbageCollect.podLabels` | CronJob pod Annotations. If left empty and chart `podLabels` are set, will use those. If both are set, these take precedence for the `garbageCollect` pods. | `{}` |
| `garbageCollect.resources` | garbage-collector requested resources | `{}` |

Specify each parameter using the `--set key=value[,key=value]` argument to
Expand Down
12 changes: 11 additions & 1 deletion templates/_helpers.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,16 @@ We truncate at 63 chars because some Kubernetes name fields are limited to this
value: {{ .Values.s3.multipartcopythresholdsize | quote }}
{{- end -}}

{{- if .Values.s3.forcepathstyle }}
- name: REGISTRY_STORAGE_S3_FORCEPATHSTYLE
value: {{ .Values.s3.forcepathstyle | quote }}
{{- end -}}

{{- if .Values.s3.skipverify }}
- name: REGISTRY_STORAGE_S3_SKIPVERIFY
value: {{ .Values.s3.skipverify | quote }}
{{- end -}}

{{- else if eq .Values.storage "swift" }}
- name: REGISTRY_STORAGE_SWIFT_AUTHURL
value: {{ required ".Values.swift.authurl is required" .Values.swift.authurl }}
Expand Down Expand Up @@ -168,7 +178,7 @@ We truncate at 63 chars because some Kubernetes name fields are limited to this

{{- define "docker-registry.volumeMounts" -}}
- name: "{{ template "docker-registry.fullname" . }}-config"
mountPath: "/etc/docker/registry"
mountPath: {{ .Values.configPath }}

{{- if .Values.secrets.htpasswd }}
- name: auth
Expand Down
21 changes: 17 additions & 4 deletions templates/cronjob.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -17,16 +17,26 @@ spec:
app: {{ template "docker-registry.name" . }}
release: {{ .Release.Name }}
{{- with .Values.podLabels }}
{{ toYaml . | nindent 8 }}
{{- toYaml . | nindent 8 }}
{{- end }}
annotations:
checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }}
checksum/secret: {{ include (print $.Template.BasePath "/secret.yaml") . | sha256sum }}
{{- if .Values.podAnnotations }}
{{ toYaml .Values.podAnnotations | nindent 8 }}
{{- toYaml .Values.podAnnotations | nindent 8 }}
{{- end }}
spec:
template:
metadata:
labels:
release: {{ .Release.Name }}
{{- if or .Values.podLabels .Values.garbageCollect.podLabels }}
{{- toYaml (merge (.Values.garbageCollect.podLabels | default (dict)) (.Values.podLabels | default (dict))) | nindent 12 }}
{{- end }}
{{- if or .Values.podAnnotations .Values.garbageCollect.podAnnotations }}
annotations:
{{- toYaml (merge (.Values.garbageCollect.podAnnotations | default (dict)) (.Values.podAnnotations | default (dict))) | nindent 12 }}
{{- end}}
spec:
{{- if or (eq .Values.serviceAccount.create true) (ne .Values.serviceAccount.name "") }}
serviceAccountName: {{ .Values.serviceAccount.name | default (include "docker-registry.fullname" .) }}
Expand All @@ -48,8 +58,11 @@ spec:
- /bin/registry
- garbage-collect
- --delete-untagged={{ .Values.garbageCollect.deleteUntagged }}
- /etc/docker/registry/config.yml
resources: {{ toYaml .Values.garbageCollect.resources | nindent 12 }}
- {{ .Values.configPath }}/config.yml
{{- if .Values.garbageCollect.resources }}
resources:
{{- toYaml .Values.garbageCollect.resources | nindent 16 }}
{{- end }}
env: {{ include "docker-registry.envs" . | nindent 16 }}
{{- if .Values.containerSecurityContext.enabled }}
securityContext: {{ omit .Values.containerSecurityContext "enabled" | toYaml | nindent 16 }}
Expand Down
2 changes: 1 addition & 1 deletion templates/deployment.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ spec:
command:
- /bin/registry
- serve
- /etc/docker/registry/config.yml
- {{ .Values.configPath }}/config.yml
ports:
- containerPort: 5000
{{- if .Values.metrics.enabled }}
Expand Down
50 changes: 33 additions & 17 deletions values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ serviceAccount:

image:
repository: registry
tag: 2.8.1
tag: 3.0.0
pullPolicy: IfNotPresent
# imagePullSecrets:
# - name: docker
Expand Down Expand Up @@ -61,11 +61,11 @@ resources: {}
# resources, such as Minikube. If you do want to specify resources, uncomment the following
# lines, adjust them as necessary, and remove the curly braces after 'resources:'.
# limits:
# cpu: 100m
# memory: 128Mi
# cpu: 100m
# memory: 128Mi
# requests:
# cpu: 100m
# memory: 128Mi
# cpu: 100m
# memory: 128Mi
persistence:
accessMode: 'ReadWriteOnce'
enabled: false
Expand Down Expand Up @@ -100,21 +100,23 @@ secrets:

# Options for s3 storage type:
# s3:
# region: us-east-1
# regionEndpoint: https://s3.us-east-1.amazonaws.com
# bucket: my-bucket
# rootdirectory: /object/prefix
# encrypt: false
# secure: true
# chunksize: 5242880
# multipartcopychunksize: 33554432
# multipartcopymaxconcurrency: 100
# multipartcopythresholdsize: 33554432
# region: us-east-1
# regionEndpoint: https://s3.us-east-1.amazonaws.com
# bucket: my-bucket
# rootdirectory: /object/prefix
# encrypt: false
# secure: true
# chunksize: 5242880
# multipartcopychunksize: 33554432
# multipartcopymaxconcurrency: 100
# multipartcopythresholdsize: 33554432
# forcepathstyle: true
# skipverify: true

# Options for swift storage type:
# swift:
# authurl: http://swift.example.com/
# container: my-container
# authurl: http://swift.example.com/
# container: my-container

# https://docs.docker.com/registry/recipes/mirror/
proxy:
Expand All @@ -139,6 +141,7 @@ metrics:
labels: {}
rules: {}

configPath: /etc/distribution
configData:
version: 0.1
log:
Expand Down Expand Up @@ -182,6 +185,7 @@ securityContext:
fsGroupChangePolicy: Always
sysctls: []
supplementalGroups: []
runAsUser: 1000
fsGroup: 1000

priorityClassName: ""
Expand Down Expand Up @@ -261,4 +265,16 @@ garbageCollect:
enabled: false
deleteUntagged: true
schedule: "0 1 * * *"
podAnnotations: {}
podLabels: {}
resources: {}
# We usually recommend not to specify default resources and to leave this as a conscious
# choice for the user. This also increases chances charts run on environments with little
# resources, such as Minikube. If you do want to specify resources, uncomment the following
# lines, adjust them as necessary, and remove the curly braces after 'resources:'.
# limits:
# cpu: 100m
# memory: 128Mi
# requests:
# cpu: 100m
# memory: 128Mi
Loading