2024-07-17 14:25:41 +00:00
|
|
|
{ lib, nixhelm, system, machines, ... }: {
|
|
|
|
kubernetes = {
|
|
|
|
helm.releases = {
|
|
|
|
metallb = {
|
|
|
|
chart = nixhelm.chartsDerivations.${system}.metallb.metallb;
|
|
|
|
includeCRDs = true;
|
|
|
|
};
|
|
|
|
|
|
|
|
# argo-workflows = {
|
|
|
|
# chart = nixhelm.chartsDerivations.${system}.argoproj.argo-workflows;
|
|
|
|
# includeCRDs = true;
|
|
|
|
# };
|
|
|
|
|
|
|
|
longhorn = {
|
|
|
|
chart = nixhelm.chartsDerivations.${system}.longhorn.longhorn;
|
|
|
|
includeCRDs = true;
|
|
|
|
|
|
|
|
values = {
|
|
|
|
persistence.defaultClassReplicaCount = 2;
|
|
|
|
|
|
|
|
defaultSettings = {
|
|
|
|
defaultDataPath = "/mnt/longhorn";
|
|
|
|
storageMinimalAvailablePercentage = 0;
|
|
|
|
allowRecurringJobWhileVolumeDetached = true;
|
|
|
|
backupTarget = "nfs://lewis.dmz:/mnt/longhorn/persistent/longhorn-backup";
|
|
|
|
};
|
|
|
|
};
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
resources = {
|
|
|
|
namespaces = {
|
|
|
|
static-websites = { };
|
|
|
|
freshrss = { };
|
|
|
|
radicale = { };
|
|
|
|
kms = { };
|
|
|
|
atuin = { };
|
|
|
|
nextcloud = { };
|
|
|
|
hedgedoc = { };
|
|
|
|
kitchenowl = { };
|
|
|
|
forgejo = { };
|
|
|
|
paperless = { };
|
|
|
|
syncthing = { };
|
|
|
|
immich = { };
|
|
|
|
attic = { };
|
|
|
|
inbucket = { };
|
|
|
|
dns = { };
|
|
|
|
media = { };
|
|
|
|
minecraft = { };
|
2024-07-21 18:03:36 +00:00
|
|
|
headscale = { };
|
2024-07-21 17:47:22 +00:00
|
|
|
tailscale = { };
|
2024-07-17 14:25:41 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
nodes =
|
|
|
|
let
|
|
|
|
machinesWithKubernetesLabels = lib.filterAttrs (name: machine: machine.kubernetesNodeLabels != null) machines;
|
|
|
|
in
|
|
|
|
builtins.mapAttrs
|
|
|
|
(name: machine: {
|
|
|
|
metadata.labels = machine.kubernetesNodeLabels;
|
|
|
|
})
|
|
|
|
machinesWithKubernetesLabels;
|
|
|
|
|
|
|
|
ingresses.longhorn = {
|
|
|
|
metadata.annotations = {
|
|
|
|
"cert-manager.io/cluster-issuer" = "letsencrypt";
|
|
|
|
"traefik.ingress.kubernetes.io/router.entrypoints" = "localsecure";
|
|
|
|
};
|
|
|
|
|
|
|
|
spec = {
|
|
|
|
ingressClassName = "traefik";
|
|
|
|
|
|
|
|
rules = [{
|
|
|
|
host = "longhorn.kun.is";
|
|
|
|
|
|
|
|
http.paths = [{
|
|
|
|
path = "/";
|
|
|
|
pathType = "Prefix";
|
|
|
|
|
|
|
|
backend.service = {
|
|
|
|
name = "longhorn-frontend";
|
|
|
|
port.number = 80;
|
|
|
|
};
|
|
|
|
}];
|
|
|
|
}];
|
|
|
|
|
|
|
|
tls = [{
|
|
|
|
secretName = "longhorn-tls";
|
|
|
|
hosts = [ "longhorn.kun.is" ];
|
|
|
|
}];
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
recurringJobs.backup-nfs.spec = {
|
|
|
|
cron = "0 1 * * *"; # One o'clock at night
|
|
|
|
task = "backup";
|
|
|
|
retain = 2; # We don't need many, as we also make Borg backups.
|
|
|
|
concurrency = 1;
|
|
|
|
};
|
|
|
|
|
|
|
|
ipAddressPools.main.spec.addresses = [ "192.168.30.128-192.168.30.200" "2a0d:6e00:1a77:30::2-2a0d:6e00:1a77:30:ffff:ffff:ffff:fffe" ];
|
|
|
|
l2Advertisements.main.metadata = { };
|
|
|
|
|
|
|
|
persistentVolumes = {
|
|
|
|
music-syncthing.spec = {
|
|
|
|
capacity.storage = "1Gi";
|
|
|
|
accessModes = [ "ReadWriteMany" ];
|
|
|
|
|
|
|
|
nfs = {
|
|
|
|
server = "lewis.dmz";
|
|
|
|
path = "/mnt/longhorn/persistent/media/music";
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
media-media.spec = {
|
|
|
|
capacity.storage = "1Gi";
|
|
|
|
accessModes = [ "ReadWriteMany" ];
|
|
|
|
|
|
|
|
nfs = {
|
|
|
|
server = "lewis.dmz";
|
|
|
|
path = "/mnt/longhorn/persistent/media";
|
|
|
|
};
|
|
|
|
};
|
|
|
|
};
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
lab = {
|
|
|
|
longhorn.persistentVolume = {
|
|
|
|
freshrss.storage = "1Gi";
|
|
|
|
radicale.storage = "200Mi";
|
|
|
|
atuin.storage = "300Mi";
|
|
|
|
atuin-db.storage = "300Mi";
|
|
|
|
nextcloud.storage = "50Gi";
|
|
|
|
nextcloud-db.storage = "400Mi";
|
|
|
|
hedgedoc-uploads.storage = "50Mi";
|
|
|
|
hedgedoc-db.storage = "100Mi";
|
|
|
|
kitchenowl.storage = "100Mi";
|
|
|
|
forgejo.storage = "20Gi";
|
|
|
|
paperless-data.storage = "10Gi";
|
|
|
|
paperless-redisdata.storage = "20Mi";
|
|
|
|
paperless-db.storage = "150Mi";
|
|
|
|
syncthing.storage = "400Mi";
|
|
|
|
pihole-data.storage = "750Mi";
|
|
|
|
pihole-dnsmasq.storage = "16Mi";
|
|
|
|
immich.storage = "50Gi";
|
|
|
|
immich-db.storage = "5Gi";
|
|
|
|
attic.storage = "15Gi";
|
|
|
|
attic-db.storage = "150Mi";
|
|
|
|
jellyfin.storage = "5Gi";
|
|
|
|
transmission.storage = "25Mi";
|
|
|
|
jellyseerr.storage = "75Mi";
|
|
|
|
radarr.storage = "300Mi";
|
|
|
|
prowlarr.storage = "150Mi";
|
|
|
|
sonarr.storage = "150Mi";
|
|
|
|
bazarr.storage = "25Mi";
|
|
|
|
minecraft.storage = "1Gi";
|
2024-07-21 18:03:36 +00:00
|
|
|
headscale.storage = "1Gi";
|
2024-07-17 14:25:41 +00:00
|
|
|
};
|
|
|
|
};
|
|
|
|
}
|