Caution
This is a work-in-progress. For the "stable" code see: https://github.com/Jonnobrow/coffee-shop/tree/main
This is the repository for my home infrastructure and Kubernetes cluster. I follow infrastructure as Code (IaC) and GitOps practices using tooling like Terraform, Kubernetes, FluxCD, and Renovate.
- I like Coffee!
- therefore my servers and devices are coffee themed
- Espresso: Proxmox VE Server
- Cappuccino: NAS Virtual Machine (NFS+Samba Shares right now)
- Mocha: Virtual Machine running K3s
- Picolo: LXC Container running PiHole
- Ristretto: Raspberry Pi 5 running Home Assistant
Currently the base infrastructure is manually provisioned 🤡
I use Ansible roles for setting up infrastructure.
k3s provisioned on a PVE Virtual Machine running Ubuntu. I only have a single physical machine so currently only run a single node - this may change as time goes on.
- cert-manager - SSL certificates - with Cloudflare DNS challenge
- flux - GitOps tool for deploying manifests from the
cluster
directory - local-path-provisioner - default storage class provided by k3s
- metallb - bare metal load balancer
- traefik - ingress controller
FluxCD watches the clusters in my kubernetes folder (see Directories below) and makes the changes to my clusters based on the state of my Git repository.
Flux will recursively search the kubernetes/${cluster}/apps
folder until it finds the most top level kustomization.yaml
per directory and
then apply all the resources listed in it. That kustomization.yaml
will generally only have a namespace resource and one or many Flux
kustomizations (ks.yaml
). Under the control of those Flux kustomizations there will be a HelmRelease
or other resources related to
the application which will be applied.
Renovate watches my entire repository looking for dependency updates, when they are found a PR is automatically created. When some PRs are merged Flux applies the changes to my cluster.
This Git repository contains the following directories under Kubernetes.
📁 kubernetes
├── 📁 apps # applications
├── 📁 bootstrap # bootstrap procedures
└── 📁 cluster # core flux configuration
Namespace | Kind | Name | Supporting Services |
---|---|---|---|
cert-manager | HelmRelease |
cert-manager | |
flux-system | GitRepository |
coffee-shop-2 | |
metallb-system | HelmRelease |
metallb |
Shout out to the following projects / people for the inspiration, support and manifests used in this repo.
- https://kubesearch.dev/ : A great tool for finding other inspiration
- gabe565/home-ops
- gabe565/charts
- bjw-s/home-ops
- onedr0p/home-ops