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 chart: spec: chart: longhorn version: "1.9.0" sourceRef: kind: HelmRepository name: longhorn interval: "1h" values: defaultSettings: createDefaultDiskLabeledNodes: true --- apiVersion: v1 kind: ConfigMap metadata: name: longhorn-custom-path namespace: longhorn-system data: 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 namespace: longhorn-system annotations: ingressClassName: traefik 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 --- 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-fast provisioner: driver.longhorn.io allowVolumeExpansion: true reclaimPolicy: Delete volumeBindingMode: Immediate parameters: backupTargetName: default numberOfReplicas: "1" staleReplicaTimeout: "2880" fromBackup: "" fsType: ext4 diskSelector: "ssd,fast"