reworking default namespace
This commit is contained in:
+124
-115
@@ -1,3 +1,39 @@
|
|||||||
|
---
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: sonic
|
||||||
|
namespace: default
|
||||||
|
spec:
|
||||||
|
replicas: 1
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: sonic
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: sonic
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: sonic
|
||||||
|
image: archivebox/sonic:latest
|
||||||
|
imagePullPolicy: Always
|
||||||
|
ports:
|
||||||
|
- containerPort: 1491
|
||||||
|
env:
|
||||||
|
- name: SEARCH_BACKEND_PASSWORD
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: password
|
||||||
|
key: password
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
memory: "64Mi"
|
||||||
|
cpu: "50m"
|
||||||
|
limits:
|
||||||
|
memory: "128Mi"
|
||||||
|
cpu: "200m"
|
||||||
|
---
|
||||||
apiVersion: apps/v1
|
apiVersion: apps/v1
|
||||||
kind: Deployment
|
kind: Deployment
|
||||||
metadata:
|
metadata:
|
||||||
@@ -8,80 +44,69 @@ spec:
|
|||||||
selector:
|
selector:
|
||||||
matchLabels:
|
matchLabels:
|
||||||
app: archivebox
|
app: archivebox
|
||||||
strategy:
|
|
||||||
type: Recreate
|
|
||||||
template:
|
template:
|
||||||
metadata:
|
metadata:
|
||||||
labels:
|
labels:
|
||||||
app: archivebox
|
app: archivebox
|
||||||
spec:
|
spec:
|
||||||
containers:
|
containers:
|
||||||
- env:
|
- name: archivebox
|
||||||
- name: SONIC_HOST
|
image: archivebox/archivebox:latest
|
||||||
value: sonic.default.svc.cluster.local
|
imagePullPolicy: Always
|
||||||
- name: SONIC_PORT
|
ports:
|
||||||
value: '1491'
|
- containerPort: 8000
|
||||||
- name: SEARCH_BACKEND_ENGINE
|
env:
|
||||||
value: sonic
|
- name: SONIC_HOST
|
||||||
- name: SONIC_PASSWORD
|
value: "sonic.default.svc.cluster.local"
|
||||||
valueFrom:
|
- name: SONIC_PORT
|
||||||
secretKeyRef:
|
value: "1491"
|
||||||
key: password
|
- name: SEARCH_BACKEND_ENGINE
|
||||||
name: password
|
value: "sonic"
|
||||||
- name: ADMIN_USERNAME
|
- name: SONIC_PASSWORD
|
||||||
value: ivanch
|
valueFrom:
|
||||||
- name: ADMIN_PASSWORD
|
secretKeyRef:
|
||||||
valueFrom:
|
name: password
|
||||||
secretKeyRef:
|
key: password
|
||||||
key: password
|
- name: ADMIN_USERNAME
|
||||||
name: password
|
value: "ivanch"
|
||||||
- name: CSRF_TRUSTED_ORIGINS
|
- name: ADMIN_PASSWORD
|
||||||
value: archive.haven
|
valueFrom:
|
||||||
- name: ALLOWED_HOSTS
|
secretKeyRef:
|
||||||
value: '*'
|
name: password
|
||||||
- name: PUBLIC_ADD_VIEW
|
key: password
|
||||||
value: 'false'
|
- name: CSRF_TRUSTED_ORIGINS
|
||||||
image: archivebox/archivebox:latest
|
value: "archive.haven"
|
||||||
imagePullPolicy: Always
|
- name: ALLOWED_HOSTS
|
||||||
name: archivebox
|
value: "*"
|
||||||
ports:
|
- name: PUBLIC_ADD_VIEW
|
||||||
- containerPort: 8000
|
value: "false"
|
||||||
protocol: TCP
|
volumeMounts:
|
||||||
resources: {}
|
- name: archivebox-data
|
||||||
terminationMessagePath: /dev/termination-log
|
mountPath: /data
|
||||||
terminationMessagePolicy: File
|
resources:
|
||||||
volumeMounts:
|
requests:
|
||||||
- mountPath: /data
|
memory: "256Mi"
|
||||||
name: archivebox-data
|
cpu: "100m"
|
||||||
dnsPolicy: ClusterFirst
|
limits:
|
||||||
restartPolicy: Always
|
memory: "2Gi"
|
||||||
schedulerName: default-scheduler
|
cpu: "3000m"
|
||||||
securityContext: {}
|
|
||||||
terminationGracePeriodSeconds: 30
|
|
||||||
volumes:
|
volumes:
|
||||||
- name: archivebox-data
|
- name: archivebox-data
|
||||||
persistentVolumeClaim:
|
persistentVolumeClaim:
|
||||||
claimName: archivebox-data
|
claimName: archivebox-data
|
||||||
status:
|
---
|
||||||
availableReplicas: 1
|
apiVersion: v1
|
||||||
conditions:
|
kind: Service
|
||||||
- lastTransitionTime: '2026-05-19T01:51:47Z'
|
metadata:
|
||||||
lastUpdateTime: '2026-07-22T10:14:38Z'
|
name: sonic-svc
|
||||||
message: ReplicaSet "archivebox-bb7f58db4" has successfully progressed.
|
namespace: default
|
||||||
reason: NewReplicaSetAvailable
|
spec:
|
||||||
status: 'True'
|
selector:
|
||||||
type: Progressing
|
app: sonic
|
||||||
- lastTransitionTime: '2026-08-28T06:04:13Z'
|
ports:
|
||||||
lastUpdateTime: '2026-08-28T06:04:13Z'
|
- protocol: TCP
|
||||||
message: Deployment has minimum availability.
|
port: 1491
|
||||||
reason: MinimumReplicasAvailable
|
targetPort: 1491
|
||||||
status: 'True'
|
|
||||||
type: Available
|
|
||||||
observedGeneration: 94
|
|
||||||
readyReplicas: 1
|
|
||||||
replicas: 1
|
|
||||||
terminatingReplicas: 0
|
|
||||||
updatedReplicas: 1
|
|
||||||
---
|
---
|
||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
kind: Service
|
kind: Service
|
||||||
@@ -89,20 +114,30 @@ metadata:
|
|||||||
name: archivebox-svc
|
name: archivebox-svc
|
||||||
namespace: default
|
namespace: default
|
||||||
spec:
|
spec:
|
||||||
internalTrafficPolicy: Cluster
|
|
||||||
ipFamilies:
|
|
||||||
- IPv4
|
|
||||||
ipFamilyPolicy: SingleStack
|
|
||||||
ports:
|
|
||||||
- port: 8000
|
|
||||||
protocol: TCP
|
|
||||||
targetPort: 8000
|
|
||||||
selector:
|
selector:
|
||||||
app: archivebox
|
app: archivebox
|
||||||
sessionAffinity: None
|
ports:
|
||||||
type: ClusterIP
|
- protocol: TCP
|
||||||
status:
|
port: 8000
|
||||||
loadBalancer: {}
|
targetPort: 8000
|
||||||
|
---
|
||||||
|
# 3) PersistentVolumeClaim
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
name: archivebox-data
|
||||||
|
namespace: default
|
||||||
|
annotations:
|
||||||
|
nfs.io/storage-path: "archivebox-data"
|
||||||
|
spec:
|
||||||
|
storageClassName: "nfs-client"
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 10Gi
|
||||||
|
limits:
|
||||||
|
storage: 30Gi
|
||||||
---
|
---
|
||||||
apiVersion: networking.k8s.io/v1
|
apiVersion: networking.k8s.io/v1
|
||||||
kind: Ingress
|
kind: Ingress
|
||||||
@@ -112,39 +147,13 @@ metadata:
|
|||||||
spec:
|
spec:
|
||||||
ingressClassName: nginx
|
ingressClassName: nginx
|
||||||
rules:
|
rules:
|
||||||
- host: archive.haven
|
- host: "archive.haven"
|
||||||
http:
|
http:
|
||||||
paths:
|
paths:
|
||||||
- backend:
|
- path: /
|
||||||
service:
|
pathType: Prefix
|
||||||
name: archivebox-svc
|
backend:
|
||||||
port:
|
service:
|
||||||
number: 8000
|
name: archivebox-svc
|
||||||
path: /
|
port:
|
||||||
pathType: Prefix
|
number: 8000
|
||||||
status:
|
|
||||||
loadBalancer:
|
|
||||||
ingress:
|
|
||||||
- ip: 192.168.20.204
|
|
||||||
---
|
|
||||||
apiVersion: v1
|
|
||||||
kind: PersistentVolumeClaim
|
|
||||||
metadata:
|
|
||||||
name: archivebox-data
|
|
||||||
namespace: default
|
|
||||||
spec:
|
|
||||||
accessModes:
|
|
||||||
- ReadWriteOnce
|
|
||||||
resources:
|
|
||||||
limits:
|
|
||||||
storage: 30Gi
|
|
||||||
requests:
|
|
||||||
storage: 10Gi
|
|
||||||
storageClassName: nfs-client
|
|
||||||
volumeMode: Filesystem
|
|
||||||
status:
|
|
||||||
accessModes:
|
|
||||||
- ReadWriteOnce
|
|
||||||
capacity:
|
|
||||||
storage: 10Gi
|
|
||||||
phase: Bound
|
|
||||||
|
|||||||
+110
-145
@@ -1,12 +1,13 @@
|
|||||||
apiVersion: apps/v1
|
apiVersion: apps/v1
|
||||||
kind: Deployment
|
kind: Deployment
|
||||||
metadata:
|
metadata:
|
||||||
labels:
|
|
||||||
app.kubernetes.io/name: changedetection
|
|
||||||
name: changedetection
|
name: changedetection
|
||||||
namespace: default
|
namespace: default
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: changedetection
|
||||||
spec:
|
spec:
|
||||||
replicas: 1
|
replicas: 1
|
||||||
|
revisionHistoryLimit: 10
|
||||||
selector:
|
selector:
|
||||||
matchLabels:
|
matchLabels:
|
||||||
app.kubernetes.io/name: changedetection
|
app.kubernetes.io/name: changedetection
|
||||||
@@ -20,170 +21,134 @@ spec:
|
|||||||
affinity:
|
affinity:
|
||||||
nodeAffinity:
|
nodeAffinity:
|
||||||
preferredDuringSchedulingIgnoredDuringExecution:
|
preferredDuringSchedulingIgnoredDuringExecution:
|
||||||
- preference:
|
- weight: 100
|
||||||
matchExpressions:
|
preference:
|
||||||
- key: kubernetes.io/hostname
|
matchExpressions:
|
||||||
operator: In
|
- key: kubernetes.io/hostname
|
||||||
values:
|
operator: In
|
||||||
- iris
|
values:
|
||||||
weight: 100
|
- iris
|
||||||
containers:
|
containers:
|
||||||
- env:
|
- name: changedetection
|
||||||
- name: PUID
|
image: lscr.io/linuxserver/changedetection.io:latest
|
||||||
value: '1000'
|
imagePullPolicy: Always
|
||||||
- name: PGID
|
env:
|
||||||
value: '1000'
|
- name: PUID
|
||||||
- name: TZ
|
value: "1000"
|
||||||
value: Etc/UTC
|
- name: PGID
|
||||||
- name: BASE_URL
|
value: "1000"
|
||||||
value: http://change.haven/
|
- name: TZ
|
||||||
- name: PLAYWRIGHT_DRIVER_URL
|
value: "Etc/UTC"
|
||||||
value: ws://localhost:3000
|
- name: BASE_URL
|
||||||
image: lscr.io/linuxserver/changedetection.io:latest
|
value: "http://change.haven/"
|
||||||
imagePullPolicy: Always
|
- name: PLAYWRIGHT_DRIVER_URL
|
||||||
name: changedetection
|
value: "ws://localhost:3000"
|
||||||
ports:
|
ports:
|
||||||
- containerPort: 5000
|
- containerPort: 5000
|
||||||
name: http
|
name: http
|
||||||
protocol: TCP
|
protocol: TCP
|
||||||
resources:
|
resources:
|
||||||
limits:
|
requests:
|
||||||
cpu: '2'
|
cpu: 100m
|
||||||
memory: 1Gi
|
memory: 256Mi
|
||||||
requests:
|
limits:
|
||||||
cpu: 100m
|
cpu: 2000m
|
||||||
memory: 256Mi
|
memory: 1Gi
|
||||||
securityContext:
|
securityContext:
|
||||||
allowPrivilegeEscalation: false
|
allowPrivilegeEscalation: false
|
||||||
runAsUser: 0
|
runAsUser: 0
|
||||||
terminationMessagePath: /dev/termination-log
|
volumeMounts:
|
||||||
terminationMessagePolicy: File
|
- name: config
|
||||||
volumeMounts:
|
mountPath: /config
|
||||||
- mountPath: /config
|
- name: browser-sockpuppet-chrome
|
||||||
name: config
|
image: dgtlmoon/sockpuppetbrowser:latest
|
||||||
- env:
|
imagePullPolicy: Always
|
||||||
- name: SCREEN_WIDTH
|
env:
|
||||||
value: '1920'
|
- name: SCREEN_WIDTH
|
||||||
- name: SCREEN_HEIGHT
|
value: "1920"
|
||||||
value: '1024'
|
- name: SCREEN_HEIGHT
|
||||||
- name: SCREEN_DEPTH
|
value: "1024"
|
||||||
value: '16'
|
- name: SCREEN_DEPTH
|
||||||
- name: MAX_CONCURRENT_CHROME_PROCESSES
|
value: "16"
|
||||||
value: '10'
|
- name: MAX_CONCURRENT_CHROME_PROCESSES
|
||||||
image: dgtlmoon/sockpuppetbrowser:latest
|
value: "10"
|
||||||
imagePullPolicy: Always
|
ports:
|
||||||
name: browser-sockpuppet-chrome
|
- containerPort: 3000
|
||||||
ports:
|
name: ws
|
||||||
- containerPort: 3000
|
protocol: TCP
|
||||||
name: ws
|
resources:
|
||||||
protocol: TCP
|
requests:
|
||||||
resources: {}
|
cpu: 100m
|
||||||
securityContext:
|
memory: 256Mi
|
||||||
allowPrivilegeEscalation: false
|
limits:
|
||||||
capabilities:
|
cpu: 2000m
|
||||||
add:
|
memory: 4Gi
|
||||||
- SYS_ADMIN
|
securityContext:
|
||||||
drop:
|
allowPrivilegeEscalation: false
|
||||||
- ALL
|
capabilities:
|
||||||
terminationMessagePath: /dev/termination-log
|
add:
|
||||||
terminationMessagePolicy: File
|
- SYS_ADMIN
|
||||||
|
drop:
|
||||||
|
- ALL
|
||||||
|
volumes:
|
||||||
|
- name: config
|
||||||
|
persistentVolumeClaim:
|
||||||
|
claimName: changedetection-config
|
||||||
dnsPolicy: ClusterFirst
|
dnsPolicy: ClusterFirst
|
||||||
restartPolicy: Always
|
restartPolicy: Always
|
||||||
schedulerName: default-scheduler
|
|
||||||
securityContext: {}
|
|
||||||
terminationGracePeriodSeconds: 30
|
terminationGracePeriodSeconds: 30
|
||||||
volumes:
|
|
||||||
- name: config
|
|
||||||
persistentVolumeClaim:
|
|
||||||
claimName: changedetection-config
|
|
||||||
status:
|
|
||||||
availableReplicas: 1
|
|
||||||
conditions:
|
|
||||||
- lastTransitionTime: '2026-08-04T16:20:08Z'
|
|
||||||
lastUpdateTime: '2026-08-04T16:32:45Z'
|
|
||||||
message: ReplicaSet "changedetection-77cd668cf4" has successfully progressed.
|
|
||||||
reason: NewReplicaSetAvailable
|
|
||||||
status: 'True'
|
|
||||||
type: Progressing
|
|
||||||
- lastTransitionTime: '2026-08-28T06:05:12Z'
|
|
||||||
lastUpdateTime: '2026-08-28T06:05:12Z'
|
|
||||||
message: Deployment has minimum availability.
|
|
||||||
reason: MinimumReplicasAvailable
|
|
||||||
status: 'True'
|
|
||||||
type: Available
|
|
||||||
observedGeneration: 22
|
|
||||||
readyReplicas: 1
|
|
||||||
replicas: 1
|
|
||||||
terminatingReplicas: 0
|
|
||||||
updatedReplicas: 1
|
|
||||||
---
|
---
|
||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
kind: Service
|
kind: Service
|
||||||
metadata:
|
metadata:
|
||||||
labels:
|
|
||||||
app.kubernetes.io/name: changedetection
|
|
||||||
name: changedetection
|
name: changedetection
|
||||||
namespace: default
|
namespace: default
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: changedetection
|
||||||
spec:
|
spec:
|
||||||
internalTrafficPolicy: Cluster
|
type: ClusterIP
|
||||||
ipFamilies:
|
|
||||||
- IPv4
|
|
||||||
ipFamilyPolicy: SingleStack
|
|
||||||
ports:
|
|
||||||
- name: http
|
|
||||||
port: 5000
|
|
||||||
protocol: TCP
|
|
||||||
targetPort: http
|
|
||||||
selector:
|
selector:
|
||||||
app.kubernetes.io/name: changedetection
|
app.kubernetes.io/name: changedetection
|
||||||
sessionAffinity: None
|
ports:
|
||||||
type: ClusterIP
|
- name: http
|
||||||
status:
|
port: 5000
|
||||||
loadBalancer: {}
|
protocol: TCP
|
||||||
---
|
targetPort: http
|
||||||
apiVersion: networking.k8s.io/v1
|
|
||||||
kind: Ingress
|
|
||||||
metadata:
|
|
||||||
labels:
|
|
||||||
app.kubernetes.io/name: changedetection
|
|
||||||
name: changedetection
|
|
||||||
namespace: default
|
|
||||||
spec:
|
|
||||||
ingressClassName: nginx
|
|
||||||
rules:
|
|
||||||
- host: change.haven
|
|
||||||
http:
|
|
||||||
paths:
|
|
||||||
- backend:
|
|
||||||
service:
|
|
||||||
name: changedetection
|
|
||||||
port:
|
|
||||||
number: 5000
|
|
||||||
path: /
|
|
||||||
pathType: Prefix
|
|
||||||
status:
|
|
||||||
loadBalancer:
|
|
||||||
ingress:
|
|
||||||
- ip: 192.168.20.204
|
|
||||||
---
|
---
|
||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
kind: PersistentVolumeClaim
|
kind: PersistentVolumeClaim
|
||||||
metadata:
|
metadata:
|
||||||
name: changedetection-config
|
name: changedetection-config
|
||||||
namespace: default
|
namespace: default
|
||||||
|
annotations:
|
||||||
|
nfs.io/storage-path: "changedetection-config"
|
||||||
spec:
|
spec:
|
||||||
|
storageClassName: "nfs-client"
|
||||||
accessModes:
|
accessModes:
|
||||||
- ReadWriteOnce
|
- ReadWriteOnce
|
||||||
resources:
|
resources:
|
||||||
limits:
|
|
||||||
storage: 2Gi
|
|
||||||
requests:
|
requests:
|
||||||
storage: 1Gi
|
storage: 1Gi
|
||||||
storageClassName: nfs-client
|
limits:
|
||||||
volumeMode: Filesystem
|
storage: 2Gi
|
||||||
status:
|
---
|
||||||
accessModes:
|
apiVersion: networking.k8s.io/v1
|
||||||
- ReadWriteOnce
|
kind: Ingress
|
||||||
capacity:
|
metadata:
|
||||||
storage: 1Gi
|
name: changedetection
|
||||||
phase: Bound
|
namespace: default
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: changedetection
|
||||||
|
spec:
|
||||||
|
ingressClassName: nginx
|
||||||
|
rules:
|
||||||
|
- host: change.haven
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- path: /
|
||||||
|
pathType: Prefix
|
||||||
|
backend:
|
||||||
|
service:
|
||||||
|
name: changedetection
|
||||||
|
port:
|
||||||
|
number: 5000
|
||||||
|
|||||||
+83
-129
@@ -1,12 +1,14 @@
|
|||||||
|
---
|
||||||
apiVersion: apps/v1
|
apiVersion: apps/v1
|
||||||
kind: Deployment
|
kind: Deployment
|
||||||
metadata:
|
metadata:
|
||||||
labels:
|
|
||||||
app.kubernetes.io/name: havenllo
|
|
||||||
name: havenllo
|
name: havenllo
|
||||||
namespace: default
|
namespace: default
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: havenllo
|
||||||
spec:
|
spec:
|
||||||
replicas: 1
|
replicas: 1
|
||||||
|
revisionHistoryLimit: 10
|
||||||
selector:
|
selector:
|
||||||
matchLabels:
|
matchLabels:
|
||||||
app.kubernetes.io/name: havenllo
|
app.kubernetes.io/name: havenllo
|
||||||
@@ -18,154 +20,106 @@ spec:
|
|||||||
app.kubernetes.io/name: havenllo
|
app.kubernetes.io/name: havenllo
|
||||||
spec:
|
spec:
|
||||||
containers:
|
containers:
|
||||||
- env:
|
- name: havenllo
|
||||||
- name: HAVENLLO_DATABASE_PATH
|
image: git.ivanch.me/ivanch/havenllo:latest
|
||||||
value: /data/havenllo.db
|
imagePullPolicy: Always
|
||||||
- name: HAVENLLO_LISTEN_ADDR
|
env:
|
||||||
value: :8080
|
- name: HAVENLLO_DATABASE_PATH
|
||||||
image: git.ivanch.me/ivanch/havenllo:latest
|
value: /data/havenllo.db
|
||||||
imagePullPolicy: Always
|
- name: HAVENLLO_LISTEN_ADDR
|
||||||
livenessProbe:
|
value: :8080
|
||||||
failureThreshold: 3
|
ports:
|
||||||
httpGet:
|
- containerPort: 8080
|
||||||
path: /api/health
|
name: http
|
||||||
port: http
|
protocol: TCP
|
||||||
scheme: HTTP
|
livenessProbe:
|
||||||
initialDelaySeconds: 10
|
httpGet:
|
||||||
periodSeconds: 10
|
path: /api/health
|
||||||
successThreshold: 1
|
port: http
|
||||||
timeoutSeconds: 2
|
scheme: HTTP
|
||||||
name: havenllo
|
initialDelaySeconds: 10
|
||||||
ports:
|
periodSeconds: 10
|
||||||
- containerPort: 8080
|
timeoutSeconds: 2
|
||||||
name: http
|
failureThreshold: 3
|
||||||
protocol: TCP
|
successThreshold: 1
|
||||||
readinessProbe:
|
readinessProbe:
|
||||||
failureThreshold: 3
|
httpGet:
|
||||||
httpGet:
|
path: /api/health
|
||||||
path: /api/health
|
port: http
|
||||||
port: http
|
scheme: HTTP
|
||||||
scheme: HTTP
|
initialDelaySeconds: 2
|
||||||
initialDelaySeconds: 2
|
periodSeconds: 5
|
||||||
periodSeconds: 5
|
timeoutSeconds: 2
|
||||||
successThreshold: 1
|
failureThreshold: 3
|
||||||
timeoutSeconds: 2
|
successThreshold: 1
|
||||||
resources:
|
resources:
|
||||||
limits:
|
requests:
|
||||||
cpu: 500m
|
cpu: 50m
|
||||||
memory: 256Mi
|
memory: 64Mi
|
||||||
requests:
|
limits:
|
||||||
cpu: 50m
|
cpu: 500m
|
||||||
memory: 64Mi
|
memory: 256Mi
|
||||||
securityContext:
|
securityContext:
|
||||||
allowPrivilegeEscalation: false
|
allowPrivilegeEscalation: false
|
||||||
capabilities:
|
capabilities:
|
||||||
drop:
|
drop:
|
||||||
- ALL
|
- ALL
|
||||||
readOnlyRootFilesystem: true
|
readOnlyRootFilesystem: true
|
||||||
runAsUser: 0
|
runAsUser: 0
|
||||||
terminationMessagePath: /dev/termination-log
|
terminationMessagePath: /dev/termination-log
|
||||||
terminationMessagePolicy: File
|
terminationMessagePolicy: File
|
||||||
volumeMounts:
|
volumeMounts:
|
||||||
- mountPath: /data
|
- name: data
|
||||||
name: data
|
mountPath: /data
|
||||||
|
volumes:
|
||||||
|
- name: data
|
||||||
|
persistentVolumeClaim:
|
||||||
|
claimName: havenllo-data
|
||||||
dnsPolicy: ClusterFirst
|
dnsPolicy: ClusterFirst
|
||||||
restartPolicy: Always
|
restartPolicy: Always
|
||||||
schedulerName: default-scheduler
|
schedulerName: default-scheduler
|
||||||
securityContext: {}
|
securityContext: {}
|
||||||
terminationGracePeriodSeconds: 30
|
terminationGracePeriodSeconds: 30
|
||||||
volumes:
|
|
||||||
- name: data
|
|
||||||
persistentVolumeClaim:
|
|
||||||
claimName: havenllo-data
|
|
||||||
status:
|
|
||||||
availableReplicas: 1
|
|
||||||
conditions:
|
|
||||||
- lastTransitionTime: '2026-07-14T13:21:13Z'
|
|
||||||
lastUpdateTime: '2026-07-21T21:06:45Z'
|
|
||||||
message: ReplicaSet "havenllo-5d4f8ccb4f" has successfully progressed.
|
|
||||||
reason: NewReplicaSetAvailable
|
|
||||||
status: 'True'
|
|
||||||
type: Progressing
|
|
||||||
- lastTransitionTime: '2026-08-28T06:04:17Z'
|
|
||||||
lastUpdateTime: '2026-08-28T06:04:17Z'
|
|
||||||
message: Deployment has minimum availability.
|
|
||||||
reason: MinimumReplicasAvailable
|
|
||||||
status: 'True'
|
|
||||||
type: Available
|
|
||||||
observedGeneration: 41
|
|
||||||
readyReplicas: 1
|
|
||||||
replicas: 1
|
|
||||||
terminatingReplicas: 0
|
|
||||||
updatedReplicas: 1
|
|
||||||
---
|
---
|
||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
kind: Service
|
kind: Service
|
||||||
metadata:
|
metadata:
|
||||||
labels:
|
|
||||||
app.kubernetes.io/name: havenllo
|
|
||||||
name: havenllo
|
name: havenllo
|
||||||
namespace: default
|
namespace: default
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: havenllo
|
||||||
spec:
|
spec:
|
||||||
internalTrafficPolicy: Cluster
|
type: ClusterIP
|
||||||
ipFamilies:
|
sessionAffinity: None
|
||||||
- IPv4
|
|
||||||
ipFamilyPolicy: SingleStack
|
|
||||||
ports:
|
ports:
|
||||||
- name: http
|
- name: http
|
||||||
port: 8080
|
port: 8080
|
||||||
protocol: TCP
|
protocol: TCP
|
||||||
targetPort: 8080
|
targetPort: 8080
|
||||||
selector:
|
selector:
|
||||||
app.kubernetes.io/name: havenllo
|
app.kubernetes.io/name: havenllo
|
||||||
sessionAffinity: None
|
ipFamilies:
|
||||||
type: ClusterIP
|
- IPv4
|
||||||
status:
|
ipFamilyPolicy: SingleStack
|
||||||
loadBalancer: {}
|
internalTrafficPolicy: Cluster
|
||||||
---
|
---
|
||||||
apiVersion: networking.k8s.io/v1
|
apiVersion: networking.k8s.io/v1
|
||||||
kind: Ingress
|
kind: Ingress
|
||||||
metadata:
|
metadata:
|
||||||
name: havenllo
|
name: havenllo
|
||||||
namespace: default
|
namespace: default
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: havenllo
|
||||||
spec:
|
spec:
|
||||||
ingressClassName: nginx-https
|
ingressClassName: nginx-https
|
||||||
rules:
|
rules:
|
||||||
- host: havenllo.haven
|
- host: havenllo.haven
|
||||||
http:
|
http:
|
||||||
paths:
|
paths:
|
||||||
- backend:
|
- path: /
|
||||||
service:
|
pathType: Prefix
|
||||||
name: havenllo
|
backend:
|
||||||
port:
|
service:
|
||||||
number: 8080
|
name: havenllo
|
||||||
path: /
|
port:
|
||||||
pathType: Prefix
|
number: 8080
|
||||||
tls:
|
|
||||||
- hosts:
|
|
||||||
- havenllo.haven
|
|
||||||
secretName: havenllo-tls
|
|
||||||
status:
|
|
||||||
loadBalancer:
|
|
||||||
ingress:
|
|
||||||
- ip: 192.168.20.204
|
|
||||||
---
|
|
||||||
apiVersion: v1
|
|
||||||
kind: PersistentVolumeClaim
|
|
||||||
metadata:
|
|
||||||
name: havenllo-data
|
|
||||||
namespace: default
|
|
||||||
spec:
|
|
||||||
accessModes:
|
|
||||||
- ReadWriteOnce
|
|
||||||
resources:
|
|
||||||
requests:
|
|
||||||
storage: 1Gi
|
|
||||||
storageClassName: nfs-client
|
|
||||||
volumeMode: Filesystem
|
|
||||||
status:
|
|
||||||
accessModes:
|
|
||||||
- ReadWriteOnce
|
|
||||||
capacity:
|
|
||||||
storage: 1Gi
|
|
||||||
phase: Bound
|
|
||||||
|
|||||||
+173
-193
@@ -1,226 +1,206 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: ServiceAccount
|
||||||
|
metadata:
|
||||||
|
name: homepage
|
||||||
|
namespace: default
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: homepage
|
||||||
|
secrets:
|
||||||
|
- name: homepage
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Secret
|
||||||
|
type: kubernetes.io/service-account-token
|
||||||
|
metadata:
|
||||||
|
name: homepage
|
||||||
|
namespace: default
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: homepage
|
||||||
|
annotations:
|
||||||
|
kubernetes.io/service-account.name: homepage
|
||||||
|
---
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
kind: ClusterRole
|
||||||
|
metadata:
|
||||||
|
name: homepage
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: homepage
|
||||||
|
rules:
|
||||||
|
- apiGroups:
|
||||||
|
- ""
|
||||||
|
resources:
|
||||||
|
- namespaces
|
||||||
|
- pods
|
||||||
|
- nodes
|
||||||
|
verbs:
|
||||||
|
- get
|
||||||
|
- list
|
||||||
|
- apiGroups:
|
||||||
|
- extensions
|
||||||
|
- networking.k8s.io
|
||||||
|
resources:
|
||||||
|
- ingresses
|
||||||
|
verbs:
|
||||||
|
- get
|
||||||
|
- list
|
||||||
|
- apiGroups:
|
||||||
|
- traefik.io
|
||||||
|
resources:
|
||||||
|
- ingressroutes
|
||||||
|
verbs:
|
||||||
|
- get
|
||||||
|
- list
|
||||||
|
- apiGroups:
|
||||||
|
- gateway.networking.k8s.io
|
||||||
|
resources:
|
||||||
|
- httproutes
|
||||||
|
- gateways
|
||||||
|
verbs:
|
||||||
|
- get
|
||||||
|
- list
|
||||||
|
- apiGroups:
|
||||||
|
- metrics.k8s.io
|
||||||
|
resources:
|
||||||
|
- nodes
|
||||||
|
- pods
|
||||||
|
verbs:
|
||||||
|
- get
|
||||||
|
- list
|
||||||
|
---
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
kind: ClusterRoleBinding
|
||||||
|
metadata:
|
||||||
|
name: homepage
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: homepage
|
||||||
|
roleRef:
|
||||||
|
apiGroup: rbac.authorization.k8s.io
|
||||||
|
kind: ClusterRole
|
||||||
|
name: homepage
|
||||||
|
subjects:
|
||||||
|
- kind: ServiceAccount
|
||||||
|
name: homepage
|
||||||
|
namespace: default
|
||||||
|
---
|
||||||
apiVersion: apps/v1
|
apiVersion: apps/v1
|
||||||
kind: Deployment
|
kind: Deployment
|
||||||
metadata:
|
metadata:
|
||||||
labels:
|
|
||||||
app.kubernetes.io/name: homepage
|
|
||||||
name: homepage
|
name: homepage
|
||||||
namespace: default
|
namespace: default
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: homepage
|
||||||
spec:
|
spec:
|
||||||
|
revisionHistoryLimit: 3
|
||||||
replicas: 1
|
replicas: 1
|
||||||
|
strategy:
|
||||||
|
type: RollingUpdate
|
||||||
selector:
|
selector:
|
||||||
matchLabels:
|
matchLabels:
|
||||||
app.kubernetes.io/name: homepage
|
app.kubernetes.io/name: homepage
|
||||||
strategy:
|
|
||||||
type: Recreate
|
|
||||||
template:
|
template:
|
||||||
metadata:
|
metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/name: homepage
|
app.kubernetes.io/name: homepage
|
||||||
|
annotations:
|
||||||
|
configmap.reloader/checksum: '{{ include (print $.Template.BasePath "/app/config/services.yaml") . | sha256sum }}'
|
||||||
spec:
|
spec:
|
||||||
automountServiceAccountToken: true
|
|
||||||
containers:
|
|
||||||
- env:
|
|
||||||
- name: POD_IP
|
|
||||||
valueFrom:
|
|
||||||
fieldRef:
|
|
||||||
apiVersion: v1
|
|
||||||
fieldPath: status.podIP
|
|
||||||
- name: HOMEPAGE_ALLOWED_HOSTS
|
|
||||||
value: '*'
|
|
||||||
image: ghcr.io/gethomepage/homepage:latest
|
|
||||||
imagePullPolicy: Always
|
|
||||||
livenessProbe:
|
|
||||||
failureThreshold: 3
|
|
||||||
httpGet:
|
|
||||||
path: /
|
|
||||||
port: 3000
|
|
||||||
scheme: HTTP
|
|
||||||
initialDelaySeconds: 30
|
|
||||||
periodSeconds: 10
|
|
||||||
successThreshold: 1
|
|
||||||
timeoutSeconds: 1
|
|
||||||
name: homepage
|
|
||||||
ports:
|
|
||||||
- containerPort: 3000
|
|
||||||
name: http
|
|
||||||
protocol: TCP
|
|
||||||
readinessProbe:
|
|
||||||
failureThreshold: 3
|
|
||||||
httpGet:
|
|
||||||
path: /
|
|
||||||
port: 3000
|
|
||||||
scheme: HTTP
|
|
||||||
initialDelaySeconds: 5
|
|
||||||
periodSeconds: 5
|
|
||||||
successThreshold: 1
|
|
||||||
timeoutSeconds: 1
|
|
||||||
resources:
|
|
||||||
limits:
|
|
||||||
cpu: 500m
|
|
||||||
memory: 512Mi
|
|
||||||
requests:
|
|
||||||
cpu: 100m
|
|
||||||
memory: 128Mi
|
|
||||||
terminationMessagePath: /dev/termination-log
|
|
||||||
terminationMessagePolicy: File
|
|
||||||
volumeMounts:
|
|
||||||
- mountPath: /app/config/logs
|
|
||||||
name: logs
|
|
||||||
- mountPath: /app/config
|
|
||||||
name: homepage-config
|
|
||||||
- mountPath: /app/public/images
|
|
||||||
name: homepage-config
|
|
||||||
subPath: images
|
|
||||||
dnsPolicy: ClusterFirst
|
|
||||||
enableServiceLinks: true
|
|
||||||
restartPolicy: Always
|
|
||||||
schedulerName: default-scheduler
|
|
||||||
securityContext: {}
|
|
||||||
serviceAccount: homepage
|
|
||||||
serviceAccountName: homepage
|
serviceAccountName: homepage
|
||||||
terminationGracePeriodSeconds: 30
|
automountServiceAccountToken: true
|
||||||
|
enableServiceLinks: true
|
||||||
|
containers:
|
||||||
|
- name: homepage
|
||||||
|
image: "ghcr.io/gethomepage/homepage:latest"
|
||||||
|
imagePullPolicy: Always
|
||||||
|
env:
|
||||||
|
- name: HOMEPAGE_ALLOWED_HOSTS
|
||||||
|
value: "*"
|
||||||
|
ports:
|
||||||
|
- name: http
|
||||||
|
containerPort: 3000
|
||||||
|
protocol: TCP
|
||||||
|
livenessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: /
|
||||||
|
port: 3000
|
||||||
|
initialDelaySeconds: 30
|
||||||
|
periodSeconds: 10
|
||||||
|
readinessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: /
|
||||||
|
port: 3000
|
||||||
|
initialDelaySeconds: 5
|
||||||
|
periodSeconds: 5
|
||||||
|
volumeMounts:
|
||||||
|
- name: logs
|
||||||
|
mountPath: /app/config/logs
|
||||||
|
- name: homepage-config
|
||||||
|
mountPath: /app/config
|
||||||
|
- name: homepage-config
|
||||||
|
mountPath: /app/public/images
|
||||||
|
subPath: images
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
memory: "128Mi"
|
||||||
|
cpu: "100m"
|
||||||
|
limits:
|
||||||
|
memory: "512Mi"
|
||||||
|
cpu: "500m"
|
||||||
volumes:
|
volumes:
|
||||||
- name: homepage-config
|
- name: homepage-config
|
||||||
persistentVolumeClaim:
|
persistentVolumeClaim:
|
||||||
claimName: homepage-config
|
claimName: homepage-config
|
||||||
- emptyDir: {}
|
- name: logs
|
||||||
name: logs
|
emptyDir: {}
|
||||||
status:
|
|
||||||
availableReplicas: 1
|
|
||||||
conditions:
|
|
||||||
- lastTransitionTime: '2026-05-19T01:51:47Z'
|
|
||||||
lastUpdateTime: '2026-08-17T09:07:50Z'
|
|
||||||
message: ReplicaSet "homepage-7b47bf67fb" has successfully progressed.
|
|
||||||
reason: NewReplicaSetAvailable
|
|
||||||
status: 'True'
|
|
||||||
type: Progressing
|
|
||||||
- lastTransitionTime: '2026-08-28T06:04:23Z'
|
|
||||||
lastUpdateTime: '2026-08-28T06:04:23Z'
|
|
||||||
message: Deployment has minimum availability.
|
|
||||||
reason: MinimumReplicasAvailable
|
|
||||||
status: 'True'
|
|
||||||
type: Available
|
|
||||||
observedGeneration: 96
|
|
||||||
readyReplicas: 1
|
|
||||||
replicas: 1
|
|
||||||
terminatingReplicas: 0
|
|
||||||
updatedReplicas: 1
|
|
||||||
---
|
|
||||||
apiVersion: v1
|
|
||||||
kind: Service
|
|
||||||
metadata:
|
|
||||||
labels:
|
|
||||||
app.kubernetes.io/name: homepage
|
|
||||||
name: homepage
|
|
||||||
namespace: default
|
|
||||||
spec:
|
|
||||||
internalTrafficPolicy: Cluster
|
|
||||||
ipFamilies:
|
|
||||||
- IPv4
|
|
||||||
ipFamilyPolicy: SingleStack
|
|
||||||
ports:
|
|
||||||
- name: http
|
|
||||||
port: 3000
|
|
||||||
protocol: TCP
|
|
||||||
targetPort: http
|
|
||||||
selector:
|
|
||||||
app.kubernetes.io/name: homepage
|
|
||||||
sessionAffinity: None
|
|
||||||
type: ClusterIP
|
|
||||||
status:
|
|
||||||
loadBalancer: {}
|
|
||||||
---
|
|
||||||
apiVersion: networking.k8s.io/v1
|
|
||||||
kind: Ingress
|
|
||||||
metadata:
|
|
||||||
labels:
|
|
||||||
app.kubernetes.io/name: homepage
|
|
||||||
name: homepage
|
|
||||||
namespace: default
|
|
||||||
spec:
|
|
||||||
ingressClassName: nginx
|
|
||||||
rules:
|
|
||||||
- host: homepage.haven
|
|
||||||
http:
|
|
||||||
paths:
|
|
||||||
- backend:
|
|
||||||
service:
|
|
||||||
name: homepage
|
|
||||||
port:
|
|
||||||
number: 3000
|
|
||||||
path: /
|
|
||||||
pathType: Prefix
|
|
||||||
status:
|
|
||||||
loadBalancer:
|
|
||||||
ingress:
|
|
||||||
- ip: 192.168.20.204
|
|
||||||
---
|
---
|
||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
kind: PersistentVolumeClaim
|
kind: PersistentVolumeClaim
|
||||||
metadata:
|
metadata:
|
||||||
name: homepage-config
|
name: homepage-config
|
||||||
namespace: default
|
namespace: default
|
||||||
|
annotations:
|
||||||
|
nfs.io/storage-path: "homepage-config"
|
||||||
spec:
|
spec:
|
||||||
|
storageClassName: "nfs-client"
|
||||||
accessModes:
|
accessModes:
|
||||||
- ReadWriteMany
|
- ReadWriteMany
|
||||||
resources:
|
resources:
|
||||||
requests:
|
requests:
|
||||||
storage: 1Gi
|
storage: 1Gi
|
||||||
storageClassName: nfs-client
|
|
||||||
volumeMode: Filesystem
|
|
||||||
status:
|
|
||||||
accessModes:
|
|
||||||
- ReadWriteMany
|
|
||||||
capacity:
|
|
||||||
storage: 1Gi
|
|
||||||
phase: Bound
|
|
||||||
---
|
---
|
||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
data:
|
kind: Service
|
||||||
bookmarks.yaml: "- Developer:\n - Github:\n - abbr: GH\n href:\
|
|
||||||
\ https://github.com/\n"
|
|
||||||
custom.css: ''
|
|
||||||
custom.js: ''
|
|
||||||
docker.yaml: ''
|
|
||||||
kubernetes.yaml: 'mode: cluster
|
|
||||||
|
|
||||||
'
|
|
||||||
services.yaml: "- Essentials:\n - AdGuard Home:\n href: http://adguard.haven/\n\
|
|
||||||
\ icon: adguard-home\n widget:\n type: adguard\n \
|
|
||||||
\ url: http://adguard.haven/\n username: ivanch\n password:\
|
|
||||||
\ ESVEPnull\n - AdGuard Home 2:\n href: http://adguard2.haven/\n \
|
|
||||||
\ icon: adguard-home\n widget:\n type: adguard\n \
|
|
||||||
\ url: http://adguard2.haven/\n username: ivanch\n password:\
|
|
||||||
\ ESVEPnull\n - Home Assistant:\n href: http://homeassistant.haven/\n\
|
|
||||||
\ - Traefik:\n href: http://traefik.haven/\n - Dockge:\n href:\
|
|
||||||
\ http://dockge.haven/\n - Proxmox:\n href: https://proxmox.haven:8006/\n\
|
|
||||||
\ widget:\n type: proxmox\n url: https://proxmox.haven:8006/\n\
|
|
||||||
\ token: homepage@pam!token\n secret: 7cadfc2d-560a-4bb4-8d5f-a29f394bc9a0\n\
|
|
||||||
\n- Media:\n - Jellyfin:\n href: http://tv.haven/\n icon: jellyfin.png\n\
|
|
||||||
\ widget:\n type: jellyfin\n url: http://tv.haven/\n\
|
|
||||||
\ key: c933070d9c8341bf8c64e7a792aaa6b9\n enableBlocks: true\n\
|
|
||||||
\ enableNowPlaying: true\n - Sonarr:\n href: http://sonarr.haven/\n\
|
|
||||||
\ - Radarr:\n href: http://radarr.haven/\n - Prowlarr:\n href:\
|
|
||||||
\ http://prowlarr.haven/\n\n- Storage:\n - Transmission:\n href: http://transmission.haven/\n\
|
|
||||||
\ - qBitTorrent:\n href: http://qbittorrent.haven/\n - OpenMediaVault:\n\
|
|
||||||
\ href: http://omv.haven/\n - ArchiveBox:\n href: http://archive.haven/\n\
|
|
||||||
\ - FileBrowser:\n href: http://files.haven/\n - Paperless:\n \
|
|
||||||
\ href: http://paperless.haven/\n\n- Other:\n - Uptime Kuma:\n href:\
|
|
||||||
\ http://uptimekuma.haven/\n - WireGuard:\n href: http://vpn.haven/\n\
|
|
||||||
\ - Beszel:\n href: http://beszel.haven/\n\n- Zephyr:\n - Gitea:\n\
|
|
||||||
\ href: http://gitea.ivanch.me/\n - Portainer:\n href: http://portainer.ivanch.me/\n\
|
|
||||||
\ - Nginx Proxy Manager:\n href: http://manager.ivanch.me/\n - Homepage:\n\
|
|
||||||
\ href: http://ivanch.me/\n"
|
|
||||||
settings.yaml: ''
|
|
||||||
widgets.yaml: "- kubernetes:\n cluster:\n show: true\n cpu: true\n\
|
|
||||||
\ memory: true\n # network: true\n showLabel: true\n label:\
|
|
||||||
\ \"Haven\"\n nodes:\n show: true\n cpu: true\n memory: true\n\
|
|
||||||
\ showLabel: true\n- resources:\n backend: resources\n expanded: true\n\
|
|
||||||
\ cpu: true\n memory: true\n network: default\n- search:\n provider:\
|
|
||||||
\ duckduckgo\n target: _blank\n"
|
|
||||||
kind: ConfigMap
|
|
||||||
metadata:
|
metadata:
|
||||||
labels:
|
|
||||||
app.kubernetes.io/name: homepage
|
|
||||||
name: homepage
|
name: homepage
|
||||||
namespace: default
|
namespace: default
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: homepage
|
||||||
|
spec:
|
||||||
|
type: ClusterIP
|
||||||
|
ports:
|
||||||
|
- port: 3000
|
||||||
|
targetPort: http
|
||||||
|
protocol: TCP
|
||||||
|
name: http
|
||||||
|
selector:
|
||||||
|
app.kubernetes.io/name: homepage
|
||||||
|
---
|
||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
name: homepage
|
||||||
|
namespace: default
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: homepage
|
||||||
|
spec:
|
||||||
|
ingressClassName: nginx
|
||||||
|
rules:
|
||||||
|
- host: "homepage.haven"
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- path: "/"
|
||||||
|
pathType: Prefix
|
||||||
|
backend:
|
||||||
|
service:
|
||||||
|
name: homepage
|
||||||
|
port:
|
||||||
|
number: 3000
|
||||||
|
|||||||
+33
-72
@@ -1,3 +1,4 @@
|
|||||||
|
---
|
||||||
apiVersion: apps/v1
|
apiVersion: apps/v1
|
||||||
kind: Deployment
|
kind: Deployment
|
||||||
metadata:
|
metadata:
|
||||||
@@ -8,58 +9,30 @@ spec:
|
|||||||
selector:
|
selector:
|
||||||
matchLabels:
|
matchLabels:
|
||||||
app: it-tools
|
app: it-tools
|
||||||
strategy:
|
|
||||||
type: Recreate
|
|
||||||
template:
|
template:
|
||||||
metadata:
|
metadata:
|
||||||
labels:
|
labels:
|
||||||
app: it-tools
|
app: it-tools
|
||||||
spec:
|
spec:
|
||||||
containers:
|
containers:
|
||||||
- image: corentinth/it-tools:latest
|
- name: it-tools
|
||||||
imagePullPolicy: Always
|
image: corentinth/it-tools:latest
|
||||||
name: it-tools
|
imagePullPolicy: Always
|
||||||
ports:
|
ports:
|
||||||
- containerPort: 80
|
- containerPort: 80
|
||||||
protocol: TCP
|
readinessProbe:
|
||||||
readinessProbe:
|
httpGet:
|
||||||
failureThreshold: 3
|
path: /
|
||||||
httpGet:
|
port: 80
|
||||||
path: /
|
initialDelaySeconds: 5
|
||||||
port: 80
|
periodSeconds: 10
|
||||||
scheme: HTTP
|
resources:
|
||||||
initialDelaySeconds: 5
|
requests:
|
||||||
periodSeconds: 10
|
memory: "64Mi"
|
||||||
successThreshold: 1
|
cpu: "50m"
|
||||||
timeoutSeconds: 1
|
limits:
|
||||||
resources: {}
|
memory: "128Mi"
|
||||||
terminationMessagePath: /dev/termination-log
|
cpu: "200m"
|
||||||
terminationMessagePolicy: File
|
|
||||||
dnsPolicy: ClusterFirst
|
|
||||||
restartPolicy: Always
|
|
||||||
schedulerName: default-scheduler
|
|
||||||
securityContext: {}
|
|
||||||
terminationGracePeriodSeconds: 30
|
|
||||||
status:
|
|
||||||
availableReplicas: 1
|
|
||||||
conditions:
|
|
||||||
- lastTransitionTime: '2026-05-19T01:51:47Z'
|
|
||||||
lastUpdateTime: '2026-07-22T10:14:45Z'
|
|
||||||
message: ReplicaSet "it-tools-6fc797dd48" has successfully progressed.
|
|
||||||
reason: NewReplicaSetAvailable
|
|
||||||
status: 'True'
|
|
||||||
type: Progressing
|
|
||||||
- lastTransitionTime: '2026-08-28T06:04:26Z'
|
|
||||||
lastUpdateTime: '2026-08-28T06:04:26Z'
|
|
||||||
message: Deployment has minimum availability.
|
|
||||||
reason: MinimumReplicasAvailable
|
|
||||||
status: 'True'
|
|
||||||
type: Available
|
|
||||||
observedGeneration: 93
|
|
||||||
readyReplicas: 1
|
|
||||||
replicas: 1
|
|
||||||
terminatingReplicas: 0
|
|
||||||
updatedReplicas: 1
|
|
||||||
---
|
---
|
||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
kind: Service
|
kind: Service
|
||||||
@@ -67,20 +40,12 @@ metadata:
|
|||||||
name: it-tools-svc
|
name: it-tools-svc
|
||||||
namespace: default
|
namespace: default
|
||||||
spec:
|
spec:
|
||||||
internalTrafficPolicy: Cluster
|
|
||||||
ipFamilies:
|
|
||||||
- IPv4
|
|
||||||
ipFamilyPolicy: SingleStack
|
|
||||||
ports:
|
|
||||||
- port: 80
|
|
||||||
protocol: TCP
|
|
||||||
targetPort: 80
|
|
||||||
selector:
|
selector:
|
||||||
app: it-tools
|
app: it-tools
|
||||||
sessionAffinity: None
|
ports:
|
||||||
type: ClusterIP
|
- protocol: TCP
|
||||||
status:
|
port: 80
|
||||||
loadBalancer: {}
|
targetPort: 80
|
||||||
---
|
---
|
||||||
apiVersion: networking.k8s.io/v1
|
apiVersion: networking.k8s.io/v1
|
||||||
kind: Ingress
|
kind: Ingress
|
||||||
@@ -90,17 +55,13 @@ metadata:
|
|||||||
spec:
|
spec:
|
||||||
ingressClassName: nginx
|
ingressClassName: nginx
|
||||||
rules:
|
rules:
|
||||||
- host: tools.haven
|
- host: "tools.haven"
|
||||||
http:
|
http:
|
||||||
paths:
|
paths:
|
||||||
- backend:
|
- path: /
|
||||||
service:
|
pathType: Prefix
|
||||||
name: it-tools-svc
|
backend:
|
||||||
port:
|
service:
|
||||||
number: 80
|
name: it-tools-svc
|
||||||
path: /
|
port:
|
||||||
pathType: Prefix
|
number: 80
|
||||||
status:
|
|
||||||
loadBalancer:
|
|
||||||
ingress:
|
|
||||||
- ip: 192.168.20.204
|
|
||||||
|
|||||||
+20
-24
@@ -1,34 +1,14 @@
|
|||||||
apiVersion: v1
|
|
||||||
kind: PersistentVolumeClaim
|
|
||||||
metadata:
|
|
||||||
name: notepad-data
|
|
||||||
namespace: default
|
|
||||||
annotations:
|
|
||||||
nfs.io/storage-path: notepad-data
|
|
||||||
spec:
|
|
||||||
accessModes:
|
|
||||||
- ReadWriteOnce
|
|
||||||
resources:
|
|
||||||
requests:
|
|
||||||
storage: 1Gi
|
|
||||||
storageClassName: nfs-client
|
|
||||||
---
|
---
|
||||||
apiVersion: apps/v1
|
apiVersion: apps/v1
|
||||||
kind: Deployment
|
kind: Deployment
|
||||||
metadata:
|
metadata:
|
||||||
name: notepad
|
name: notepad
|
||||||
namespace: default
|
namespace: default
|
||||||
labels:
|
|
||||||
app: notepad
|
|
||||||
spec:
|
spec:
|
||||||
replicas: 1
|
replicas: 1
|
||||||
selector:
|
selector:
|
||||||
matchLabels:
|
matchLabels:
|
||||||
app: notepad
|
app: notepad
|
||||||
# RWO PVC + single replica: Recreate avoids the two-ReplicaSet PVC fight
|
|
||||||
# on rollout (see homelab-deploy skill: single-writer state).
|
|
||||||
strategy:
|
|
||||||
type: Recreate
|
|
||||||
template:
|
template:
|
||||||
metadata:
|
metadata:
|
||||||
labels:
|
labels:
|
||||||
@@ -41,7 +21,10 @@ spec:
|
|||||||
command:
|
command:
|
||||||
- sh
|
- sh
|
||||||
- -c
|
- -c
|
||||||
- mkdir -p /var/www/html/_tmp && cp -n /var/www/html/notes.htaccess /var/www/html/_tmp/.htaccess 2>/dev/null; exec docker-php-entrypoint apache2-foreground
|
- >-
|
||||||
|
mkdir -p /var/www/html/_tmp &&
|
||||||
|
cp -n /var/www/html/notes.htaccess /var/www/html/_tmp/.htaccess 2>/dev/null;
|
||||||
|
exec docker-php-entrypoint apache2-foreground
|
||||||
ports:
|
ports:
|
||||||
- containerPort: 80
|
- containerPort: 80
|
||||||
resources:
|
resources:
|
||||||
@@ -58,6 +41,7 @@ spec:
|
|||||||
- name: notepad-data
|
- name: notepad-data
|
||||||
persistentVolumeClaim:
|
persistentVolumeClaim:
|
||||||
claimName: notepad-data
|
claimName: notepad-data
|
||||||
|
|
||||||
---
|
---
|
||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
kind: Service
|
kind: Service
|
||||||
@@ -72,6 +56,21 @@ spec:
|
|||||||
- port: 80
|
- port: 80
|
||||||
targetPort: 80
|
targetPort: 80
|
||||||
---
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
name: notepad-data
|
||||||
|
namespace: default
|
||||||
|
annotations:
|
||||||
|
nfs.io/storage-path: "notepad-data"
|
||||||
|
spec:
|
||||||
|
storageClassName: "nfs-client"
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 1Gi
|
||||||
|
---
|
||||||
apiVersion: networking.k8s.io/v1
|
apiVersion: networking.k8s.io/v1
|
||||||
kind: Ingress
|
kind: Ingress
|
||||||
metadata:
|
metadata:
|
||||||
@@ -90,6 +89,3 @@ spec:
|
|||||||
name: notepad
|
name: notepad
|
||||||
port:
|
port:
|
||||||
number: 80
|
number: 80
|
||||||
# NOTE: the Argo Application manifest for notepad lives in apps/root/notepad.yaml
|
|
||||||
# (watched by the root app-of-apps). Do not add Application objects to this
|
|
||||||
# directory — this path is what the Application itself watches.
|
|
||||||
|
|||||||
+70
-82
@@ -8,8 +8,6 @@ spec:
|
|||||||
selector:
|
selector:
|
||||||
matchLabels:
|
matchLabels:
|
||||||
app: openwebui
|
app: openwebui
|
||||||
strategy:
|
|
||||||
type: Recreate
|
|
||||||
template:
|
template:
|
||||||
metadata:
|
metadata:
|
||||||
labels:
|
labels:
|
||||||
@@ -18,103 +16,93 @@ spec:
|
|||||||
affinity:
|
affinity:
|
||||||
nodeAffinity:
|
nodeAffinity:
|
||||||
preferredDuringSchedulingIgnoredDuringExecution:
|
preferredDuringSchedulingIgnoredDuringExecution:
|
||||||
- preference:
|
- weight: 100
|
||||||
matchExpressions:
|
preference:
|
||||||
- key: kubernetes.io/hostname
|
matchExpressions:
|
||||||
operator: In
|
- key: kubernetes.io/hostname
|
||||||
values:
|
operator: In
|
||||||
- iris
|
values:
|
||||||
weight: 100
|
- iris
|
||||||
containers:
|
containers:
|
||||||
- env:
|
- name: openwebui
|
||||||
- name: PUID
|
image: ghcr.io/open-webui/open-webui:main-slim
|
||||||
value: '1000'
|
imagePullPolicy: Always
|
||||||
- name: PGID
|
ports:
|
||||||
value: '1000'
|
- containerPort: 8080
|
||||||
- name: TZ
|
env:
|
||||||
value: America/Sao_Paulo
|
- name: PUID
|
||||||
- name: DATABASE_URL
|
value: "1000"
|
||||||
valueFrom:
|
- name: PGID
|
||||||
secretKeyRef:
|
value: "1000"
|
||||||
key: DATABASE_URL
|
- name: TZ
|
||||||
name: openwebui-secret
|
value: "America/Sao_Paulo"
|
||||||
- name: PLAYWRIGHT_WS_URL
|
- name: DATABASE_URL
|
||||||
value: ws://browserless.default.svc.cluster.local:3000
|
valueFrom:
|
||||||
image: ghcr.io/open-webui/open-webui:main-slim
|
secretKeyRef:
|
||||||
imagePullPolicy: Always
|
name: openwebui-secret
|
||||||
name: openwebui
|
key: DATABASE_URL
|
||||||
ports:
|
resources:
|
||||||
- containerPort: 8080
|
requests:
|
||||||
protocol: TCP
|
cpu: "250m"
|
||||||
resources:
|
memory: "512Mi"
|
||||||
limits:
|
limits:
|
||||||
cpu: '1'
|
cpu: "1000m"
|
||||||
memory: 2Gi
|
memory: "2Gi"
|
||||||
requests:
|
volumeMounts:
|
||||||
cpu: 250m
|
- name: openwebui-data
|
||||||
memory: 512Mi
|
mountPath: /app/backend/data
|
||||||
terminationMessagePath: /dev/termination-log
|
|
||||||
terminationMessagePolicy: File
|
|
||||||
volumeMounts:
|
|
||||||
- mountPath: /app/backend/data
|
|
||||||
name: openwebui-data
|
|
||||||
dnsPolicy: ClusterFirst
|
|
||||||
restartPolicy: Always
|
|
||||||
schedulerName: default-scheduler
|
|
||||||
securityContext: {}
|
|
||||||
terminationGracePeriodSeconds: 30
|
|
||||||
volumes:
|
volumes:
|
||||||
- name: openwebui-data
|
- name: openwebui-data
|
||||||
persistentVolumeClaim:
|
persistentVolumeClaim:
|
||||||
claimName: openwebui-data
|
claimName: openwebui-data
|
||||||
|
---
|
||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
kind: Service
|
kind: Service
|
||||||
metadata:
|
metadata:
|
||||||
name: openwebui
|
name: openwebui
|
||||||
namespace: default
|
namespace: default
|
||||||
spec:
|
spec:
|
||||||
internalTrafficPolicy: Cluster
|
type: ClusterIP
|
||||||
ipFamilies:
|
|
||||||
- IPv4
|
|
||||||
ipFamilyPolicy: SingleStack
|
|
||||||
ports:
|
|
||||||
- port: 8080
|
|
||||||
protocol: TCP
|
|
||||||
targetPort: 8080
|
|
||||||
selector:
|
selector:
|
||||||
app: openwebui
|
app: openwebui
|
||||||
sessionAffinity: None
|
ports:
|
||||||
type: ClusterIP
|
- port: 8080
|
||||||
apiVersion: networking.k8s.io/v1
|
targetPort: 8080
|
||||||
kind: Ingress
|
---
|
||||||
metadata:
|
|
||||||
name: openwebui
|
|
||||||
namespace: default
|
|
||||||
spec:
|
|
||||||
ingressClassName: nginx
|
|
||||||
rules:
|
|
||||||
- host: openwebui.haven
|
|
||||||
http:
|
|
||||||
paths:
|
|
||||||
- backend:
|
|
||||||
service:
|
|
||||||
name: openwebui
|
|
||||||
port:
|
|
||||||
number: 8080
|
|
||||||
path: /
|
|
||||||
pathType: Prefix
|
|
||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
kind: PersistentVolumeClaim
|
kind: PersistentVolumeClaim
|
||||||
metadata:
|
metadata:
|
||||||
name: openwebui-data
|
name: openwebui-data
|
||||||
namespace: default
|
namespace: default
|
||||||
|
annotations:
|
||||||
|
nfs.io/storage-path: "openwebui-data"
|
||||||
spec:
|
spec:
|
||||||
|
storageClassName: "nfs-client"
|
||||||
accessModes:
|
accessModes:
|
||||||
- ReadWriteOnce
|
- ReadWriteOnce
|
||||||
resources:
|
resources:
|
||||||
limits:
|
|
||||||
storage: 10Gi
|
|
||||||
requests:
|
requests:
|
||||||
storage: 5Gi
|
storage: 5Gi
|
||||||
storageClassName: nfs-client
|
limits:
|
||||||
volumeMode: Filesystem
|
storage: 10Gi
|
||||||
|
---
|
||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
name: openwebui
|
||||||
|
namespace: default
|
||||||
|
annotations:
|
||||||
|
nginx.ingress.kubernetes.io/proxy-body-size: "50m"
|
||||||
|
spec:
|
||||||
|
ingressClassName: nginx
|
||||||
|
rules:
|
||||||
|
- host: openwebui.haven
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- path: /
|
||||||
|
pathType: Prefix
|
||||||
|
backend:
|
||||||
|
service:
|
||||||
|
name: openwebui
|
||||||
|
port:
|
||||||
|
number: 8080
|
||||||
|
|||||||
+115
-122
@@ -1,3 +1,5 @@
|
|||||||
|
---
|
||||||
|
# 1) Deployment
|
||||||
apiVersion: apps/v1
|
apiVersion: apps/v1
|
||||||
kind: Deployment
|
kind: Deployment
|
||||||
metadata:
|
metadata:
|
||||||
@@ -8,8 +10,6 @@ spec:
|
|||||||
selector:
|
selector:
|
||||||
matchLabels:
|
matchLabels:
|
||||||
app: paperless
|
app: paperless
|
||||||
strategy:
|
|
||||||
type: Recreate
|
|
||||||
template:
|
template:
|
||||||
metadata:
|
metadata:
|
||||||
labels:
|
labels:
|
||||||
@@ -18,111 +18,119 @@ spec:
|
|||||||
affinity:
|
affinity:
|
||||||
nodeAffinity:
|
nodeAffinity:
|
||||||
preferredDuringSchedulingIgnoredDuringExecution:
|
preferredDuringSchedulingIgnoredDuringExecution:
|
||||||
- preference:
|
- weight: 100
|
||||||
matchExpressions:
|
preference:
|
||||||
- key: kubernetes.io/hostname
|
matchExpressions:
|
||||||
operator: In
|
- key: kubernetes.io/hostname
|
||||||
values:
|
operator: In
|
||||||
- iris
|
values:
|
||||||
weight: 100
|
- iris
|
||||||
containers:
|
containers:
|
||||||
- env:
|
- name: paperless
|
||||||
- name: PUID
|
image: ghcr.io/paperless-ngx/paperless-ngx:latest
|
||||||
value: '1000'
|
imagePullPolicy: Always
|
||||||
- name: PGID
|
env:
|
||||||
value: '1000'
|
- name: PUID
|
||||||
- name: PAPERLESS_URL
|
value: "1000"
|
||||||
value: http://paperless.haven
|
- name: PGID
|
||||||
- name: PAPERLESS_TIME_ZONE
|
value: "1000"
|
||||||
value: America/Sao_Paulo
|
- name: PAPERLESS_URL
|
||||||
- name: PAPERLESS_OCR_LANGUAGE
|
value: "http://paperless.haven"
|
||||||
value: por
|
- name: PAPERLESS_TIME_ZONE
|
||||||
- name: PAPERLESS_OCR_LANGUAGES
|
value: "America/Sao_Paulo"
|
||||||
value: por
|
- name: PAPERLESS_OCR_LANGUAGE
|
||||||
- name: PAPERLESS_OCR_USER_ARGS
|
value: "por"
|
||||||
value: '{"invalidate_digital_signatures": true}'
|
- name: PAPERLESS_OCR_LANGUAGES
|
||||||
- name: PAPERLESS_DBHOST
|
value: "por"
|
||||||
value: postgresql.haven
|
- name: PAPERLESS_OCR_USER_ARGS
|
||||||
- name: PAPERLESS_DBNAME
|
value: '{"invalidate_digital_signatures": true}'
|
||||||
valueFrom:
|
- name: PAPERLESS_DBHOST
|
||||||
secretKeyRef:
|
value: postgresql.haven
|
||||||
key: PAPERLESS_DBNAME
|
- name: PAPERLESS_DBNAME
|
||||||
name: paperless-secret
|
valueFrom:
|
||||||
- name: PAPERLESS_DBUSER
|
secretKeyRef:
|
||||||
valueFrom:
|
name: paperless-secret
|
||||||
secretKeyRef:
|
key: PAPERLESS_DBNAME
|
||||||
key: PAPERLESS_DBUSER
|
- name: PAPERLESS_DBUSER
|
||||||
name: paperless-secret
|
valueFrom:
|
||||||
- name: PAPERLESS_DBPASSWORD
|
secretKeyRef:
|
||||||
valueFrom:
|
name: paperless-secret
|
||||||
secretKeyRef:
|
key: PAPERLESS_DBUSER
|
||||||
key: PAPERLESS_DBPASSWORD
|
- name: PAPERLESS_DBPASSWORD
|
||||||
name: paperless-secret
|
valueFrom:
|
||||||
- name: PAPERLESS_REDIS
|
secretKeyRef:
|
||||||
value: redis://redis.haven:6379
|
name: paperless-secret
|
||||||
- name: PAPERLESS_PORT
|
key: PAPERLESS_DBPASSWORD
|
||||||
value: '8000'
|
- name: PAPERLESS_REDIS
|
||||||
- name: PAPERLESS_SECRET_KEY
|
value: "redis://redis.haven:6379"
|
||||||
valueFrom:
|
- name: PAPERLESS_PORT
|
||||||
secretKeyRef:
|
value: "8000"
|
||||||
key: PAPERLESS_SECRET_KEY
|
- name: PAPERLESS_SECRET_KEY
|
||||||
name: paperless-secret
|
valueFrom:
|
||||||
image: ghcr.io/paperless-ngx/paperless-ngx:latest
|
secretKeyRef:
|
||||||
imagePullPolicy: Always
|
name: paperless-secret
|
||||||
name: paperless
|
key: PAPERLESS_SECRET_KEY
|
||||||
ports:
|
ports:
|
||||||
- containerPort: 8000
|
- containerPort: 8000
|
||||||
name: paperless-port
|
name: paperless-port
|
||||||
protocol: TCP
|
resources:
|
||||||
resources:
|
requests:
|
||||||
limits:
|
cpu: "100m"
|
||||||
cpu: '4'
|
memory: "256Mi"
|
||||||
memory: 1Gi
|
limits:
|
||||||
requests:
|
cpu: "4000m"
|
||||||
cpu: 100m
|
memory: "1Gi"
|
||||||
memory: 256Mi
|
volumeMounts:
|
||||||
terminationMessagePath: /dev/termination-log
|
- name: paperless-data
|
||||||
terminationMessagePolicy: File
|
subPath: data
|
||||||
volumeMounts:
|
mountPath: /usr/src/paperless/data
|
||||||
- mountPath: /usr/src/paperless/data
|
- name: paperless-data
|
||||||
name: paperless-data
|
subPath: media
|
||||||
subPath: data
|
mountPath: /usr/src/paperless/media
|
||||||
- mountPath: /usr/src/paperless/media
|
- name: paperless-data
|
||||||
name: paperless-data
|
subPath: export
|
||||||
subPath: media
|
mountPath: /usr/src/paperless/export
|
||||||
- mountPath: /usr/src/paperless/export
|
- name: paperless-data
|
||||||
name: paperless-data
|
subPath: consume
|
||||||
subPath: export
|
mountPath: /usr/src/paperless/consume
|
||||||
- mountPath: /usr/src/paperless/consume
|
|
||||||
name: paperless-data
|
|
||||||
subPath: consume
|
|
||||||
dnsPolicy: ClusterFirst
|
|
||||||
restartPolicy: Always
|
|
||||||
schedulerName: default-scheduler
|
|
||||||
securityContext: {}
|
|
||||||
terminationGracePeriodSeconds: 30
|
|
||||||
volumes:
|
volumes:
|
||||||
- name: paperless-data
|
- name: paperless-data
|
||||||
persistentVolumeClaim:
|
persistentVolumeClaim:
|
||||||
claimName: paperless-data
|
claimName: paperless-data
|
||||||
|
---
|
||||||
|
# 2) Service
|
||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
kind: Service
|
kind: Service
|
||||||
metadata:
|
metadata:
|
||||||
name: paperless
|
name: paperless
|
||||||
namespace: default
|
namespace: default
|
||||||
spec:
|
spec:
|
||||||
internalTrafficPolicy: Cluster
|
type: ClusterIP
|
||||||
ipFamilies:
|
|
||||||
- IPv4
|
|
||||||
ipFamilyPolicy: SingleStack
|
|
||||||
ports:
|
|
||||||
- port: 8000
|
|
||||||
protocol: TCP
|
|
||||||
targetPort: paperless-port
|
|
||||||
selector:
|
selector:
|
||||||
app: paperless
|
app: paperless
|
||||||
sessionAffinity: None
|
ports:
|
||||||
type: ClusterIP
|
- port: 8000
|
||||||
|
targetPort: paperless-port
|
||||||
|
---
|
||||||
|
# 3) PersistentVolumeClaim
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
name: paperless-data
|
||||||
|
namespace: default
|
||||||
|
annotations:
|
||||||
|
nfs.io/storage-path: "paperless-data"
|
||||||
|
spec:
|
||||||
|
storageClassName: "nfs-client"
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteMany
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 5Gi
|
||||||
|
limits:
|
||||||
|
storage: 15Gi
|
||||||
|
---
|
||||||
|
# 4) Ingress
|
||||||
apiVersion: networking.k8s.io/v1
|
apiVersion: networking.k8s.io/v1
|
||||||
kind: Ingress
|
kind: Ingress
|
||||||
metadata:
|
metadata:
|
||||||
@@ -131,28 +139,13 @@ metadata:
|
|||||||
spec:
|
spec:
|
||||||
ingressClassName: nginx
|
ingressClassName: nginx
|
||||||
rules:
|
rules:
|
||||||
- host: paperless.haven
|
- host: paperless.haven
|
||||||
http:
|
http:
|
||||||
paths:
|
paths:
|
||||||
- backend:
|
- path: /
|
||||||
service:
|
pathType: Prefix
|
||||||
name: paperless
|
backend:
|
||||||
port:
|
service:
|
||||||
number: 8000
|
name: paperless
|
||||||
path: /
|
port:
|
||||||
pathType: Prefix
|
number: 8000
|
||||||
apiVersion: v1
|
|
||||||
kind: PersistentVolumeClaim
|
|
||||||
metadata:
|
|
||||||
name: paperless-data
|
|
||||||
namespace: default
|
|
||||||
spec:
|
|
||||||
accessModes:
|
|
||||||
- ReadWriteMany
|
|
||||||
resources:
|
|
||||||
limits:
|
|
||||||
storage: 15Gi
|
|
||||||
requests:
|
|
||||||
storage: 5Gi
|
|
||||||
storageClassName: nfs-client
|
|
||||||
volumeMode: Filesystem
|
|
||||||
|
|||||||
+89
-133
@@ -1,3 +1,5 @@
|
|||||||
|
---
|
||||||
|
# 1) Deployment
|
||||||
apiVersion: apps/v1
|
apiVersion: apps/v1
|
||||||
kind: Deployment
|
kind: Deployment
|
||||||
metadata:
|
metadata:
|
||||||
@@ -8,8 +10,6 @@ spec:
|
|||||||
selector:
|
selector:
|
||||||
matchLabels:
|
matchLabels:
|
||||||
app: qbittorrent
|
app: qbittorrent
|
||||||
strategy:
|
|
||||||
type: Recreate
|
|
||||||
template:
|
template:
|
||||||
metadata:
|
metadata:
|
||||||
labels:
|
labels:
|
||||||
@@ -18,159 +18,115 @@ spec:
|
|||||||
affinity:
|
affinity:
|
||||||
nodeAffinity:
|
nodeAffinity:
|
||||||
preferredDuringSchedulingIgnoredDuringExecution:
|
preferredDuringSchedulingIgnoredDuringExecution:
|
||||||
- preference:
|
- weight: 100
|
||||||
|
preference:
|
||||||
matchExpressions:
|
matchExpressions:
|
||||||
- key: kubernetes.io/hostname
|
- key: kubernetes.io/hostname
|
||||||
operator: In
|
operator: In
|
||||||
values:
|
values:
|
||||||
- iris
|
- iris
|
||||||
weight: 100
|
|
||||||
containers:
|
containers:
|
||||||
- env:
|
- name: qbittorrent
|
||||||
- name: PUID
|
image: lscr.io/linuxserver/qbittorrent:5.0.4
|
||||||
value: '1000'
|
imagePullPolicy: Always
|
||||||
- name: PGID
|
resources:
|
||||||
value: '1000'
|
requests:
|
||||||
- name: TZ
|
cpu: 200m
|
||||||
value: Etc/UTC
|
memory: 256Mi
|
||||||
- name: WEBUI_PORT
|
limits:
|
||||||
value: '4300'
|
cpu: 1000m
|
||||||
- name: TORRENTING_PORT
|
memory: 512Mi
|
||||||
value: '6881'
|
ports:
|
||||||
image: lscr.io/linuxserver/qbittorrent:5.0.4
|
- containerPort: 4300
|
||||||
imagePullPolicy: Always
|
name: webui-port
|
||||||
name: qbittorrent
|
- containerPort: 6881
|
||||||
ports:
|
name: qbit-tcp
|
||||||
- containerPort: 4300
|
protocol: TCP
|
||||||
name: webui-port
|
- containerPort: 6881
|
||||||
protocol: TCP
|
name: qbit-udp
|
||||||
- containerPort: 6881
|
protocol: UDP
|
||||||
name: qbit-tcp
|
env:
|
||||||
protocol: TCP
|
- name: PUID
|
||||||
- containerPort: 6881
|
value: "1000"
|
||||||
name: qbit-udp
|
- name: PGID
|
||||||
protocol: UDP
|
value: "1000"
|
||||||
resources:
|
- name: TZ
|
||||||
limits:
|
value: "Etc/UTC"
|
||||||
cpu: '1'
|
- name: WEBUI_PORT
|
||||||
memory: 512Mi
|
value: "4300"
|
||||||
requests:
|
- name: TORRENTING_PORT
|
||||||
cpu: 200m
|
value: "6881"
|
||||||
memory: 256Mi
|
volumeMounts:
|
||||||
terminationMessagePath: /dev/termination-log
|
- name: qbittorrent-config
|
||||||
terminationMessagePolicy: File
|
mountPath: /config
|
||||||
volumeMounts:
|
- name: nas-storage
|
||||||
- mountPath: /config
|
mountPath: /nas
|
||||||
name: qbittorrent-config
|
|
||||||
- mountPath: /nas
|
|
||||||
name: nas-storage
|
|
||||||
dnsPolicy: ClusterFirst
|
|
||||||
restartPolicy: Always
|
|
||||||
schedulerName: default-scheduler
|
|
||||||
securityContext: {}
|
|
||||||
terminationGracePeriodSeconds: 30
|
|
||||||
volumes:
|
volumes:
|
||||||
- name: qbittorrent-config
|
- name: qbittorrent-config
|
||||||
persistentVolumeClaim:
|
persistentVolumeClaim:
|
||||||
claimName: qbittorrent-config
|
claimName: qbittorrent-config
|
||||||
- name: nas-storage
|
- name: nas-storage
|
||||||
nfs:
|
nfs:
|
||||||
path: /export/Storage
|
server: 192.168.15.99
|
||||||
server: 192.168.15.99
|
path: /export/Storage
|
||||||
status:
|
|
||||||
availableReplicas: 1
|
|
||||||
conditions:
|
|
||||||
- lastTransitionTime: '2026-05-19T01:51:48Z'
|
|
||||||
lastUpdateTime: '2026-07-22T10:14:39Z'
|
|
||||||
message: ReplicaSet "qbittorrent-56dbf5f6c" has successfully progressed.
|
|
||||||
reason: NewReplicaSetAvailable
|
|
||||||
status: 'True'
|
|
||||||
type: Progressing
|
|
||||||
- lastTransitionTime: '2026-08-28T06:04:17Z'
|
|
||||||
lastUpdateTime: '2026-08-28T06:04:17Z'
|
|
||||||
message: Deployment has minimum availability.
|
|
||||||
reason: MinimumReplicasAvailable
|
|
||||||
status: 'True'
|
|
||||||
type: Available
|
|
||||||
observedGeneration: 100
|
|
||||||
readyReplicas: 1
|
|
||||||
replicas: 1
|
|
||||||
terminatingReplicas: 0
|
|
||||||
updatedReplicas: 1
|
|
||||||
---
|
---
|
||||||
|
# PVC
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
name: qbittorrent-config
|
||||||
|
namespace: default
|
||||||
|
annotations:
|
||||||
|
nfs.io/storage-path: "qbittorrent-config"
|
||||||
|
spec:
|
||||||
|
storageClassName: "nfs-client"
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 1Gi
|
||||||
|
---
|
||||||
|
# 2) Service
|
||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
kind: Service
|
kind: Service
|
||||||
metadata:
|
metadata:
|
||||||
name: qbittorrent
|
name: qbittorrent
|
||||||
namespace: default
|
namespace: default
|
||||||
spec:
|
spec:
|
||||||
externalTrafficPolicy: Cluster
|
type: NodePort
|
||||||
internalTrafficPolicy: Cluster
|
|
||||||
ipFamilies:
|
|
||||||
- IPv4
|
|
||||||
ipFamilyPolicy: SingleStack
|
|
||||||
ports:
|
|
||||||
- name: webui
|
|
||||||
nodePort: 30948
|
|
||||||
port: 4300
|
|
||||||
protocol: TCP
|
|
||||||
targetPort: webui-port
|
|
||||||
- name: torrent-tcp
|
|
||||||
nodePort: 30183
|
|
||||||
port: 6881
|
|
||||||
protocol: TCP
|
|
||||||
targetPort: qbit-tcp
|
|
||||||
- name: torrent-udp
|
|
||||||
nodePort: 30183
|
|
||||||
port: 6881
|
|
||||||
protocol: UDP
|
|
||||||
targetPort: qbit-udp
|
|
||||||
selector:
|
selector:
|
||||||
app: qbittorrent
|
app: qbittorrent
|
||||||
sessionAffinity: None
|
ports:
|
||||||
type: NodePort
|
- port: 4300
|
||||||
status:
|
targetPort: webui-port
|
||||||
loadBalancer: {}
|
name: webui
|
||||||
|
- port: 6881
|
||||||
|
targetPort: qbit-tcp
|
||||||
|
name: torrent-tcp
|
||||||
|
protocol: TCP
|
||||||
|
- port: 6881
|
||||||
|
targetPort: qbit-udp
|
||||||
|
name: torrent-udp
|
||||||
|
protocol: UDP
|
||||||
---
|
---
|
||||||
|
# 4) Ingress (Traefik)
|
||||||
apiVersion: networking.k8s.io/v1
|
apiVersion: networking.k8s.io/v1
|
||||||
kind: Ingress
|
kind: Ingress
|
||||||
metadata:
|
metadata:
|
||||||
name: qbittorrent
|
name: qbittorrent
|
||||||
namespace: default
|
namespace: default
|
||||||
|
annotations:
|
||||||
|
traefik.ingress.kubernetes.io/router.entrypoints: web
|
||||||
spec:
|
spec:
|
||||||
ingressClassName: nginx
|
ingressClassName: nginx
|
||||||
rules:
|
rules:
|
||||||
- host: qbittorrent.haven
|
- host: qbittorrent.haven
|
||||||
http:
|
http:
|
||||||
paths:
|
paths:
|
||||||
- backend:
|
- path: /
|
||||||
service:
|
pathType: Prefix
|
||||||
name: qbittorrent
|
backend:
|
||||||
port:
|
service:
|
||||||
number: 4300
|
name: qbittorrent
|
||||||
path: /
|
port:
|
||||||
pathType: Prefix
|
number: 4300
|
||||||
status:
|
|
||||||
loadBalancer:
|
|
||||||
ingress:
|
|
||||||
- ip: 192.168.20.204
|
|
||||||
---
|
|
||||||
apiVersion: v1
|
|
||||||
kind: PersistentVolumeClaim
|
|
||||||
metadata:
|
|
||||||
name: qbittorrent-config
|
|
||||||
namespace: default
|
|
||||||
spec:
|
|
||||||
accessModes:
|
|
||||||
- ReadWriteOnce
|
|
||||||
resources:
|
|
||||||
requests:
|
|
||||||
storage: 1Gi
|
|
||||||
storageClassName: nfs-client
|
|
||||||
volumeMode: Filesystem
|
|
||||||
status:
|
|
||||||
accessModes:
|
|
||||||
- ReadWriteOnce
|
|
||||||
capacity:
|
|
||||||
storage: 1Gi
|
|
||||||
phase: Bound
|
|
||||||
+59
-101
@@ -1,3 +1,5 @@
|
|||||||
|
---
|
||||||
|
# 1) Deployment
|
||||||
apiVersion: apps/v1
|
apiVersion: apps/v1
|
||||||
kind: Deployment
|
kind: Deployment
|
||||||
metadata:
|
metadata:
|
||||||
@@ -8,90 +10,70 @@ spec:
|
|||||||
selector:
|
selector:
|
||||||
matchLabels:
|
matchLabels:
|
||||||
app: searxng
|
app: searxng
|
||||||
strategy:
|
|
||||||
type: Recreate
|
|
||||||
template:
|
template:
|
||||||
metadata:
|
metadata:
|
||||||
labels:
|
labels:
|
||||||
app: searxng
|
app: searxng
|
||||||
spec:
|
spec:
|
||||||
containers:
|
|
||||||
- env:
|
|
||||||
- name: PUID
|
|
||||||
value: '1000'
|
|
||||||
- name: PGID
|
|
||||||
value: '1000'
|
|
||||||
image: searxng/searxng:latest
|
|
||||||
imagePullPolicy: Always
|
|
||||||
name: searxng
|
|
||||||
ports:
|
|
||||||
- containerPort: 8080
|
|
||||||
name: searxng-port
|
|
||||||
protocol: TCP
|
|
||||||
resources:
|
|
||||||
limits:
|
|
||||||
cpu: 500m
|
|
||||||
memory: 512Mi
|
|
||||||
requests:
|
|
||||||
cpu: 100m
|
|
||||||
memory: 256Mi
|
|
||||||
terminationMessagePath: /dev/termination-log
|
|
||||||
terminationMessagePolicy: File
|
|
||||||
volumeMounts:
|
|
||||||
- mountPath: /etc/searxng
|
|
||||||
name: searxng-config
|
|
||||||
dnsPolicy: ClusterFirst
|
|
||||||
enableServiceLinks: false
|
enableServiceLinks: false
|
||||||
restartPolicy: Always
|
containers:
|
||||||
schedulerName: default-scheduler
|
- name: searxng
|
||||||
securityContext: {}
|
image: searxng/searxng:latest
|
||||||
terminationGracePeriodSeconds: 30
|
imagePullPolicy: Always
|
||||||
|
env:
|
||||||
|
- name: PUID
|
||||||
|
value: "1000"
|
||||||
|
- name: PGID
|
||||||
|
value: "1000"
|
||||||
|
ports:
|
||||||
|
- containerPort: 8080
|
||||||
|
name: searxng-port
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
cpu: "100m"
|
||||||
|
memory: "256Mi"
|
||||||
|
limits:
|
||||||
|
cpu: "500m"
|
||||||
|
memory: "512Mi"
|
||||||
|
volumeMounts:
|
||||||
|
- name: searxng-config
|
||||||
|
mountPath: /etc/searxng
|
||||||
volumes:
|
volumes:
|
||||||
- name: searxng-config
|
- name: searxng-config
|
||||||
persistentVolumeClaim:
|
persistentVolumeClaim:
|
||||||
claimName: searxng-config
|
claimName: searxng-config
|
||||||
status:
|
|
||||||
availableReplicas: 1
|
|
||||||
conditions:
|
|
||||||
- lastTransitionTime: '2026-05-19T01:51:48Z'
|
|
||||||
lastUpdateTime: '2026-07-22T10:15:23Z'
|
|
||||||
message: ReplicaSet "searxng-d6869bf47" has successfully progressed.
|
|
||||||
reason: NewReplicaSetAvailable
|
|
||||||
status: 'True'
|
|
||||||
type: Progressing
|
|
||||||
- lastTransitionTime: '2026-08-28T06:04:24Z'
|
|
||||||
lastUpdateTime: '2026-08-28T06:04:24Z'
|
|
||||||
message: Deployment has minimum availability.
|
|
||||||
reason: MinimumReplicasAvailable
|
|
||||||
status: 'True'
|
|
||||||
type: Available
|
|
||||||
observedGeneration: 93
|
|
||||||
readyReplicas: 1
|
|
||||||
replicas: 1
|
|
||||||
terminatingReplicas: 0
|
|
||||||
updatedReplicas: 1
|
|
||||||
---
|
---
|
||||||
|
# 2) Service
|
||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
kind: Service
|
kind: Service
|
||||||
metadata:
|
metadata:
|
||||||
name: searxng
|
name: searxng
|
||||||
namespace: default
|
namespace: default
|
||||||
spec:
|
spec:
|
||||||
internalTrafficPolicy: Cluster
|
type: ClusterIP
|
||||||
ipFamilies:
|
|
||||||
- IPv4
|
|
||||||
ipFamilyPolicy: SingleStack
|
|
||||||
ports:
|
|
||||||
- port: 8080
|
|
||||||
protocol: TCP
|
|
||||||
targetPort: searxng-port
|
|
||||||
selector:
|
selector:
|
||||||
app: searxng
|
app: searxng
|
||||||
sessionAffinity: None
|
ports:
|
||||||
type: ClusterIP
|
- port: 8080
|
||||||
status:
|
targetPort: searxng-port
|
||||||
loadBalancer: {}
|
|
||||||
---
|
---
|
||||||
|
# 3) PersistentVolumeClaim
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
name: searxng-config
|
||||||
|
namespace: default
|
||||||
|
annotations:
|
||||||
|
nfs.io/storage-path: "searxng-config"
|
||||||
|
spec:
|
||||||
|
storageClassName: "nfs-client"
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteMany
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 1Gi
|
||||||
|
---
|
||||||
|
# 4) Ingress
|
||||||
apiVersion: networking.k8s.io/v1
|
apiVersion: networking.k8s.io/v1
|
||||||
kind: Ingress
|
kind: Ingress
|
||||||
metadata:
|
metadata:
|
||||||
@@ -100,37 +82,13 @@ metadata:
|
|||||||
spec:
|
spec:
|
||||||
ingressClassName: nginx
|
ingressClassName: nginx
|
||||||
rules:
|
rules:
|
||||||
- host: search.haven
|
- host: search.haven
|
||||||
http:
|
http:
|
||||||
paths:
|
paths:
|
||||||
- backend:
|
- path: /
|
||||||
service:
|
pathType: Prefix
|
||||||
name: searxng
|
backend:
|
||||||
port:
|
service:
|
||||||
number: 8080
|
name: searxng
|
||||||
path: /
|
port:
|
||||||
pathType: Prefix
|
number: 8080
|
||||||
status:
|
|
||||||
loadBalancer:
|
|
||||||
ingress:
|
|
||||||
- ip: 192.168.20.204
|
|
||||||
---
|
|
||||||
apiVersion: v1
|
|
||||||
kind: PersistentVolumeClaim
|
|
||||||
metadata:
|
|
||||||
name: searxng-config
|
|
||||||
namespace: default
|
|
||||||
spec:
|
|
||||||
accessModes:
|
|
||||||
- ReadWriteMany
|
|
||||||
resources:
|
|
||||||
requests:
|
|
||||||
storage: 1Gi
|
|
||||||
storageClassName: nfs-client
|
|
||||||
volumeMode: Filesystem
|
|
||||||
status:
|
|
||||||
accessModes:
|
|
||||||
- ReadWriteMany
|
|
||||||
capacity:
|
|
||||||
storage: 1Gi
|
|
||||||
phase: Bound
|
|
||||||
@@ -1,79 +0,0 @@
|
|||||||
apiVersion: apps/v1
|
|
||||||
kind: Deployment
|
|
||||||
metadata:
|
|
||||||
name: sonic
|
|
||||||
namespace: default
|
|
||||||
spec:
|
|
||||||
replicas: 1
|
|
||||||
selector:
|
|
||||||
matchLabels:
|
|
||||||
app: sonic
|
|
||||||
strategy:
|
|
||||||
type: Recreate
|
|
||||||
template:
|
|
||||||
metadata:
|
|
||||||
labels:
|
|
||||||
app: sonic
|
|
||||||
spec:
|
|
||||||
containers:
|
|
||||||
- env:
|
|
||||||
- name: SEARCH_BACKEND_PASSWORD
|
|
||||||
valueFrom:
|
|
||||||
secretKeyRef:
|
|
||||||
key: password
|
|
||||||
name: password
|
|
||||||
image: archivebox/sonic:latest
|
|
||||||
imagePullPolicy: Always
|
|
||||||
name: sonic
|
|
||||||
ports:
|
|
||||||
- containerPort: 1491
|
|
||||||
protocol: TCP
|
|
||||||
resources: {}
|
|
||||||
terminationMessagePath: /dev/termination-log
|
|
||||||
terminationMessagePolicy: File
|
|
||||||
dnsPolicy: ClusterFirst
|
|
||||||
restartPolicy: Always
|
|
||||||
schedulerName: default-scheduler
|
|
||||||
securityContext: {}
|
|
||||||
terminationGracePeriodSeconds: 30
|
|
||||||
status:
|
|
||||||
availableReplicas: 1
|
|
||||||
conditions:
|
|
||||||
- lastTransitionTime: '2026-05-19T01:51:47Z'
|
|
||||||
lastUpdateTime: '2026-07-22T10:15:06Z'
|
|
||||||
message: ReplicaSet "sonic-b89458d6c" has successfully progressed.
|
|
||||||
reason: NewReplicaSetAvailable
|
|
||||||
status: 'True'
|
|
||||||
type: Progressing
|
|
||||||
- lastTransitionTime: '2026-08-28T06:04:13Z'
|
|
||||||
lastUpdateTime: '2026-08-28T06:04:13Z'
|
|
||||||
message: Deployment has minimum availability.
|
|
||||||
reason: MinimumReplicasAvailable
|
|
||||||
status: 'True'
|
|
||||||
type: Available
|
|
||||||
observedGeneration: 93
|
|
||||||
readyReplicas: 1
|
|
||||||
replicas: 1
|
|
||||||
terminatingReplicas: 0
|
|
||||||
updatedReplicas: 1
|
|
||||||
---
|
|
||||||
apiVersion: v1
|
|
||||||
kind: Service
|
|
||||||
metadata:
|
|
||||||
name: sonic-svc
|
|
||||||
namespace: default
|
|
||||||
spec:
|
|
||||||
internalTrafficPolicy: Cluster
|
|
||||||
ipFamilies:
|
|
||||||
- IPv4
|
|
||||||
ipFamilyPolicy: SingleStack
|
|
||||||
ports:
|
|
||||||
- port: 1491
|
|
||||||
protocol: TCP
|
|
||||||
targetPort: 1491
|
|
||||||
selector:
|
|
||||||
app: sonic
|
|
||||||
sessionAffinity: None
|
|
||||||
type: ClusterIP
|
|
||||||
status:
|
|
||||||
loadBalancer: {}
|
|
||||||
+76
-120
@@ -1,157 +1,113 @@
|
|||||||
|
---
|
||||||
|
# 1) Deployment - Stirling-PDF
|
||||||
apiVersion: apps/v1
|
apiVersion: apps/v1
|
||||||
kind: Deployment
|
kind: Deployment
|
||||||
metadata:
|
metadata:
|
||||||
labels:
|
|
||||||
app: stirlingpdf
|
|
||||||
name: stirlingpdf
|
name: stirlingpdf
|
||||||
namespace: default
|
namespace: default
|
||||||
|
labels:
|
||||||
|
app: stirlingpdf
|
||||||
spec:
|
spec:
|
||||||
replicas: 1
|
replicas: 1
|
||||||
selector:
|
selector:
|
||||||
matchLabels:
|
matchLabels:
|
||||||
app: stirlingpdf
|
app: stirlingpdf
|
||||||
strategy:
|
|
||||||
type: Recreate
|
|
||||||
template:
|
template:
|
||||||
metadata:
|
metadata:
|
||||||
labels:
|
labels:
|
||||||
app: stirlingpdf
|
app: stirlingpdf
|
||||||
spec:
|
spec:
|
||||||
containers:
|
containers:
|
||||||
- env:
|
- name: stirlingpdf
|
||||||
- name: TZ
|
image: stirlingtools/stirling-pdf:latest
|
||||||
value: America/Sao_Paulo
|
imagePullPolicy: Always
|
||||||
- name: DOCKER_ENABLE_SECURITY
|
env:
|
||||||
value: 'false'
|
- name: TZ
|
||||||
- name: SECURITY_ENABLELOGIN
|
value: "America/Sao_Paulo"
|
||||||
value: 'false'
|
- name: DOCKER_ENABLE_SECURITY
|
||||||
image: stirlingtools/stirling-pdf:latest
|
value: "false"
|
||||||
imagePullPolicy: Always
|
- name: SECURITY_ENABLELOGIN
|
||||||
name: stirlingpdf
|
value: "false"
|
||||||
ports:
|
ports:
|
||||||
- containerPort: 8080
|
- containerPort: 8080
|
||||||
name: http
|
name: http
|
||||||
protocol: TCP
|
readinessProbe:
|
||||||
readinessProbe:
|
httpGet:
|
||||||
failureThreshold: 3
|
path: /
|
||||||
httpGet:
|
port: 8080
|
||||||
path: /
|
initialDelaySeconds: 20
|
||||||
port: 8080
|
periodSeconds: 10
|
||||||
scheme: HTTP
|
resources:
|
||||||
initialDelaySeconds: 20
|
requests:
|
||||||
periodSeconds: 10
|
cpu: 100m
|
||||||
successThreshold: 1
|
memory: 1Gi
|
||||||
timeoutSeconds: 1
|
limits:
|
||||||
resources:
|
cpu: 2000m
|
||||||
limits:
|
memory: 2Gi
|
||||||
cpu: '2'
|
securityContext:
|
||||||
memory: 2Gi
|
allowPrivilegeEscalation: false
|
||||||
requests:
|
runAsUser: 0
|
||||||
cpu: 100m
|
volumeMounts:
|
||||||
memory: 1Gi
|
- name: config
|
||||||
securityContext:
|
mountPath: /configs
|
||||||
allowPrivilegeEscalation: false
|
|
||||||
runAsUser: 0
|
|
||||||
terminationMessagePath: /dev/termination-log
|
|
||||||
terminationMessagePolicy: File
|
|
||||||
volumeMounts:
|
|
||||||
- mountPath: /configs
|
|
||||||
name: config
|
|
||||||
dnsPolicy: ClusterFirst
|
|
||||||
restartPolicy: Always
|
|
||||||
schedulerName: default-scheduler
|
|
||||||
securityContext: {}
|
|
||||||
terminationGracePeriodSeconds: 30
|
|
||||||
volumes:
|
volumes:
|
||||||
- name: config
|
- name: config
|
||||||
persistentVolumeClaim:
|
persistentVolumeClaim:
|
||||||
claimName: stirlingpdf-config
|
claimName: stirlingpdf-config
|
||||||
status:
|
terminationGracePeriodSeconds: 30
|
||||||
availableReplicas: 1
|
|
||||||
conditions:
|
|
||||||
- lastTransitionTime: '2026-08-12T01:49:00Z'
|
|
||||||
lastUpdateTime: '2026-08-12T01:49:43Z'
|
|
||||||
message: ReplicaSet "stirlingpdf-5d9d988965" has successfully progressed.
|
|
||||||
reason: NewReplicaSetAvailable
|
|
||||||
status: 'True'
|
|
||||||
type: Progressing
|
|
||||||
- lastTransitionTime: '2026-08-28T06:05:17Z'
|
|
||||||
lastUpdateTime: '2026-08-28T06:05:17Z'
|
|
||||||
message: Deployment has minimum availability.
|
|
||||||
reason: MinimumReplicasAvailable
|
|
||||||
status: 'True'
|
|
||||||
type: Available
|
|
||||||
observedGeneration: 11
|
|
||||||
readyReplicas: 1
|
|
||||||
replicas: 1
|
|
||||||
terminatingReplicas: 0
|
|
||||||
updatedReplicas: 1
|
|
||||||
---
|
---
|
||||||
|
# 2) Service
|
||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
kind: Service
|
kind: Service
|
||||||
metadata:
|
metadata:
|
||||||
labels:
|
|
||||||
app: stirlingpdf
|
|
||||||
name: stirlingpdf
|
name: stirlingpdf
|
||||||
namespace: default
|
namespace: default
|
||||||
|
labels:
|
||||||
|
app: stirlingpdf
|
||||||
spec:
|
spec:
|
||||||
internalTrafficPolicy: Cluster
|
type: ClusterIP
|
||||||
ipFamilies:
|
|
||||||
- IPv4
|
|
||||||
ipFamilyPolicy: SingleStack
|
|
||||||
ports:
|
|
||||||
- name: http
|
|
||||||
port: 8080
|
|
||||||
protocol: TCP
|
|
||||||
targetPort: http
|
|
||||||
selector:
|
selector:
|
||||||
app: stirlingpdf
|
app: stirlingpdf
|
||||||
sessionAffinity: None
|
ports:
|
||||||
type: ClusterIP
|
- name: http
|
||||||
status:
|
port: 8080
|
||||||
loadBalancer: {}
|
protocol: TCP
|
||||||
---
|
targetPort: http
|
||||||
apiVersion: networking.k8s.io/v1
|
|
||||||
kind: Ingress
|
|
||||||
metadata:
|
|
||||||
labels:
|
|
||||||
app: stirlingpdf
|
|
||||||
name: stirlingpdf
|
|
||||||
namespace: default
|
|
||||||
spec:
|
|
||||||
ingressClassName: nginx
|
|
||||||
rules:
|
|
||||||
- host: stirling.haven
|
|
||||||
http:
|
|
||||||
paths:
|
|
||||||
- backend:
|
|
||||||
service:
|
|
||||||
name: stirlingpdf
|
|
||||||
port:
|
|
||||||
number: 8080
|
|
||||||
path: /
|
|
||||||
pathType: Prefix
|
|
||||||
status:
|
|
||||||
loadBalancer:
|
|
||||||
ingress:
|
|
||||||
- ip: 192.168.20.204
|
|
||||||
---
|
---
|
||||||
|
# 3) PersistentVolumeClaim
|
||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
kind: PersistentVolumeClaim
|
kind: PersistentVolumeClaim
|
||||||
metadata:
|
metadata:
|
||||||
name: stirlingpdf-config
|
name: stirlingpdf-config
|
||||||
namespace: default
|
namespace: default
|
||||||
|
annotations:
|
||||||
|
nfs.io/storage-path: "stirlingpdf-config"
|
||||||
spec:
|
spec:
|
||||||
|
storageClassName: "nfs-client"
|
||||||
accessModes:
|
accessModes:
|
||||||
- ReadWriteOnce
|
- ReadWriteOnce
|
||||||
resources:
|
resources:
|
||||||
requests:
|
requests:
|
||||||
storage: 1Gi
|
storage: 1Gi
|
||||||
storageClassName: nfs-client
|
---
|
||||||
volumeMode: Filesystem
|
# 4) Ingress
|
||||||
status:
|
apiVersion: networking.k8s.io/v1
|
||||||
accessModes:
|
kind: Ingress
|
||||||
- ReadWriteOnce
|
metadata:
|
||||||
capacity:
|
name: stirlingpdf
|
||||||
storage: 1Gi
|
namespace: default
|
||||||
phase: Bound
|
labels:
|
||||||
|
app: stirlingpdf
|
||||||
|
spec:
|
||||||
|
ingressClassName: nginx
|
||||||
|
rules:
|
||||||
|
- host: stirling.haven
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- path: /
|
||||||
|
pathType: Prefix
|
||||||
|
backend:
|
||||||
|
service:
|
||||||
|
name: stirlingpdf
|
||||||
|
port:
|
||||||
|
number: 8080
|
||||||
|
|||||||
+72
-120
@@ -1,3 +1,5 @@
|
|||||||
|
---
|
||||||
|
# 1) Deployment
|
||||||
apiVersion: apps/v1
|
apiVersion: apps/v1
|
||||||
kind: Deployment
|
kind: Deployment
|
||||||
metadata:
|
metadata:
|
||||||
@@ -5,112 +7,86 @@ metadata:
|
|||||||
namespace: default
|
namespace: default
|
||||||
spec:
|
spec:
|
||||||
replicas: 1
|
replicas: 1
|
||||||
|
strategy:
|
||||||
|
type: Recreate
|
||||||
selector:
|
selector:
|
||||||
matchLabels:
|
matchLabels:
|
||||||
app: uptimekuma
|
app: uptimekuma
|
||||||
strategy:
|
|
||||||
type: Recreate
|
|
||||||
template:
|
template:
|
||||||
metadata:
|
metadata:
|
||||||
labels:
|
labels:
|
||||||
app: uptimekuma
|
app: uptimekuma
|
||||||
spec:
|
spec:
|
||||||
containers:
|
containers:
|
||||||
- env:
|
- name: uptimekuma
|
||||||
- name: PUID
|
image: louislam/uptime-kuma:2
|
||||||
value: '1000'
|
imagePullPolicy: Always
|
||||||
- name: PGID
|
env:
|
||||||
value: '1000'
|
- name: PUID
|
||||||
image: louislam/uptime-kuma:2
|
value: "1000"
|
||||||
imagePullPolicy: Always
|
- name: PGID
|
||||||
livenessProbe:
|
value: "1000"
|
||||||
failureThreshold: 3
|
ports:
|
||||||
httpGet:
|
- containerPort: 3001
|
||||||
path: /
|
name: uptimekuma-port
|
||||||
port: 3001
|
resources:
|
||||||
scheme: HTTP
|
requests:
|
||||||
initialDelaySeconds: 30
|
memory: "128Mi"
|
||||||
periodSeconds: 60
|
cpu: "100m"
|
||||||
successThreshold: 1
|
limits:
|
||||||
timeoutSeconds: 1
|
memory: "256Mi"
|
||||||
name: uptimekuma
|
cpu: "500m"
|
||||||
ports:
|
livenessProbe:
|
||||||
- containerPort: 3001
|
httpGet:
|
||||||
name: uptimekuma-port
|
path: /
|
||||||
protocol: TCP
|
port: 3001
|
||||||
readinessProbe:
|
initialDelaySeconds: 30
|
||||||
failureThreshold: 3
|
periodSeconds: 60
|
||||||
httpGet:
|
readinessProbe:
|
||||||
path: /
|
httpGet:
|
||||||
port: 3001
|
path: /
|
||||||
scheme: HTTP
|
port: 3001
|
||||||
initialDelaySeconds: 5
|
initialDelaySeconds: 5
|
||||||
periodSeconds: 5
|
periodSeconds: 5
|
||||||
successThreshold: 1
|
volumeMounts:
|
||||||
timeoutSeconds: 1
|
- name: uptimekuma-config
|
||||||
resources:
|
mountPath: /app/data
|
||||||
limits:
|
|
||||||
cpu: 500m
|
|
||||||
memory: 256Mi
|
|
||||||
requests:
|
|
||||||
cpu: 100m
|
|
||||||
memory: 128Mi
|
|
||||||
terminationMessagePath: /dev/termination-log
|
|
||||||
terminationMessagePolicy: File
|
|
||||||
volumeMounts:
|
|
||||||
- mountPath: /app/data
|
|
||||||
name: uptimekuma-config
|
|
||||||
dnsPolicy: ClusterFirst
|
|
||||||
restartPolicy: Always
|
|
||||||
schedulerName: default-scheduler
|
|
||||||
securityContext: {}
|
|
||||||
terminationGracePeriodSeconds: 30
|
|
||||||
volumes:
|
volumes:
|
||||||
- name: uptimekuma-config
|
- name: uptimekuma-config
|
||||||
persistentVolumeClaim:
|
persistentVolumeClaim:
|
||||||
claimName: uptimekuma-config
|
claimName: uptimekuma-config
|
||||||
status:
|
|
||||||
availableReplicas: 1
|
|
||||||
conditions:
|
|
||||||
- lastTransitionTime: '2026-05-19T01:51:48Z'
|
|
||||||
lastUpdateTime: '2026-07-22T10:17:49Z'
|
|
||||||
message: ReplicaSet "uptimekuma-5cdbf7d589" has successfully progressed.
|
|
||||||
reason: NewReplicaSetAvailable
|
|
||||||
status: 'True'
|
|
||||||
type: Progressing
|
|
||||||
- lastTransitionTime: '2026-08-28T06:04:55Z'
|
|
||||||
lastUpdateTime: '2026-08-28T06:04:55Z'
|
|
||||||
message: Deployment has minimum availability.
|
|
||||||
reason: MinimumReplicasAvailable
|
|
||||||
status: 'True'
|
|
||||||
type: Available
|
|
||||||
observedGeneration: 94
|
|
||||||
readyReplicas: 1
|
|
||||||
replicas: 1
|
|
||||||
terminatingReplicas: 0
|
|
||||||
updatedReplicas: 1
|
|
||||||
---
|
---
|
||||||
|
# 2) Service
|
||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
kind: Service
|
kind: Service
|
||||||
metadata:
|
metadata:
|
||||||
name: uptimekuma
|
name: uptimekuma
|
||||||
namespace: default
|
namespace: default
|
||||||
spec:
|
spec:
|
||||||
internalTrafficPolicy: Cluster
|
type: ClusterIP
|
||||||
ipFamilies:
|
|
||||||
- IPv4
|
|
||||||
ipFamilyPolicy: SingleStack
|
|
||||||
ports:
|
|
||||||
- port: 3001
|
|
||||||
protocol: TCP
|
|
||||||
targetPort: uptimekuma-port
|
|
||||||
selector:
|
selector:
|
||||||
app: uptimekuma
|
app: uptimekuma
|
||||||
sessionAffinity: None
|
ports:
|
||||||
type: ClusterIP
|
- port: 3001
|
||||||
status:
|
targetPort: uptimekuma-port
|
||||||
loadBalancer: {}
|
|
||||||
---
|
---
|
||||||
|
# 3) PersistentVolumeClaim
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
name: uptimekuma-config
|
||||||
|
namespace: default
|
||||||
|
annotations:
|
||||||
|
nfs.io/storage-path: "uptimekuma-config"
|
||||||
|
spec:
|
||||||
|
storageClassName: "nfs-client"
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteMany
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 1Gi
|
||||||
|
---
|
||||||
|
# 4) Ingress
|
||||||
apiVersion: networking.k8s.io/v1
|
apiVersion: networking.k8s.io/v1
|
||||||
kind: Ingress
|
kind: Ingress
|
||||||
metadata:
|
metadata:
|
||||||
@@ -119,37 +95,13 @@ metadata:
|
|||||||
spec:
|
spec:
|
||||||
ingressClassName: nginx
|
ingressClassName: nginx
|
||||||
rules:
|
rules:
|
||||||
- host: uptimekuma.haven
|
- host: uptimekuma.haven
|
||||||
http:
|
http:
|
||||||
paths:
|
paths:
|
||||||
- backend:
|
- path: /
|
||||||
service:
|
pathType: Prefix
|
||||||
name: uptimekuma
|
backend:
|
||||||
port:
|
service:
|
||||||
number: 3001
|
name: uptimekuma
|
||||||
path: /
|
port:
|
||||||
pathType: Prefix
|
number: 3001
|
||||||
status:
|
|
||||||
loadBalancer:
|
|
||||||
ingress:
|
|
||||||
- ip: 192.168.20.204
|
|
||||||
---
|
|
||||||
apiVersion: v1
|
|
||||||
kind: PersistentVolumeClaim
|
|
||||||
metadata:
|
|
||||||
name: uptimekuma-config
|
|
||||||
namespace: default
|
|
||||||
spec:
|
|
||||||
accessModes:
|
|
||||||
- ReadWriteMany
|
|
||||||
resources:
|
|
||||||
requests:
|
|
||||||
storage: 1Gi
|
|
||||||
storageClassName: nfs-client
|
|
||||||
volumeMode: Filesystem
|
|
||||||
status:
|
|
||||||
accessModes:
|
|
||||||
- ReadWriteMany
|
|
||||||
capacity:
|
|
||||||
storage: 1Gi
|
|
||||||
phase: Bound
|
|
||||||
+107
-111
@@ -1,3 +1,5 @@
|
|||||||
|
---
|
||||||
|
# 1) Deployment
|
||||||
apiVersion: apps/v1
|
apiVersion: apps/v1
|
||||||
kind: Deployment
|
kind: Deployment
|
||||||
metadata:
|
metadata:
|
||||||
@@ -8,117 +10,124 @@ spec:
|
|||||||
selector:
|
selector:
|
||||||
matchLabels:
|
matchLabels:
|
||||||
app: vaultwarden
|
app: vaultwarden
|
||||||
strategy:
|
|
||||||
type: Recreate
|
|
||||||
template:
|
template:
|
||||||
metadata:
|
metadata:
|
||||||
labels:
|
labels:
|
||||||
app: vaultwarden
|
app: vaultwarden
|
||||||
spec:
|
spec:
|
||||||
containers:
|
containers:
|
||||||
- env:
|
- name: vaultwarden
|
||||||
- name: DOMAIN
|
image: vaultwarden/server:latest
|
||||||
value: https://vault.haven
|
imagePullPolicy: Always
|
||||||
- name: ADMIN_TOKEN
|
env:
|
||||||
valueFrom:
|
- name: DOMAIN
|
||||||
secretKeyRef:
|
value: "https://vault.haven"
|
||||||
key: ADMIN_TOKEN
|
- name: ADMIN_TOKEN
|
||||||
name: vaultwarden-admin-token
|
valueFrom:
|
||||||
image: vaultwarden/server:latest
|
secretKeyRef:
|
||||||
imagePullPolicy: Always
|
name: vaultwarden-admin-token
|
||||||
livenessProbe:
|
key: ADMIN_TOKEN
|
||||||
failureThreshold: 6
|
ports:
|
||||||
httpGet:
|
- containerPort: 80
|
||||||
path: /alive
|
name: vault-port
|
||||||
port: vault-port
|
# /alive requires no authentication and verifies the Vaultwarden process
|
||||||
scheme: HTTP
|
startupProbe:
|
||||||
periodSeconds: 15
|
httpGet:
|
||||||
successThreshold: 1
|
path: /alive
|
||||||
timeoutSeconds: 3
|
port: vault-port
|
||||||
name: vaultwarden
|
scheme: HTTP
|
||||||
ports:
|
periodSeconds: 5
|
||||||
- containerPort: 80
|
timeoutSeconds: 3
|
||||||
name: vault-port
|
failureThreshold: 30
|
||||||
protocol: TCP
|
readinessProbe:
|
||||||
readinessProbe:
|
httpGet:
|
||||||
failureThreshold: 3
|
path: /alive
|
||||||
httpGet:
|
port: vault-port
|
||||||
path: /alive
|
scheme: HTTP
|
||||||
port: vault-port
|
periodSeconds: 10
|
||||||
scheme: HTTP
|
timeoutSeconds: 3
|
||||||
periodSeconds: 10
|
failureThreshold: 3
|
||||||
successThreshold: 1
|
livenessProbe:
|
||||||
timeoutSeconds: 3
|
httpGet:
|
||||||
resources:
|
path: /alive
|
||||||
limits:
|
port: vault-port
|
||||||
cpu: 250m
|
scheme: HTTP
|
||||||
memory: 256Mi
|
periodSeconds: 15
|
||||||
requests:
|
timeoutSeconds: 3
|
||||||
cpu: 250m
|
failureThreshold: 6
|
||||||
memory: 64Mi
|
volumeMounts:
|
||||||
startupProbe:
|
- name: vaultwarden-data
|
||||||
failureThreshold: 30
|
mountPath: /data
|
||||||
httpGet:
|
resources:
|
||||||
path: /alive
|
requests:
|
||||||
port: vault-port
|
cpu: 250m
|
||||||
scheme: HTTP
|
memory: 64Mi
|
||||||
periodSeconds: 5
|
limits:
|
||||||
successThreshold: 1
|
cpu: 250m
|
||||||
timeoutSeconds: 3
|
memory: 256Mi
|
||||||
terminationMessagePath: /dev/termination-log
|
|
||||||
terminationMessagePolicy: File
|
|
||||||
volumeMounts:
|
|
||||||
- mountPath: /data
|
|
||||||
name: vaultwarden-data
|
|
||||||
dnsPolicy: ClusterFirst
|
|
||||||
restartPolicy: Always
|
|
||||||
schedulerName: default-scheduler
|
|
||||||
securityContext: {}
|
|
||||||
terminationGracePeriodSeconds: 30
|
|
||||||
volumes:
|
volumes:
|
||||||
- name: vaultwarden-data
|
- name: vaultwarden-data
|
||||||
persistentVolumeClaim:
|
persistentVolumeClaim:
|
||||||
claimName: vaultwarden-data
|
claimName: vaultwarden-data
|
||||||
|
---
|
||||||
|
# 2) Service
|
||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
kind: Service
|
kind: Service
|
||||||
metadata:
|
metadata:
|
||||||
name: vaultwarden
|
name: vaultwarden
|
||||||
namespace: default
|
namespace: default
|
||||||
spec:
|
spec:
|
||||||
internalTrafficPolicy: Cluster
|
type: ClusterIP
|
||||||
ipFamilies:
|
|
||||||
- IPv4
|
|
||||||
ipFamilyPolicy: SingleStack
|
|
||||||
ports:
|
|
||||||
- port: 80
|
|
||||||
protocol: TCP
|
|
||||||
targetPort: vault-port
|
|
||||||
selector:
|
selector:
|
||||||
app: vaultwarden
|
app: vaultwarden
|
||||||
sessionAffinity: None
|
ports:
|
||||||
type: ClusterIP
|
- port: 80
|
||||||
|
targetPort: vault-port
|
||||||
|
---
|
||||||
|
# 3) PersistentVolumeClaim (for /data)
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
name: vaultwarden-data
|
||||||
|
namespace: default
|
||||||
|
annotations:
|
||||||
|
nfs.io/storage-path: "vaultwarden-data"
|
||||||
|
spec:
|
||||||
|
storageClassName: "nfs-client"
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteMany
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 1Gi
|
||||||
|
---
|
||||||
|
# 4) Ingress
|
||||||
apiVersion: networking.k8s.io/v1
|
apiVersion: networking.k8s.io/v1
|
||||||
kind: Ingress
|
kind: Ingress
|
||||||
metadata:
|
metadata:
|
||||||
name: vaultwarden
|
name: vaultwarden
|
||||||
namespace: default
|
namespace: default
|
||||||
|
annotations:
|
||||||
|
cert-manager.io/cluster-issuer: internal-ca
|
||||||
|
nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
|
||||||
spec:
|
spec:
|
||||||
ingressClassName: nginx
|
ingressClassName: nginx
|
||||||
rules:
|
|
||||||
- host: vault.haven
|
|
||||||
http:
|
|
||||||
paths:
|
|
||||||
- backend:
|
|
||||||
service:
|
|
||||||
name: vaultwarden
|
|
||||||
port:
|
|
||||||
number: 80
|
|
||||||
path: /
|
|
||||||
pathType: Prefix
|
|
||||||
tls:
|
tls:
|
||||||
- hosts:
|
- hosts:
|
||||||
- vault.haven
|
- vault.haven
|
||||||
secretName: vaultwarden-tls
|
secretName: vaultwarden-tls
|
||||||
|
rules:
|
||||||
|
- host: vault.haven
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- path: /
|
||||||
|
pathType: Prefix
|
||||||
|
backend:
|
||||||
|
service:
|
||||||
|
name: vaultwarden
|
||||||
|
port:
|
||||||
|
number: 80
|
||||||
|
---
|
||||||
|
# 4) Ingress
|
||||||
apiVersion: networking.k8s.io/v1
|
apiVersion: networking.k8s.io/v1
|
||||||
kind: Ingress
|
kind: Ingress
|
||||||
metadata:
|
metadata:
|
||||||
@@ -127,26 +136,13 @@ metadata:
|
|||||||
spec:
|
spec:
|
||||||
ingressClassName: nginx
|
ingressClassName: nginx
|
||||||
rules:
|
rules:
|
||||||
- host: vault.ivanch.me
|
- host: vault.ivanch.me
|
||||||
http:
|
http:
|
||||||
paths:
|
paths:
|
||||||
- backend:
|
- path: /
|
||||||
service:
|
pathType: Prefix
|
||||||
name: vaultwarden
|
backend:
|
||||||
port:
|
service:
|
||||||
number: 80
|
name: vaultwarden
|
||||||
path: /
|
port:
|
||||||
pathType: Prefix
|
number: 80
|
||||||
apiVersion: v1
|
|
||||||
kind: PersistentVolumeClaim
|
|
||||||
metadata:
|
|
||||||
name: vaultwarden-data
|
|
||||||
namespace: default
|
|
||||||
spec:
|
|
||||||
accessModes:
|
|
||||||
- ReadWriteMany
|
|
||||||
resources:
|
|
||||||
requests:
|
|
||||||
storage: 1Gi
|
|
||||||
storageClassName: nfs-client
|
|
||||||
volumeMode: Filesystem
|
|
||||||
|
|||||||
Reference in New Issue
Block a user