Longhorn
Prerequisites#
This guide assumes you have the following prerequisites in place:
- FluxCD
- Cert-Manager
- Additional packages may be required depending on your Kubernetes environment. Please refer to the Longhorn documentation for specific prerequisites related to your setup.
- Ensure the
dm_cryptkernel module is loaded:sudo modprobe dm-crypt - You also need to install these packages:
sudo apt install cryptsetup dmsetup nfs-common open-iscsi - Ingress will be protected with Authelia, so you need to have Authelia installed and configured in your cluster. Please refer to the Authelia guide for installation and configuration instructions.
Longhorn#
Longhorn is a cloud-native distributed block storage solution for Kubernetes. It provides highly available and persistent storage for your applications running in Kubernetes clusters.
Installation#
Create the following directory structure for Longhorn:
longhorn/ ├── longhorn/ │ ├── helmrelease.yml │ ├── helmrepository.yml │ └── ingress.yml └── namespace.ymlAdd the following content to
longhorn/namespace.yml:--- kind: Namespace apiVersion: v1 metadata: name: longhorn-system labels: name: longhorn-systemAdd the following content to
longhorn/helmrepository.yml:--- apiVersion: source.toolkit.fluxcd.io/v1 kind: HelmRepository metadata: name: longhorn namespace: flux-system spec: interval: 6h url: https://charts.longhorn.ioAdd the following content to
longhorn/helmrelease.yml:--- apiVersion: helm.toolkit.fluxcd.io/v2 kind: HelmRelease metadata: name: longhorn namespace: longhorn-system spec: interval: 6h chart: spec: chart: longhorn version: "1.10.1" sourceRef: kind: HelmRepository name: longhorn namespace: flux-system interval: 6h install: createNamespace: true upgrade: remediation: remediateLastFailure: true values: persistence: defaultClass: false reclaimPolicy: Retain ingress: enabled: false service: ui: type: ClusterIPAdd the following content to
longhorn/ingress.yml:--- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: longhorn-ingress namespace: longhorn-system annotations: cert-manager.io/cluster-issuer: letsencrypt-cloudflare traefik.ingress.kubernetes.io/router.middlewares: tools-authelia@kubernetescrd traefik.ingress.kubernetes.io/router.entrypoints: websecure spec: ingressClassName: traefik tls: - hosts: - longhorn.example.com secretName: longhorn-tls rules: - host: longhorn.example.com http: paths: - path: / pathType: Prefix backend: service: name: longhorn-frontend port: number: 80Commit and push the changes to your Git repository. FluxCD will automatically detect the changes and deploy Longhorn to your Kubernetes cluster.