apiVersion: v1 kind: PersistentVolumeClaim metadata: name: docker-distribution-pvc spec: accessModes: - ReadWriteOnce storageClassName: longhorn resources: requests: storage: 2Gi --- apiVersion: apps/v1 kind: StatefulSet metadata: labels: app.kubernetes.io/component: registry app.kubernetes.io/name: docker-distribution app.kubernetes.io/instance: docker-distribution app.kubernetes.io/part-of: docker-distribution name: docker-distribution spec: serviceName: docker-distribution selector: matchLabels: app.kubernetes.io/component: registry app.kubernetes.io/name: docker-distribution app.kubernetes.io/instance: docker-distribution template: metadata: labels: app.kubernetes.io/component: registry app.kubernetes.io/name: docker-distribution app.kubernetes.io/instance: docker-distribution spec: containers: - image: docker.io/registry:2 imagePullPolicy: IfNotPresent name: registry ports: - containerPort: 5000 name: http protocol: TCP readinessProbe: &probe failureThreshold: 3 httpGet: path: /v2/ port: 5000 scheme: HTTP initialDelaySeconds: 10 periodSeconds: 10 successThreshold: 1 timeoutSeconds: 1 livenessProbe: *probe env: - name: REGISTRY_STORAGE_DELETE_ENABLED value: 'true' volumeMounts: - mountPath: /var/lib/registry name: docker-registry - image: joxit/docker-registry-ui:latest imagePullPolicy: IfNotPresent name: registry-ui ports: - containerPort: 80 name: http-ui env: - name: REGISTRY_URL value: https://registry.pyrocufflink.blue/ - name: SINGLE_REGISTRY value: 'true' - name: DELETE_IMAGES value: 'true' volumes: - name: docker-registry persistentVolumeClaim: claimName: docker-distribution-pvc --- apiVersion: v1 kind: Service metadata: labels: app.kubernetes.io/component: registry app.kubernetes.io/instance: docker-distribution app.kubernetes.io/name: docker-distribution app.kubernetes.io/part-of: docker-distribution name: docker-distribution spec: ports: - port: 5000 protocol: TCP targetPort: 5000 selector: app.kubernetes.io/component: registry app.kubernetes.io/instance: docker-distribution app.kubernetes.io/name: docker-distribution sessionAffinity: None type: ClusterIP status: loadBalancer: {} --- apiVersion: v1 kind: Service metadata: labels: app.kubernetes.io/component: registry app.kubernetes.io/instance: docker-distribution app.kubernetes.io/name: docker-distribution app.kubernetes.io/part-of: docker-distribution name: registry-ui spec: ports: - port: 8080 protocol: TCP targetPort: 80 selector: app.kubernetes.io/component: registry app.kubernetes.io/instance: docker-distribution app.kubernetes.io/name: docker-distribution sessionAffinity: None type: ClusterIP status: loadBalancer: {} --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: docker-distribution annotations: nginx.ingress.kubernetes.io/proxy-body-size: '0' nginx.ingress.kubernetes.io/rewrite-target: /$1 spec: ingressClassName: nginx tls: - hosts: - registry.pyrocufflink.blue secretName: pyrocufflink-cert rules: - host: registry.pyrocufflink.blue http: paths: - path: /ui(.*)? pathType: Prefix backend: service: name: registry-ui port: number: 8080 - path: /(.*)? pathType: Prefix backend: service: name: docker-distribution port: number: 5000