Skip to content

Repository for my GitOps manifest files and documentation. Used in production (at home) with Talos Linux and FluxCD.

Notifications You must be signed in to change notification settings

bjsonnen/homelab

Repository files navigation

Homelab

In my free time I'm running an enterprise Kubernetes cluster on my home server. I'm using it for learning and playing around. Using GitOps with a public repo forces me to think about security, backups, scalability and maintenance.

All apps are deployed via GitOps and FluxCD. I picked FluxCD over ArgoCD because it forces me to use the CLI and not a web interface. Some apps are usable outside my local network. This is done with Cloudflare Tunnel.

Principles

  • Storage is managed through Longhorn.
  • Everything is deployed through FluxCD (GitOps)
  • Using a public repo forces me to think more about security.
  • All apps are supposed to work in production. First I need a second mini pc for that.
  • Secrets are stored inside this git repository. All are encrypted. I'm using CNCF SOPS for encryption.

How to

General info

  • Make sure you install nfs-common. It's used by Longhorn.

Setup

Requirements:

  • Have an Ubuntu 24 VM or server

How to:

  • Move into the ansible/production/ or ansible/staging/ folder.
  • Add your VM/server's IP to the inventory.yaml with a new line under [cpn] and [wn] or [staging].
    • [cpn] stands for control plane node.
    • [wn] stands for worker node.
  • Run ansible-playbook production.yaml/staging.yaml -i inventory.

For production, this will configure Talos Linux and link them into one cluster. For staging, this will configure your VM, install k3s, and install the flux operator.

But be warned. This repo makes use of encrypted secrets via CNCF SOPS. Flux will complain that you never added the correct private key. But longhorn and the prometheus stack should start.

Software

I'm currently using the following technologies:

Applications

Logo Name Description
Homepage A modern and open-source dashboard application configurable via a YAML file. It's using Longhorn for storing the config files.
linkding linkding is a self-hosted open-source bookmark manager. Storage is provided by Longhorn.
Nextcloud An open-source self-hosted file storage. Made available to the public via a Cloudflare Tunnel. To store files, it uses a volume by Longhorn and uses CloudNativePG for it's database.
n8n n8n is a workflow automation platform that combines AI capabilities with business process automation. n8n is using Longhorn for storage. On top, it uses CloudNativePG for it's database.
Open-WebUI Open-WebUI makes use of Ollama to offer a web-interface for accessing local LLMs. It's using Longhorn for storage. Flux uses Helm to install it.
Ollama Ollama is a tool for running and managing local open-source AI models. It's using the Tinyllama model and Longhorn for storage.

Database

Logo Name Description
CloudNativePG A cloud-native Kubernetes operator for the PostgreSQL database. CloudNativePG uses Longhorn for storing data.

Storage

Logo Name Description
Longhorn Cloud-native production-ready management for Block Storage for Kubernetes. Used as the default storage option for new persistent volume claims.

System

Production

Logo Name Description
Talos Talos Linux is a minimal, hardened, immutable, and open-source Linux distribution designed for Kubernetes.

Staging

Logo Name Description
k3s K3s is a highly available Kubernetes distribution designed for production workloads in unattended, resource-constrained, remote locations or inside IoT appliances.
Ubuntu Ubuntu is the modern, open-source operating-system on Linux for the enterprise server, desktop, cloud, and IoT by Canonical.

General

Both production and staging use these tools, but also specific tools to their needs. Because I want to be able to check what's going on in staging, I'm using Ubuntu with k3s. In production, I only want to deploy what's working. Therefore I'm using Talos.

Logo Name Description
Proxmox Enterprise software for virtualization. Used to play around and switch from Ubuntu to for example Talos Linux.
FluxCD A CNCF project for continuous and progressive delivery of Kubernetes applications and infrastructure. It's used to enable GitOps.
Helm A package manager for Kubernetes. With Helm you can install applications directly to Kubernetes. Used to provide templates which are then reconfigured.
traefik An ingress reverse proxy used internally by Kubernetes.
Cloudflare Tunnel Creates a secure connection to Kubernetes pods without a publicly routable IP address.
CNCF SOPS Encrypts and decrypts files like YAML, JSON, ENV, INI, etc. Used for public secrets.
Ansible Used to automate the setup of virtual machines.

Continuous Integration Tests

Logo Name Description
KubeLinter Open-Source tool for highlighting typos and security problems for Kubernetes YAML manifests.

Hareware

I picked the Minisforum mini PC because it supports having a GPU. This will come in handy when using it with Ollama and n8n.

  • MINISFORUM 795S7

    • AMD Ryzen 9 7945HX (16C/32T)
    • 32GB DRR5 RAM
    • 1TB SSD
    • RTX 4060 OC 8GL
  • NiPoGi E3B Mini PC

    • ΑΜD Ryzen 5 7430U (6C/12T)
    • 64GB DDR4 RAM
    • 2TB SSD

Production

Control Plane Nodes:

  • 3x Talos Linux VM:
    • 4 CPU Cores
    • 50GB SSD
    • 4GB RAM

Worker Nodes:

  • 4x Talos Linux VM:
    • 3 CPU Cores
    • 50GB SSD
    • 3GB RAM

Scheduling is deactivated on the control plane nodes. All nodes are setup by Ansible using ansible/production/.

Staging

Control Plane Node:

  • Ubuntu 24 VM
    • 10 CPU Cores
    • 200GB SSD
    • 50GB RAM

Scheduling is activated on the control plane node. Only used for testing.

About

Repository for my GitOps manifest files and documentation. Used in production (at home) with Talos Linux and FluxCD.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages