Files
nixos/manifests/helm/longhorn.yaml
T

180 lines
4.3 KiB
YAML

apiVersion: v1
kind: Namespace
metadata:
name: longhorn-system
---
apiVersion: source.toolkit.fluxcd.io/v1
kind: HelmRepository
metadata:
name: longhorn
namespace: longhorn-system
spec:
interval: "24h"
url: "https://charts.longhorn.io"
---
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: longhorn
namespace: longhorn-system
spec:
interval: 10m
dependsOn:
- name: tailscale
namespace: tailscale
- name: kyverno
namespace: kyverno-system
chart:
spec:
chart: longhorn
version: "1.11.3"
sourceRef:
kind: HelmRepository
name: longhorn
interval: "1h"
values:
defaultSettings:
createDefaultDiskLabeledNodes: true
replicaSoftAntiAffinity: true
replicaAutoBalance: "best-effort"
persistence:
# This should go back to 3 when I have more cluster
defaultClassReplicaCount: 3
---
apiVersion: v1
kind: ConfigMap
metadata:
name: longhorn-custom-path
namespace: longhorn-system
data:
# yamllint disable-line rule:line-length
PATH: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/run/wrappers/bin:/nix/var/nix/profiles/default/bin:/run/current-system/sw/bin
---
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: add-host-path-to-longhorn
annotations:
policies.kyverno.io/title: Add Environment Variables from ConfigMap
policies.kyverno.io/subject: Pod
policies.kyverno.io/category: Other
policies.kyverno.io/description: >-
Longhorn invokes executables on the host system, and needs
to be aware of the host systems PATH. This modifies all
deployments such that the PATH is explicitly set to support
NixOS based systems.
spec:
rules:
- name: add-env-vars
match:
resources:
kinds:
- Pod
namespaces:
- longhorn-system
mutate:
patchStrategicMerge:
spec:
initContainers:
- (name): "*"
envFrom:
- configMapRef:
name: longhorn-custom-path
containers:
- (name): "*"
envFrom:
- configMapRef:
name: longhorn-custom-path
---
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
namespace: longhorn-system
name: basic-auth
spec:
basicAuth:
realm: Traefik
secret: longhorn-ui
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: longhorn-ingress-tailscale
namespace: longhorn-system
spec:
ingressClassName: tailscale
defaultBackend:
service:
name: longhorn-frontend
port:
number: 80
tls:
- hosts:
- longhorn
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: longhorn-ingress
namespace: longhorn-system
annotations:
ingressClassName: traefik
# yamllint disable-line rule:line-length
traefik.ingress.kubernetes.io/router.middlewares: longhorn-system-basic-auth@kubernetescrd
# Set body size to 10G to allow uploading large things
traefik.ingress.kubernetes.io/buffering: |
maxrequestbodybytes: 10000000000
memrequestbodybytes: 20000000000
spec:
ingressClassName: traefik
rules:
- &host
host: longhorn.cluster
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: longhorn-frontend
port:
number: 80
- <<: *host
host: longhorn.kubernetes
- <<: *host
host: longhorn.k3s.nebula.thehellings.com
- <<: *host
host: longhorn.k3s.thehellings.lan
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: longhorn-default
provisioner: driver.longhorn.io
allowVolumeExpansion: true
reclaimPolicy: Delete
volumeBindingMode: Immediate
parameters:
backupTargetName: default
numberOfReplicas: "2"
staleReplicaTimeout: "2880"
fromBackup: ""
fsType: ext4
diskSelector: "hdd,large"
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: longhorn-3
provisioner: driver.longhorn.io
allowVolumeExpansion: true
reclaimPolicy: Delete
volumeBindingMode: Immediate
parameters:
backupTargetName: default
numberOfReplicas: "3"
staleReplicaTimeout: "2880"
fromBackup: ""
fsType: ext4
diskSelector: "hdd,large"