This commit is contained in:
Alex D. 2025-04-02 15:11:03 +00:00
parent 06803d5c03
commit 6b9f7b8d73
Signed by: caskd
GPG Key ID: F92BA85F61F4C173
38 changed files with 660 additions and 14 deletions

View File

@ -0,0 +1,93 @@
# yaml-language-server: $schema=https://kubernetesjsonschema.dev/master/deployment-apps-v1.json
kind: Deployment
apiVersion: apps/v1
metadata:
namespace: redxen
labels:
app: dovecot
name: dovecot-dp
spec:
replicas: 1
selector:
matchLabels:
app: dovecot
template:
metadata:
namespace: redxen
labels:
app: dovecot
spec:
hostUsers: false
securityContext:
seccompProfile:
type: RuntimeDefault
runAsNonRoot: true
runAsUser: 10000
runAsGroup: 10000
initContainers:
- name: volume-permissions
image: busybox
command: ["chown", "-c", "10000:10000", "/var/mail", "/run/dovecot", "/var/lib/dovecot"]
imagePullPolicy: IfNotPresent
securityContext:
capabilities:
drop: ["SETPCAP", "MKNOD", "AUDIT_WRITE", "NET_RAW", "DAC_OVERRIDE", "FOWNER", "FSETID", "KILL", "SETGID", "SETUID", "NET_BIND_SERVICE", "SYS_CHROOT", "SETFCAP"]
runAsUser: 0
runAsNonRoot: false
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
volumeMounts:
- name: mail-storage
mountPath: /var/mail
- name: dovecot-storage
mountPath: /var/lib/dovecot
- name: tmpfs-run
mountPath: /run/dovecot
- name: directories
image: busybox
command: ["mkdir", "-vp", "/run/dovecot/login"]
imagePullPolicy: IfNotPresent
securityContext:
capabilities:
drop: ["ALL"]
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
volumeMounts:
- name: tmpfs-run
mountPath: /run/dovecot
containers:
- name: dovecot
image: redxen.eu/daemons/dovecot:latest
imagePullPolicy: IfNotPresent
securityContext:
capabilities:
drop: ["SETPCAP", "MKNOD", "AUDIT_WRITE", "NET_RAW", "DAC_OVERRIDE", "FOWNER", "FSETID", "KILL", "SETGID", "SETUID", "NET_BIND_SERVICE", "SYS_CHROOT", "SETFCAP"]
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
volumeMounts:
- name: mail-storage
mountPath: /var/mail
- name: dovecot-storage
mountPath: /var/lib/dovecot
- name: tmpfs-run
mountPath: /run/dovecot
ports:
- name: imap
containerPort: 143
- name: lmtp
containerPort: 11555
- name: auth
containerPort: 11666
volumes:
- name: mail-storage
persistentVolumeClaim:
claimName: mail-pvc
readOnly: false
- name: dovecot-storage
emptyDir:
medium: Memory
sizeLimit: 4Mi
- name: tmpfs-run
emptyDir:
medium: Memory
sizeLimit: 4Mi

View File

@ -0,0 +1,7 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- deployment.yml
- persistentvolume.yml
- persistentvolumeclaim.yml
- service.yml

View File

@ -0,0 +1,28 @@
# yaml-language-server: $schema=https://kubernetesjsonschema.dev/master/persistentvolume-v1.json
kind: PersistentVolume
apiVersion: v1
metadata:
namespace: redxen
name: mail-pv
spec:
storageClassName: local-storage
claimRef:
namespace: redxen
name: mail-pvc
capacity:
storage: 1Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
#persistentVolumeReclaimPolicy: Retain
hostPath:
path: /var/lib/mail
type: DirectoryOrCreate
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- bournemouth.united-kingdom

View File

@ -0,0 +1,15 @@
# yaml-language-server: $schema=https://kubernetesjsonschema.dev/master/persistentvolumeclaim-v1.json
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
namespace: redxen
name: mail-pvc
spec:
volumeName: mail-pv
storageClassName: local-storage
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi

View File

@ -0,0 +1,22 @@
# yaml-language-server: $schema=https://kubernetesjsonschema.dev/master/service-v1.json
kind: Service
apiVersion: v1
metadata:
namespace: redxen
labels:
app: dovecot
name: dovecot-sv
spec:
selector:
app: dovecot
type: ClusterIP
ports:
- name: imap
port: 143
protocol: TCP
- name: lmtp
port: 11555
protocol: TCP
- name: auth
port: 11666
protocol: TCP

View File

@ -58,11 +58,11 @@ spec:
containerPort: 2442
livenessProbe:
httpGet:
port: http
port: 3000
httpHeaders:
- name: "Host"
value: "git.redxen.eu"
path: /
path: /api/healthz
volumes:
- name: gitea-storage
persistentVolumeClaim:

View File

@ -7,6 +7,7 @@ metadata:
app: gitea
name: gitea-pvc
spec:
volumeName: gitea-pv
selector:
matchLabels:
app: gitea

View File

@ -52,11 +52,10 @@ spec:
- name: grafana-storage
mountPath: /var/lib/grafana
ports:
- name: http
containerPort: 3000
- containerPort: 3000
livenessProbe:
httpGet:
port: http
port: 3000
httpHeaders:
- name: "Host"
value: "stats.redxen.eu"

View File

@ -7,6 +7,7 @@ metadata:
app: grafana
name: grafana-pvc
spec:
volumeName: grafana-pv
selector:
matchLabels:
app: grafana

View File

@ -39,12 +39,18 @@ spec:
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
ports:
- containerPort: 80
- name: http
containerPort: 80
hostPort: 80
protocol: TCP
- containerPort: 443
- name: https
containerPort: 443
hostPort: 443
protocol: TCP
- containerPort: 5000
- name: registry
containerPort: 5000
hostPort: 5000
protocol: TCP
- name: metrics
containerPort: 9100
protocol: TCP

View File

@ -2,3 +2,4 @@ apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- daemonset.yml
- service.yml

View File

@ -0,0 +1,16 @@
# yaml-language-server: $schema=https://kubernetesjsonschema.dev/master/service-v1.json
kind: Service
apiVersion: v1
metadata:
namespace: redxen
labels:
app: haproxy
name: haproxy-sv
spec:
selector:
app: haproxy
type: ClusterIP
ports:
- name: prometheus
port: 9100
protocol: TCP

View File

@ -52,11 +52,10 @@ spec:
- name: tmpfs-run
mountPath: /run/nginx
ports:
- name: http
containerPort: 80
- containerPort: 80
livenessProbe:
httpGet:
port: http
port: 80
httpHeaders:
- name: "Host"
value: "redxen.eu"

View File

@ -13,3 +13,7 @@ resources:
- redis/
- registry/
- nsd/
- opendkim/
- rspamd/
- prometheus/
- loki/

View File

@ -0,0 +1,68 @@
# yaml-language-server: $schema=https://kubernetesjsonschema.dev/master/deployment-apps-v1.json
kind: Deployment
apiVersion: apps/v1
metadata:
namespace: redxen
labels:
app: loki
name: loki-dp
spec:
replicas: 1
selector:
matchLabels:
app: loki
template:
metadata:
namespace: redxen
labels:
app: loki
spec:
hostUsers: false
securityContext:
seccompProfile:
type: RuntimeDefault
runAsNonRoot: true
runAsUser: 10000
runAsGroup: 10000
initContainers:
- name: volume-permissions
image: busybox
command: ["chown", "-c", "10000:10000", "/var/lib/loki"]
imagePullPolicy: IfNotPresent
securityContext:
capabilities:
drop: ["SETPCAP", "MKNOD", "AUDIT_WRITE", "NET_RAW", "DAC_OVERRIDE", "FOWNER", "FSETID", "KILL", "SETGID", "SETUID", "NET_BIND_SERVICE", "SYS_CHROOT", "SETFCAP"]
runAsUser: 0
runAsNonRoot: false
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
volumeMounts:
- name: loki-storage
mountPath: /var/lib/loki
containers:
- name: loki
image: redxen.eu/daemons/loki:latest
imagePullPolicy: IfNotPresent
securityContext:
capabilities:
drop: ["ALL"]
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
volumeMounts:
- name: loki-storage
mountPath: /var/lib/loki
ports:
- containerPort: 3100
readinessProbe:
httpGet:
port: 3100
path: /ready
livenessProbe:
httpGet:
port: 3100
path: /ready
volumes:
- name: loki-storage
persistentVolumeClaim:
claimName: loki-pvc
readOnly: false

View File

@ -0,0 +1,7 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- deployment.yml
- persistentvolume.yml
- persistentvolumeclaim.yml
- service.yml

View File

@ -0,0 +1,30 @@
# yaml-language-server: $schema=https://kubernetesjsonschema.dev/master/persistentvolume-v1.json
kind: PersistentVolume
apiVersion: v1
metadata:
namespace: redxen
labels:
app: loki
name: loki-pv
spec:
storageClassName: local-storage
claimRef:
namespace: redxen
name: loki-pvc
capacity:
storage: 1Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
#persistentVolumeReclaimPolicy: Retain
hostPath:
path: /var/lib/loki
type: DirectoryOrCreate
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- bournemouth.united-kingdom

View File

@ -0,0 +1,20 @@
# yaml-language-server: $schema=https://kubernetesjsonschema.dev/master/persistentvolumeclaim-v1.json
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
namespace: redxen
labels:
app: loki
name: loki-pvc
spec:
volumeName: loki-pv
selector:
matchLabels:
app: loki
storageClassName: local-storage
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi

16
redxen/loki/service.yml Normal file
View File

@ -0,0 +1,16 @@
# yaml-language-server: $schema=https://kubernetesjsonschema.dev/master/service-v1.json
kind: Service
apiVersion: v1
metadata:
namespace: redxen
labels:
app: loki
name: loki-sv
spec:
selector:
app: loki
type: ClusterIP
ports:
- name: http
port: 3100
protocol: TCP

View File

@ -44,4 +44,4 @@ spec:
protocol: UDP
livenessProbe:
tcpSocket:
port: murmur-tcp
port: 64738

View File

@ -40,13 +40,18 @@ spec:
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
ports:
- containerPort: 9100
- name: http
containerPort: 9100
hostPort: 9100
protocol: TCP
volumeMounts:
- name: host-ro
readOnly: true
mountPath: /host
livenessProbe:
httpGet:
port: 9100
path: /metrics
volumes:
- name: host-ro
hostPath:

View File

@ -2,3 +2,4 @@ apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- daemonset.yml
- service.yml

View File

@ -0,0 +1,16 @@
# yaml-language-server: $schema=https://kubernetesjsonschema.dev/master/service-v1.json
kind: Service
apiVersion: v1
metadata:
namespace: redxen
labels:
app: node-exporter
name: node-exporter-sv
spec:
selector:
app: node-exporter
type: ClusterIP
ports:
- name: http
port: 9100
protocol: TCP

View File

@ -10,7 +10,7 @@ spec:
selector:
matchLabels:
app: nsd
replicas: 3
replicas: 2
template:
metadata:
namespace: redxen

View File

@ -0,0 +1,37 @@
# yaml-language-server: $schema=https://kubernetesjsonschema.dev/master/deployment-apps-v1.json
kind: Deployment
apiVersion: apps/v1
metadata:
namespace: redxen
labels:
app: opendkim
name: opendkim-dp
spec:
replicas: 1
selector:
matchLabels:
app: opendkim
template:
metadata:
namespace: redxen
labels:
app: opendkim
spec:
hostUsers: false
securityContext:
seccompProfile:
type: RuntimeDefault
runAsNonRoot: true
runAsUser: 10000
runAsGroup: 10000
containers:
- name: opendkim
image: redxen.eu/daemons/opendkim:latest
imagePullPolicy: IfNotPresent
securityContext:
capabilities:
drop: ["ALL"]
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
ports:
- containerPort: 8891

View File

@ -0,0 +1,5 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- deployment.yml
- service.yml

View File

@ -0,0 +1,16 @@
# yaml-language-server: $schema=https://kubernetesjsonschema.dev/master/service-v1.json
kind: Service
apiVersion: v1
metadata:
namespace: redxen
labels:
app: opendkim
name: opendkim-sv
spec:
selector:
app: opendkim
type: ClusterIP
ports:
- name: opendkim
port: 8891
protocol: TCP

View File

@ -7,6 +7,7 @@ metadata:
app: postgresql
name: postgresql-pvc
spec:
volumeName: postgresql-pv
selector:
matchLabels:
app: postgresql

View File

@ -0,0 +1,64 @@
# yaml-language-server: $schema=https://kubernetesjsonschema.dev/master/deployment-apps-v1.json
kind: Deployment
apiVersion: apps/v1
metadata:
namespace: redxen
labels:
app: prometheus
name: prometheus-dp
spec:
replicas: 1
selector:
matchLabels:
app: prometheus
template:
metadata:
namespace: redxen
labels:
app: prometheus
spec:
hostUsers: false
securityContext:
seccompProfile:
type: RuntimeDefault
runAsNonRoot: true
runAsUser: 10000
runAsGroup: 10000
initContainers:
- name: volume-permissions
image: busybox
command: ["chown", "-c", "10000:10000", "/var/lib/prometheus"]
imagePullPolicy: IfNotPresent
securityContext:
capabilities:
drop: ["SETPCAP", "MKNOD", "AUDIT_WRITE", "NET_RAW", "DAC_OVERRIDE", "FOWNER", "FSETID", "KILL", "SETGID", "SETUID", "NET_BIND_SERVICE", "SYS_CHROOT", "SETFCAP"]
runAsUser: 0
runAsNonRoot: false
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
volumeMounts:
- name: prometheus-storage
mountPath: /var/lib/prometheus
containers:
- name: prometheus
image: redxen.eu/daemons/prometheus:latest
imagePullPolicy: IfNotPresent
securityContext:
capabilities:
drop: ["ALL"]
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
volumeMounts:
- name: prometheus-storage
mountPath: /var/lib/prometheus
ports:
- containerPort: 9090
livenessProbe:
httpGet:
port: 9090
path: /
volumes:
- name: prometheus-storage
persistentVolumeClaim:
claimName: prometheus-pvc
readOnly: false

View File

@ -0,0 +1,7 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- deployment.yml
- persistentvolume.yml
- persistentvolumeclaim.yml
- service.yml

View File

@ -0,0 +1,30 @@
# yaml-language-server: $schema=https://kubernetesjsonschema.dev/master/persistentvolume-v1.json
kind: PersistentVolume
apiVersion: v1
metadata:
namespace: redxen
labels:
app: prometheus
name: prometheus-pv
spec:
storageClassName: local-storage
claimRef:
namespace: redxen
name: prometheus-pvc
capacity:
storage: 1Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
#persistentVolumeReclaimPolicy: Retain
hostPath:
path: /var/lib/prometheus
type: DirectoryOrCreate
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- bournemouth.united-kingdom

View File

@ -0,0 +1,20 @@
# yaml-language-server: $schema=https://kubernetesjsonschema.dev/master/persistentvolumeclaim-v1.json
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
namespace: redxen
labels:
app: prometheus
name: prometheus-pvc
spec:
volumeName: prometheus-pv
selector:
matchLabels:
app: prometheus
storageClassName: local-storage
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi

View File

@ -0,0 +1,16 @@
# yaml-language-server: $schema=https://kubernetesjsonschema.dev/master/service-v1.json
kind: Service
apiVersion: v1
metadata:
namespace: redxen
labels:
app: prometheus
name: prometheus-sv
spec:
selector:
app: prometheus
type: ClusterIP
ports:
- name: http
port: 9090
protocol: TCP

View File

@ -7,6 +7,7 @@ metadata:
app: redis
name: redis-pvc
spec:
volumeName: redis-pv
selector:
matchLabels:
app: redis

View File

@ -7,6 +7,7 @@ metadata:
app: registry
name: registry-pvc
spec:
volumeName: registry-pv
selector:
matchLabels:
app: registry

View File

@ -0,0 +1,63 @@
# yaml-language-server: $schema=https://kubernetesjsonschema.dev/master/deployment-apps-v1.json
kind: Deployment
apiVersion: apps/v1
metadata:
namespace: redxen
labels:
app: rspamd
name: rspamd-dp
spec:
replicas: 1
selector:
matchLabels:
app: rspamd
template:
metadata:
namespace: redxen
labels:
app: rspamd
spec:
hostUsers: false
securityContext:
seccompProfile:
type: RuntimeDefault
runAsNonRoot: true
runAsUser: 10000
runAsGroup: 10000
initContainers:
- name: volume-permissions
image: busybox
command: ["chown", "-c", "10000:10000", "/var/lib/rspamd"]
imagePullPolicy: IfNotPresent
securityContext:
capabilities:
drop: ["SETPCAP", "MKNOD", "AUDIT_WRITE", "NET_RAW", "DAC_OVERRIDE", "FOWNER", "FSETID", "KILL", "SETGID", "SETUID", "NET_BIND_SERVICE", "SYS_CHROOT", "SETFCAP"]
runAsUser: 0
runAsNonRoot: false
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
volumeMounts:
- name: rspamd-data
mountPath: /var/lib/rspamd
containers:
- name: rspamd
image: redxen.eu/daemons/rspamd:latest
imagePullPolicy: IfNotPresent
securityContext:
capabilities:
drop: ["ALL"]
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
volumeMounts:
- name: rspamd-data
mountPath: /var/lib/rspamd
ports:
- containerPort: 7510
- containerPort: 7511
- containerPort: 7512
- containerPort: 7513
volumes:
- name: rspamd-data
emptyDir:
medium: Memory
sizeLimit: 128Mi

View File

@ -0,0 +1,5 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- deployment.yml
- service.yml

25
redxen/rspamd/service.yml Normal file
View File

@ -0,0 +1,25 @@
# yaml-language-server: $schema=https://kubernetesjsonschema.dev/master/service-v1.json
kind: Service
apiVersion: v1
metadata:
namespace: redxen
labels:
app: rspamd
name: rspamd-sv
spec:
selector:
app: rspamd
type: ClusterIP
ports:
- name: normal
port: 7511
protocol: TCP
- name: controller
port: 7512
protocol: TCP
- name: proxy
port: 7510
protocol: TCP
- name: fuzzy
port: 7513
protocol: TCP