Don't pay money to use services, host them yourself.
This repository provides the configuration to deploy a collection of useful services to your own local Kubernetes cluster. For an easier deployment helmfile is used.
To use this, you need a local kubernetes cluster installed (for example through minikube or k3s), and the following tools:
The services listed here are considered user-facing services, used by multiple clients with different platforms (mobile, web, computer).
Service | Description |
---|---|
Jellyfin | The Free Software Media System |
Nextcloud | Cloud Storage |
Pi-hole | Network-wide Ad Blocking |
VaultWarden | Bitwarden compatible server |
The services listed here are used by the cluster to enable and manage internal and external communication.
Service | Description |
---|---|
Bitnami ExternalDNS | Automatic DNS for Pi-hole |
Ingress-Nginx Controller | Ingress for local network |
Longhorn | Distributed block storage (used as storage for Nextcloud) |
MetalLB | Load balancer |
For monitoring purposes, the PLTG Stack (Prometheus, Loki, Tempo, Grafana) is provided, consisting of:
- Monitoring: Prometheus
- Log aggregation: Loki
- Tracing: Tempo
- Observability: Grafana
Some services might have additional requirements, be it installed tools, or deployed resources.
Update the default password:
kubectl create secret generic pihole-password \
--from-literal=password='new_password_here' \
--namespace=pihole-system \
--dry-run=client -o yaml | kubectl apply -f -
Before you deploy to your cluster, you need to prepare it:
- Install / verify Helm dependencies:
make helm-deps
Deploying to a cluster is as simple as running:
make helm-install
Important: Afterwards also apply the kustomizations by running:
make kustomize
To help you bootstrap a production-grade lightweight kubernetes cluster, the Makefile provides three different targets:
Installing a minimal k3s
cluster:
servicelb
is disabled in favour of usingmetallb
traefik
is disabled in favour of monitoring withgrafana
local-storage
is disabled in favour of usinglonghorn
make k3s-install
Copying over the kubeconfig
to your local ~/.kube/config
:
make k3s-config
Tearing down the installed k3s
cluster and deleting all installed files:
make k3s-uninstall