Skip to content

Jonnobrow/coffee-shop

Repository files navigation

Caution

This is a work-in-progress. For the "stable" code see: https://github.com/Jonnobrow/coffee-shop/tree/main

Coffee Shop 2.0 ☕

_... managed with Flux and Renovate 🤖

📖 Overview

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.

☕ Why Coffee Shop?

  • 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

🧱  Infrastructure

Currently the base infrastructure is manually provisioned 🤡

🧑‍💻  Configuration

I use Ansible roles for setting up infrastructure.

⛵ Kubernetes

Installation

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.

Core Components

  • 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

GitOps

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.

Directories

This Git repository contains the following directories under Kubernetes.

📁 kubernetes
├── 📁 apps           # applications
├── 📁 bootstrap      # bootstrap procedures
└── 📁 cluster        # core flux configuration

Repo Index

Namespace Kind Name Supporting Services
cert-manager HelmRelease cert-manager
flux-system GitRepository coffee-shop-2
metallb-system HelmRelease metallb

🤝  Thanks

Shout out to the following projects / people for the inspiration, support and manifests used in this repo.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors 4

  •  
  •  
  •  
  •