Files
homelab/npmcache/manifest.yaml

160 lines
3.2 KiB
YAML

---
apiVersion: v1
kind: ConfigMap
metadata:
name: verdaccio
namespace: homelab
data:
config.yaml: |
storage: /verdaccio/storage
uplinks:
npmjs:
url: https://registry.npmjs.org/
packages:
"@*/*":
access: $all
publish: never
proxy: npmjs
"**":
access: $all
publish: never
proxy: npmjs
log:
- {type: stdout, format: pretty, level: http}
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: verdaccio
namespace: homelab
spec:
accessModes:
- ReadWriteMany
storageClassName: longhorn
resources:
requests:
storage: 128Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: verdaccio
namespace: homelab
spec:
replicas: 3
selector:
matchLabels:
app: verdaccio
template:
metadata:
labels:
app: verdaccio
spec:
nodeSelector:
nodepool: worker
topologySpreadConstraints:
- maxSkew: 1
topologyKey: kubernetes.io/hostname
whenUnsatisfiable: ScheduleAnyway
labelSelector:
matchLabels:
app: verdaccio
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- verdaccio
topologyKey: "kubernetes.io/hostname"
containers:
- name: verdaccio
image: verdaccio/verdaccio:latest
env:
- name: VERDACCIO_APP_CONFIG
value: /verdaccio/conf/custom.yaml
- name: VERDACCIO_PORT
value: "4873"
ports:
- containerPort: 4873
volumeMounts:
- name: storage
mountPath: /verdaccio/storage
- name: config
mountPath: /verdaccio/conf/config.yaml
subPath: config.yaml
volumes:
- name: storage
persistentVolumeClaim:
claimName: verdaccio
- name: config
configMap:
name: verdaccio
---
apiVersion: v1
kind: Service
metadata:
name: verdaccio
namespace: homelab
spec:
selector:
app: verdaccio
ports:
- port: 4873
targetPort: 4873
type: ClusterIP
---
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: verdaccio
namespace: homelab
spec:
ipAllowList:
sourceRange:
- "127.0.0.1/32"
- "10.43.0.0/16"
rateLimit:
average: 10
burst: 50
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: verdaccio
namespace: homelab
annotations:
cert-manager.io/cluster-issuer: "cloudflare-issuer"
cert-manager.io/acme-challenge-type: "dns01"
cert-manager.io/private-key-size: "4096"
# Traefik Middleware
traefik.io/router.middlewares: "verdaccio@kubernetescrd"
spec:
ingressClassName: traefik
tls:
- hosts:
- npm.dogar.dev
secretName: verdaccio-tls
rules:
- host: npm.dogar.dev
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: verdaccio
port:
number: 4873